Смекни!
smekni.com

CSS Design: Укрощение списков (стр. 2 из 2)

Вот примеры горизонтальных списков, помещенных в один и тот же базовый DIV со следующими правилами.

#h-contain {

padding: 5px;

border: 1px solid #000;

margin-bottom: 25px;

}

Два примера ниже используют все тот же UL только без длинного текста в последнем пункте. Добавлен также дополнительный класс, который позволяет отдельно работать с одним из LI в списке.

Границы

Символ | часто используется для обозначения различных вариантов выбора. Вполне естественно использовать его в меню. Сымитируем этот символ с помощью границ у LI.

#pipe ul {

margin-left: 0;

padding-left: 0;

display: inline;

}

#pipe ul li {

margin-left: 0;

padding: 3px 15px;

border-left: 1px solid #000;

list-style: none;

display: inline;

}

#pipe ul li.first {

margin-left: 0;

border-left: none;

list-style: none;

display: inline;

}

Мы добавили класс class="first" к первому LI, чтобы у него слева не появлялась ненужная граница.

Item 1

Item 2

Item 3

Item 4

Правила можно изменить, чтобы придать списку вид закладок:

#tabs ul {

margin-left: 0;

padding-left: 0;

display: inline;

}

#tabs ul li {

margin-left: 0;

margin-bottom: 0;

padding: 2px 15px 5px;

border: 1px solid #000;

list-style: none;

display: inline;

}

#tabs ul li.here {

border-bottom: 1px solid #ffc;

list-style: none;

display: inline;

}

Item 1

Item 2

Item 3

Item 4

В данном примере мы добавили класс class="here" к одному из LI, благодаря чему нижняя граница этого пункта списка имеет цвет, совпадающий с фоном. Таким образом в меню мы указываем на текущее положение пользователя на сайте.

Примечание: этот прием был предложен Ренделом Растом (RandalRust), а затем его улучшили подписчики списка рассылки css-discuss

Ссылки-цепочки

Еще один тип ссылок, которые обычно располагаются горизонтально на веб-странице - это известные всем нам ссылки-цепочки (breadcrumblinks). Эти ссылки показывают наглядно, где в иерархии сайта вы сейчас находитесь - весь ваш путь от главной страницы до текущего раздела или страницы. Если вы действительно хотите сделать код вашей страницы семантически правильным, этот тип ссылок следует оформить как серию вложенных списков, так как каждый раздел является частью предыдущего раздела:

<div id="bread"> <ul> <li class="first">Home <ul> <li>&#187; Products <ul> <li>&#187; Computers <ul> <li>&#187; Software</li> </ul></li> </ul></li> </ul></li> </ul> </div>

в результате получаем:

Home

» Products

» Computers

» Software

Применив следующие правила:

#bread {

color: #ccc;

background-color: #006;

padding: 3px;

margin-bottom: 25px;

}

#bread ul {

margin-left: 0;

padding-left: 0;

display: inline;

border: none;

}

#bread ul li {

margin-left: 0;

padding-left: 2px;

border: none;

list-style: none;

display: inline;

}

получаем вот что:

Home

» Products

» Computers

» Software

И опять-таки символ "»" (или любой другой подходящий символ) можно генерировать автоматически с помощью псевдо-элемента :before в сочетании с классом class="first", чтобы первый пункт LI не имел этого символа.

#bread-gen ul li:before {

content: "&bsol;0020 &bsol;0020 &bsol;0020 &bsol;00BB &bsol;0020";

color: #ff9;

}

#bread-gen ul li.first:before {

content: " ";

}

Конечный результат:

Home

Products

Computers

Software

Мир реалий

Закончу свою статью реальным примером, в котором использован вышеописанный трюк. Мы возьмем стандартный список UL со ссылками и создадим динамическое меню с эффектами перекатывания. Для создания эффекта перекатывания визуальные стили будут применяться к элементам A, а элементы UL и LI будут служить лишь как структурный каркас.

Home

Hidden Cameras

CCTV Cameras

Employee Theft

Helpful Hints

F.A.Q

About Us

ContactUs

