На этой странице:
Для изменения типа маркера применяют свойство list-style-type
.
CSS не различает нумерованные |
|
В браузерах, как правило, задаются предопределённые стили для вложенных списков:
|
UL {list-style-type:disc;} UL UL {list-style-type:circle;} UL UL UL {list-style-type:square;} |
Свойство list-style-type
наследуемое, но в силу
предопределений браузера стиль, заданный для корневого
UL
, не распространится на потомки. Если это нужно,
придётся определять для потомков явные стили чтобы перекрыть определения
браузера, например, так:
UL, UL UL, UL UL UL {list-style-type:circle;}
|
Теперь маркерами всех трёх вложенных списков будут служить окружности. |
Стандартный маркер можно заменить собственным, привлекая для этого
свойство list-style-image
.
|
Маркер можно располагать вне или внутри содержимого элемента списка.
Это делается при помощи свойства
list-style-position
.
|
Все три свойства списка можно свести в одно:
list-style
.
Файл style.css
OL {list-style:lower-roman inside;}
Файл ![]() |
|
Рассмотрим подробнее устройство списка.
Блочные элементы LI
следуют друг за другом
внутри блочного элемента UL
(или
OL
). Маркеры не оказывают влияние на
компоновку страницы: они “привешиваются” браузером слева
от каждого LI
на фиксированном
расстоянии. Это расстояние зависит от браузера. В некоторых случаях
маркеры могут оказаться даже за пределами окна (такой пример будет рассмотрен ниже).
|
По правилу оформления списков, пункты должны записываться с отступом слева. Браузеры IE и Opera образуют промежуток при помощи внешнего отступа, который можно описать так: UL, OL {margin-left:40px;} |
|
Браузер Firefox образует промежуток при помощи внутреннего отступа: UL, OL {padding-left:40px;} |
Пиксельный размер промежутка нельзя назвать удачным решением.
Гораздо лучше использовать em
, тогда величина сдвига
будет зависеть от размера шрифта и меняться пропорционально вместе с ним.
Чтобы задать собственные em
-отступы, можно записать
один их двух вариантов:
Вариант 1:
UL, OL { margin-left:2em; padding-left:0; } |
Вариант 2:
UL, OL { padding-left:2em; margin-left:0; } |
Посмотрите, как это работает в следующем примере.
Файл style.css
UL, OL { margin-left:2em; padding-left:0; background:#afe9de; }
Для размещения в отступе широкого маркера величины
и |
Файл index.htm
|
В теме 9, в разделе “Кодирование списков” был рассмотрен
пример со списком, в котором нумерация начиналась с
XXVI
. Чтобы маркер не вышел за пределы окна, пришлось для
OL
установить внешний отступ в
100px
:
Комментарий к вынужденному стилевому описанию был такой:
Браузеры делают фиксированный отступ для вывода элементов списка на экран (примерно 40 пикселов). Нумерация при этом смещается к левому краю окна. Когда номер достаточно большой, места не хватает. Для исключения этого неприятного эффекта в коде примера пришлось задать смещение списка вправо на 100 пикселов при помощи стилевого указанияstyle="margin-left:100px"
в тегеOL
.
|
|
Расстояние между маркером и LI
, как уже
было сказано, задаётся браузером, и в CSS пока нет средств для
управления этим параметром.
Но можно отказаться от стандартных маркеров
(при помощи правила list-style-type:none
), нарисовать свой
маркер и выводить его
как фоновую картинку в левый внутренний
отступ каждого LI
.
Файл style.css
UL { margin-left: 1em; padding-left: 0; } UL LI { padding-left:20px; list-style-type: none; background: url(pic/marker8.png) no-repeat 0 0.6em; }
В качестве маркера задано изображение
|
Файл index.htm
|
А что если маркер, как фоновое изображение, выравнивать по центру в
вертикальном направлении? Тогда он должен точно попасть в середину
LI
по вертикали!
Файл style.css
UL { margin-left: 1em; padding-left: 0; } UL LI { padding-left:20px; list-style-type: none; background: url(pic/marker8.png) no-repeat 0 center; }
|
Файл index.htm
|
Получилось неплохо. А теперь протестируем наше решение на вложенном списке.
Что такое? Почему маркеры рассыпались как горошины? Попробуйте самостоятельно объяснить причину. На самом деле, и в первом варианте с простым (не вложенным) списком не всё в порядке: попробуйте уменьшить ширину окна так, чтобы текст пунктов стал занимать более одной строки.
Построим горизонтальный список — основу для меню сайта и оформим его так, как показано на рисунке:
Запишем список позиций в виде обычного UL
пока без всяких стилевых указаний.
Так это выглядит в окне браузера: Горизонтальный список
|
Файл index.htm
|
Конечно, на горизонтальный список это не похоже. Но стоит взять в руки CSS, как через несколько минут картина совершенно изменится!
Прежде всего, уберём маркеры и, главное, превратим блочные элементы
LI
в строчные при помощи свойства
display
.
Файл style.css
.menu {list-style:none;} .menu LI {display:inline;} Так это выглядит в окне браузера: Горизонтальный список
|
Файл index.htm
|
Свойство display
позволяет изменять представление
элемента на экране (как и следует из его названия). Значение
inline
заставляет элемент вести себя подобно строчному, а значение
block
— подобно блочному.
Отметим, что изменение ролей не меняет тип элемента, меняет только его
представление на экране. В частности, по-прежнему блочные
элементы не могут быть потомками строчных, даже при изменении их ролей
свойством display
.
На следующем шаге сделаем следующее. Для блока UL
:
Для элементов LI
зададим рубленый
шрифт уменьшенного на 20% размера.
Файл style.css
.menu { list-style:none; margin:0; padding:3px 0; white-space:nowrap; } .menu LI { display:inline; font:0.8em Tahoma,sans-serif; } Так это выглядит в окне браузера: Горизонтальный список
|
Файл index.htm
|
Теперь осталось каждый элемент LI
превратить
в кнопку. Что делаем:
Файл style.css
.menu { list-style:none; /* Убираем маркеры */ margin:0; /* Убираем внешние отступы */ padding:3px 0; /* Убираем лишние внутренние отступы */ white-space:nowrap; /* Запрещаем переносы */ } .menu LI { display:inline; /* Превращаем LI в строчный элемент */ font:0.8em Tahoma,sans-serif; /* Определяем шрифт */ background:#fff2a6; /* Фон кнопки */ padding: 2px 0.5em; /* Задаём внутренние отступы */ border:1px solid gray; /* Рамка вокруг кнопки */ border-left-color:#fff2a6; /* Убираем повтор рамки слева */ } .menu LI.first { border-left-color:gray; /* Восстанавливаем первую рамку */ }
Так это выглядит в окне браузера: Горизонтальный список
Небольшая хитрость: рамки кнопок на стыках удваиваются, поэтому
для левой рамки назначаем цвет фона |
Файл index.htm
|