Есть несколько способов достичь своей цели. Самое простое - установить статический класс для ваших вложенных ul
элементов. Это связано с тем, что они видны только тогда, когда они вызваны событием наведения родителя. Пример: http://jsfiddle.net/deloretta/gspnK/ (примечание: чтобы не допустить «перепрыгивания» текста внутри родительского элемента, вы можете попробовать добавить к элементу отступ в 1 пиксель и удалить его при наведении курсора, выравнивание текста по центру или любой другой метод тебе нравится).
Во-вторых, более неэффективным способом (но он использует его, который я не буду здесь описывать) вы можете узнать, есть ли у этого элемента дочерние элементы, и применить к ним класс следующим образом: http://jsfiddle.net/deloretta/XVrr6/
В идеале стили IE7 + должны находиться в их собственной таблице стилей (поскольку IE7 + поддерживает синтаксис !important
), и вы можете получить к ним доступ, используя условные комментарии. По сути, удалите свойства border
и поместите их в таблицу стилей, специфичную для IE. IE игнорирует объявления -moz-
и -webkit-
и правильно отображает свойства border
, тогда как moz / webkit игнорирует условные комментарии и отображает тень блока. Прекрасный жаблы.
Надеюсь, это поможет!
РЕДАКТИРОВАТЬ - ответ на ваш первоначальный комментарий:
Мне кажется, я понимаю ваш комментарий. Если нет, дайте мне знать, и я постараюсь помочь вам в дальнейшем.
Чтобы сделать эту работу с условными комментариями, вы должны разделить два стиля. Один специфический для IE, а другой для всех других браузеров. Вы можете сделать это так:
<link rel="stylesheet" type="text/css" href="/style.css">
<!--[if IE]>
<link rel="stylesheet" type="text/css" href="/style_ie.css">
<![endif]-->
Затем вам следует изменить существующую таблицу стилей, чтобы она содержала следующую информацию:
#nav #link1.selected > a {
padding-bottom: 10px;
margin-bottom: 0;
-webkit-border-radius: 5px 5px 0 0;
-moz-border-radius: 5px 5px 0 0;
border-radius: 5px 5px 0 0;
/*the border declaration used to be here
but we moved to another stylesheet
specifically for IE*/
-webkit-box-shadow:0px 1px 1px #f0f;
-moz-box-shadow:0px 1px 1px #f0f;
}
.static_class{
/*border used to be here*/
-webkit-box-shadow:0px 1px 1px #f0f;
-moz-box-shadow:0px 1px 1px #f0f;
}
Затем создайте отдельную таблицу стилей с именем styles_ie.css
- в ней будет размещена информация о границах, которую мы удалили из другой таблицы стилей. Вот так:
#nav #link1.selected > a {
border-bottom:1px solid #f0f;
border-left:1px solid #f0f;
border-right:1px solid #f0f;
}
.static_class{
border-bottom:1px solid #f0f;
border-left:1px solid #f0f;
border-right:1px solid #f0f;
}
Итак ... Что происходит?
Internet Explorer - единственный браузер, поддерживающий условные комментарии. Поэтому, когда Firefox, Safari или Chrome попадают на страницу, они игнорируют комментарии и, следовательно, не отображают таблицу стилей, связанную в комментариях.
Когда Internet Explorer попадает на страницу, он отображает все, что понимает, из styles.css
- игнорируя свойства border-radius
и box-shadow
и т. Д. (Потому что он их не понимает). Затем он переходит к условным комментариям (которые он понимает), затем загружает таблицу стилей styles_ie.css
и затем применяет дополнительный стиль к элементам. Легко-peasy, лимонный отжим:]