Как добавить тень в один пиксель вокруг основной навигационной ссылки вместе со всем выпадающим списком вспомогательной навигации?

#css #border #drop-shadow

#css — файл #граница #отбрасываемая тень #css

Вопрос:

Я использую выпадающие меню с моими основными навигационными ссылками, и мне нужно добавить тень в один пиксель вокруг всего (текущей навигационной кнопки / ссылки (которая имеет закругленные углы с использованием border-radius) и всего выпадающего элемента вспомогательной навигации).).

Я опубликовал демонстрацию этого на JSFiddle:

http://jsfiddle.net/thebluehorse/TFqjR/2/

Может кто-нибудь обновить его или подсказать мне, что сделать, чтобы при переходе по навигационной ссылке вокруг всего была отбрасываемая тень в один пиксель? Обратите внимание, что он должен огибать закругленные углы в главной навигационной системе. Он должен поддерживать IE7 , но я думаю, что если используется box-shadow, то CSS3 Pie можно использовать в качестве вспомогательного средства.

Будем признательны за любую помощь. Эта штука сводит меня с ума.

Ответ №1:

Существует несколько способов достичь вашей цели. Самый простой — установить статический класс для ваших вложенных ul элементов. Это связано с тем, что они видны только тогда, когда они запускаются родительским событием наведения курсора мыши. Пример: http://jsfiddle.net/deloretta/gspnK / (примечание: чтобы текст внутри родительского элемента не «прыгал», вы могли бы попробовать добавить к элементу отступ размером 1 пиксель и удалить его при наведении курсора мыши, или выровнять текст по центру, или любым другим способом, который вам нравится).

Во-вторых, более неэффективным способом (но имеющим свои применения, о которых я не буду здесь распространяться) вы можете выяснить, есть ли у этого элемента дочерние элементы, и применить к ним класс следующим образом: http://jsfiddle.net/deloretta/XVrr6 /

В идеале стили IE7 должны находиться в их собственной таблице стилей (поскольку IE7 поддерживает !important синтаксис), и вы могли бы получить к ним доступ с помощью условных комментариев. В принципе, удалите border свойства и поместите их в таблицу стилей, специфичную для IE. IE проигнорирует объявления -moz- и -webkit- и правильно отобразит border свойства, в то время как moz / webkit проигнорирует условные комментарии и отобразит тень окна. Прекрасный jubbly.

Надеюсь, это поможет!

РЕДАКТИРОВАТЬ — ответ на ваш первоначальный комментарий:

Я думаю, что понял ваш комментарий. Если нет, дайте мне знать, и я постараюсь помочь в дальнейшем.

Чтобы это работало с условными комментариями, вы должны разделить два стиля. Один специфичен для 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 и затем применяет дополнительный стиль к элементам. Проще простого, как выжатый лимон :]

Комментарии:

1. Спасибо! Можно ли как-нибудь сделать так, чтобы удалить верхнюю / более темную строку в 1 пиксель, которая находится в самом низу выпадающих меню? Я использую первый метод.

2. @Cofey — какой браузер вы используете? Можете ли вы предоставить скриншот? Смотрите мой оригинальный ответ для обновления с более подробной информацией.

3. Конечно: вот вы где: img.skitch.com/20110427-bs3qetw8wf65axsdnuu2y51c9t.jpg (обратите внимание, что внизу два пикселя вместо одного). Я использую последнюю версию Chrome и заметил, что она делает это и в Firefox 3.6.

4. О, хорошо. Я вижу, что происходит. Если вам просто нужна «тень в 1 пиксель», тогда не утруждайте себя -box-shadow объявлением и не утруждайте себя разделением таблиц стилей — так что это выглядит так: jsfiddle.net/5tsnk