Это меню - фактически ответ на вопрос, заданный Майклом Эффордом (MichaelEfford) в списке рассылки css-discuss. Майкл создал в точности такое же меню с помощью таблиц, графики и JavaScript. Затем он спросил в списке рассылки, можно ли то же самое получить с помощью CSS.

<div id="button">

<ul>

<li><a href="#">Home</a></li>

<li><a href="#">Hidden Cameras</a></li>

<li><a href="#">CCTV Cameras</a></li>

<li><a href="#">Employee Theft</a></li>

<li><a href="#">Helpful Hints</a></li>

<li><a href="#">F.A.Q</a></li>

<li><a href="#">About Us</a></li>

<li><a href="#">Contact Us</a></li>

</ul>

</div>

Дайте разберем стилевую таблицу правило за правилом, и я объясню для чего нужно каждое из них.

#button {

width: 12em;

border-right: 1px solid #000;

padding: 0 0 1em 0;

margin-bottom: 1em;

font-family: 'Trebuchet MS', 'Lucida Grande',

Verdana, Lucida, Geneva, Helvetica,

Arial, sans-serif;

background-color: #90bade;

color: #333;

}

Первое правило - для DIV-а #button. Оно задает, сколько места будет занимать меню, и создает контекст, чтобы мы могли управлять поведением ссылок и пунктов списка. Я предпочел сделать меню гибким и зависимым от установок броузера, поэтому (почти) все значения заданы в "em"-ах. Включая ширину меню. Черная граница была взята из исходного дизайна Майкла. Большой нижний отступ (padding) у меню сделан для того, чтобы вы могли видеть фон у DIV. Опять таки, это было сделано, чтобы повторить исходный дизайн. Нижнее поле (margin) используется для того, чтобы отделить меню от того, что за ним идет. Все цвета взяты из исходного дизайна.

#buttonul {

list-style: none;

margin: 0;

padding: 0;

border: none;

}

#button li {

border-bottom: 1px solid #90bade;

margin: 0;

}

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

#button li a {

display: block;

padding: 5px 5px 5px 0.5em;

border-left: 10px solid #1958b7;

border-right: 10px solid #508fc4;

background-color: #2175bc;

color: #fff;

text-decoration: none;

width: 100%;

}

html>body #button li a {

width: auto;

}

#button li a:hover {

border-left: 10px solid #1c64d1;

border-right: 10px solid #5ba3e0;

background-color: #2586d7;

color: #fff;

}

Наконец, я дошел до ссылок. В исходном дизайне слева и справа были границы по 10 пикселей каждый. Эти границы меняли свой цвет вместе с фоном при наведении мышки. Это поведение довольно просто получить с помощью псевдо-класса :hover, поэтому эффект изменения цвета границ и фона применен к элементам <A>.

Здесь воспользовался одним трюком: чтобы поведение ссылок распространялось на весь блок (по ширине и высоте), я присвоил им правило display: block;. Это сработало во всех броузерах, кроме IE для Windows. Если вы явно укажите ширину в 100%, IE для Windows все поймет. Но при этом вы получаете проблемы в броузерах IE5 для Mac и Netscape/Mozilla. Поэтому я схитрил: с помощью дочернего селектора ">" я присвоил ширине значение "auto". Так как броузер IE для Windows не понимает дочерних селекторов, он игнорирует это правило. IE5 для Mac, Opera и Netscape/Mozilla понимают это правило, и все остались довольными.

Правило для псевдо-класса :hover меняет цвет фона и границ при наведении мышки на ссылку.

Все стилевые правила и список (1 кб кода) заменили примерно 5кб JavaScript-ов и вложенных таблиц, не говоря уже о примерно 8кб графических файлов, использовавшихся для создания эффекта перекатывания. Кроме того разметка стала более читаемой, ее легче обновлять, так как вам не нужно создавать новые картинки, если поменяется название какого-либо меню. Достаточно лишь поменять текст. Окончательный вариант меню вы можете посмотреть на сайте AssetSurveillance.

Вершина айсберга

Хотите верьте, хотите - нет, но мы лишь слегка затронули тему списков и того, что с ними можно вытворять с помощью CSS. Я не утверждаю, что все приемы, изложенные тут, являются верхом совершенства, но я очень надеюсь что данная статья изменит ваше отношение к CSS и привлечет ваше внимание к идее структурной верстки.