Мастерство css-кодирования: меню с hover-эффектом

Мастерство css-кодирования: меню с hover-эффектом

comments Комментариев 0

Очень часто для решения простейших, на первый взгляд, задач от верстальшика требуется обладание солидным багажом знаний и навыков. Более того, "простые" задачи зачастую требуют использование нестандартного подхода для достажения оптимального результата.

В этой статье я покажу с какими "подводными камнями" может столкнуться верстальщик, кодируя простейшее вертикальное меню.

В итоге у нас должно получиться вот такое простое меню:

Обращаю ваше внимание на то, что мы не используем ни одного фонового изображения! Все эффекты будут созданы только возможностям css.

Итак, приступим.

HTML-разметка

Прежде всего создадим вот такую HTML-разметку:

<ul>
    <li><a href="#">Link_1</a></li>
    <li><a href="#">Link_2</a></li>
    <li><a href="#">Link_3</a></li>
    <li><a href="#">Link_4</a></li>
    <li><a href="#">Link_5</a></li>
</ul>

Кстати, почти все начинающие верстальщики задаются вопросом: почему для создания меню чаще используется именно конструкция ненумерованного списка, а не, к примеру, вложенные div'ы? Я встречал множество разных мнений на этот счёт (некоторые даже объясняли это тем, что список, якобы, требует меньше ресурсов и времени на обработку браузером!.. - не знаю). Я же считаю, что список, просто напросто, даёт нам более понятный и "чистый" код, а также множество элементов для css-стилизации.

CSS

Приступаем к стилизации. В первую очередь избавимся от стандартных маркеров и отступов ненумерованного списка:

ul {
	margin:0px;	/*избавляемся от дефолтовых внешних отступов*/
	padding:0px; /*избавляемся от дефолтовых внутренних отступов*/
	list-style-type:none; /* избавляемся от стандартных маркеров списка */
	border-top:solid 1px #c2e0f8;
	border-bottom:solid 1px #79a8ce;
}

Теперь озадачимся созданием границы между элементами списка. Здесь предлагаю ознакомиться с техникой "рельефной границы", суть которой заключается в создании тонких (в 1 px) соприкасающихся линий немного более светлого и более тёмного цветов по сравнению с цветом фона.

Такая техника позволит нам создать очень реалистичную рельефную границу между элементами, не прибегая к использованию фоновых изображений.

ul li {
	display:block;
	border-bottom:solid 1px #c2e0f8;
	border-top:solid 1px #79a8ce;
}

Должен также отметить, что расположение светлой линии над тёмной визуально сделает границу выпуклой, в то время как обратное расположение линий даст нам эффект рубчика.

Кстати, надеюсь вы уже обратили внимание на то, что для "задвоения" верхней и нижней границ у соответственно первого и последнего элементов списка мы стилизовали должным образом границы самого списка (параметры border-top и border-bottom для ul).

И наконец, осталось сделать элементы списка кликабельными и заставить цвет шрифта и фона элемента изменяться при наведении курсора.

Вот тут-то мы и обнаруживаем тот самый "подводный камень"! Дело в том, что если просто определить для "ul li a" свойство display:block (чтобы, как вы догадались, элемент "a" заполнил родительский элемент "li"), то печально известный IE6 проигнорирует это свойство и сделает кликабельной только текст ссылки, а не всю область элемента li.

На помощь приходит свойство position:relative; для элемента ul li a, которое как бы заставляет элемент "а" заполнить всё пространство родительского "li" (кстати, не используйте с этой целью width и height со значениями 100% для "a", т.к. они увеличат "а" на существующий padding!):

ul li a {
	display:block;
	padding:5px;
	position: relative; /* Хак для IE6 */
}
ul li a:hover {background:#b7d8f3; color:#537997;}

Итак, наше меню готово, а его итоговый css-код выглядит следующим образом:

ul {
	margin:0px;	/*избавляемся от дефолтовых внешних отступов*/
	padding:0px; /*избавляемся от дефолтовых внутренних отступов*/
	list-style-type:none; /* избавляемся от стандартных маркеров списка */
	border-top:solid 1px #c2e0f8;
	border-bottom:solid 1px #79a8ce;
}
ul li {
	display:block;
	border-bottom:solid 1px #c2e0f8;
	border-top:solid 1px #79a8ce;
}
ul li a {
	display:block;
	padding:5px;
	position: relative; /* Хак для IE6 */
}
ul li a:hover {background:#b7d8f3; color:#537997;}

А с тем, как всё это выглядит вы можете ознакомиться ВОТ ТУТ.

  • Понравилась статья?
    Добавь в закладки
    или поделись с друзьями:  

Добавить комментарий


Сообщать о последующих комментариях

Пожалуйста, введите слово, которое Вы видите на изображении:



© WEB-BRICKS.RU 2010 | УСЛОВИЯ КОПИРОВАНИЯ | ОБРАТНАЯ СВЯЗЬ | СПИСОК ПОЛЬЗОВАТЕЛЕЙ