Навигация в списках и блочные ссылки
Когда-то навигационные панели делались из таблиц, заполненных нарисованными в Фотошопе кнопками. В последнее время, когда появилась возможность все больше и больше полагаться на возможности CSS, происходит движение в сторону большей семантичности. С точки зрения семантики, навигационнное меню - это список ссылок. С этой точки зрения мы на него и будем смотреть.
С помощью CSS можно с легкостью достичь множества эффектов, для которых ранее пришлось нарезать бы множество графических элементов. Разумеется, чем сложнее эффект, тем лучше браузер требуется для его поддержки, поэтому стоит в любой сложный эффект включать какой-нибудь простой элемент, чтобы обеспечить удобство для посетителей со старыми версиями. Сейчас мы рассмотрим несколько любопытных эффектов для вертикального меню. Горизонтальные меню в настоящее время менее удобны в реализации списками, поскольку обычно требуют поддержки псевдоклассов :before, :after, :first-child, свойства content и прочих сложных вещей. Подготовительная работа
Нам понадобится список из нескольких ссылок и простейшие базовые стили для начала работы:
ul {border:1px solid black; width:30%; padding:0; margin:1em}
ul li {list-style:none}
ul li a {text-decoration:none; color:blue}
ul li a:hover {color:red}
Первая ссылка Вторая ссылка Третья ссылка Еще какая-то ссылка Пара замечаний по этому коду. Во-первых, тут мы уже задали один простой эффект: перемену цвета при наведении мыши. Это самый простой элемент, и я бы рекомендовал включать его во все hover-эффекты, поскольку он понятен любому браузеру, понимающему hover, тогда как более сложные эффекты кто-то может и не понять. Второе замечание: list-style, конечно, можно написать в ul, ничего от этого не изменится. Просто мне захотелось сразу обозначить те четыре селектора, с которыми мы будем работать в дальнейшем. Блокировка
Вообще мысль оформить навигацию списком довольно очевидна. Но у графических кнопок есть большое преимущество перед текстовыми ссылками: на кнопки можно нажимать по всей площади, тогда как у ссылки клику поддается только сам текст. Раньше люди клали жизнь на алтарь, пытаясь сделать "кликабельной" клетку таблицы. Теперь есть куда более простое (и что немаловажно, легальное) средство: display:block.
Установка этого атрибута сделает нашу ссылку нажимаемой по всей ширине списка. Чтобы нам было легче это заметить, добавим изменение фона у ссылки:
ul {border:1px solid black; width:30%; padding:0; margin:1em;}
ul li {list-style:none;}
ul li a {text-decoration:none; color:blue; display:block}
ul li a:hover {color:red; background:#eff}
Два очень важных замечания по MSIE 5.0 (что-то, возможно, верно и для более новых). Во-первых, он норовит вставить лишние пробелы между строками:
Эта проблема решается неэлегантно, но просто: нужно убрать переносы строк между элементами списка:
Первая ссылкаВторая ссылкаТретья ссылкаЕще какая-то ссылка Вторая проблема куда серьезнее, и у нее, кажется, нет решения: если у списка или у какого-либо родительского элемента задана ширина (возможно даже 100%), ссылка не становится нажимаемой вне области текста. ............