В соответствии с документацией W3:
[att|=val]
Представляет элемент с атрибутом att, значение которого либо точно равно "val", либо начинается с "val", за которым сразу следует "- "(U + 002D)
http://www.w3.org/TR/CSS2/selector.html#attribute-selectors
Это означает, что ul[id|='menu']
ищет <ul id="menu-somevalue"/>
или <ul id="menu" />
Вероятно, поэтомуне работает, потому что menutop и menumain не совпадают.
Вы можете попробовать переименовать идентификаторы в menu-top и menu-main, или вы можете сделать:
<ul id="menutop" class="menu">
<li><a href="#">item1</a></li>
<li><a href="#">item2</a></li>
<li><a href="#">item3</a></li>
</ul>
<ul id="menumain" class="menu">
<li><a href="#">item1</a></li>
<li><a href="#">item2</a></li>
<li><a href="#">item3</a></li>
</ul>
и ваш css:
ul.menu li a {color: #f00;}
Это будетВы можете покрасить все необходимые элементы меню, но при этом иметь возможность иметь уникальные идентификаторы для использования с любым сценарием и т. д. при необходимости.
Кроме того, как упоминал Пекка, селектор >
отсутствуетt широко поддерживается, так что вы можете пересмотреть его использование сейчас ...