Стилизация списков
- Назад
- Обзор: Styling text
- Далее
Списки, по-большому счету, ведут себя также как любой другой текст, но существуют некоторые специфичные настройки CSS, о которых вы должны знать. В этой статье они все описываются.
Требования: | Базовая компьютерная грамотность, основы HTML (изучите Введение в HTML), основы CSS (изучите Введение в CSS), CSS основы по тексту и шрифтам. |
---|---|
Цель: | Познакомиться с лучшими практиками и свойствами по стилизации списков. |
Пример простого списка
Для начала, давайте взглянем на пример простого списка. В данной статье мы рассмотрим ненумерованный, нумерованный и описательный списки — все они имеют аналогичные свойства стилизации, но некоторые имеют свои специальные свойства. Не стилизованный пример доступен на Github (проверьте также источник кода.)
HTML для нашего примера списка представлен ниже:
<h2>Shopping (unordered) list</h2>
<p>Paragraph for reference, paragraph for reference, paragraph for reference,
paragraph for reference, paragraph for reference, paragraph for reference.</p>
<ul>
<li>Hummus</li>
<li>Pita</li>
<li>Green salad</li>
<li>Halloumi</li>
</ul>
<h2>Recipe (ordered) list</h2>
<p>Paragraph for reference, paragraph for reference, paragraph for reference,
paragraph for reference, paragraph for reference, paragraph for reference.</p>
<ol>
<li>Toast pita, leave to cool, then slice down the edge.</li>
<li>Fry the halloumi in a shallow, non-stick pan, until browned on both sides.</li>
<li>Wash and chop the salad.</li>
<li>Fill pita with salad, hummus, and fried halloumi.</li>
</ol>
<h2>Ingredient description list</h2>
<p>Paragraph for reference, paragraph for reference, paragraph for reference,
paragraph for reference, paragraph for reference, paragraph for reference.</p>
<dl>
<dt>Hummus</dt>
<dd>A thick dip/sauce generally made from chick peas blended with tahini, lemon juice, salt, garlic, and other ingredients.</dd>
<dt>Pita</dt>
<dd>A soft, slightly leavened flatbread.</dd>
<dt>Halloumi</dt>
<dd>A semi-hard, unripened, brined cheese with a higher-than-usual melting point, usually made from goat/sheep milk.</dd>
<dt>Green salad</dt>
<dd>That green healthy stuff that many of us just use to garnish kebabs.</dd>
</dl>
Если вы перейдёте к живому примеру прямо сейчас и изучите элемент списка используя инструменты разработчика браузера, то вы заметите несколько стилей установленных по умолчанию:
- Элементы
<ul>
и<ol>
имеют верхний и нижнийmargin
по16px
(1em
) иpadding-left
40px
(2.5em
.) - Объекты списка (элементы
<li>
) не имеют заданных значений по умолчанию для интервалов. - Элемент
<dl>
имеет верхний и нижнийmargin
по16px
(1em
), но padding не задан. - Элементы
<dd>
имеютmargin-left
40px
(2.5em
.) - Элементы
<p>
которые мы включили для ссылок (сноски) имеют верхний и нижнийmargin
по16px
(1em
), точно так же, как и различные типы списков.
Управление интервалами списков
При оформлении списков, вам необходимо настроить их стили так, чтоб они сохраняли то же вертикальное расстояние, что и окружающие их элементы (такие как параграфы и изображения; иногда называемые вертикальным ритмом) и то же расстояние по горизонтали как и между собой (посмотреть законченный стилизированный пример на Github, а также найти исходный код.)
CSS, используемый для оформления текста и интервалов, выглядит следующим образом:
/* Базовые стили */
html {
font-family: Helvetica, Arial, sans-serif;
font-size: 10px;
}
h2 {
font-size: 2rem;
}
ul,ol,dl,p {
font-size: 1.5rem;
}
li, p {
line-height: 1.5;
}
/* Задаём стили для списка описаний */
dd, dt {
line-height: 1.5;
}
dt {
font-weight: bold;
}
dd {
margin-bottom: 1.5rem;
}
- Первое правило устанавливает шрифт сайта и основной размер шрифта 10px. Они наследуются всеми на этой странице.
- Правила 2 и 3 задают относительные размеры шрифтов заголовков, различных типов списков (их наследуют дочерние элементы списков) и параграфов. Это значит, что каждый параграф и список будут иметь одинаковый размер шрифта, а также верхний и нижний интервалы, помогая сохранить согласованность вертикального ритма.
- Правило 4 задаёт одинаковую высоту
line-height
в параграфах и пунктах списка — так, что параграфы и каждый отдельный пункт списка будут иметь те же интервалы между строками. Это также поможет сохранить согласованность вертикального ритма. - Правила 5 и 6 применяются к списку описаний — мы задаём одинаковую высоту
line-height
между терминами и описаниями списке описаний как мы это делали с параграфами и пунктами списка. И снова, согласованность хорошая! Мы также делаем описание терминов жирным шрифтом, чтобы они визуально выделялись легче.
Стили специфичные для списков
Теперь, рассмотрев общие методы интервалов для списков, давайте изучим некоторые специфичные спискам свойства. Существует три свойства, с которых вам надо начать знакомство, которые могут быть установлены для элементов <ul>
или <ol>
:
list-style-type
(en-US): задаёт тип маркеров для использования в списке, например, квадратные или круглые маркеры для неупорядоченного списка, или цифры, буквы или римские цифры для упорядоченного списка.list-style-position
(en-US): управляет будет ли маркер появляется внутри пунктов списка или вне их перед началом каждого элемента.list-style-image
: позволяет вам использовать пользовательские изображения в качестве маркеров, а не просто квадрат или круг.
Стили маркеров
Как указано выше, свойство list-style-type
(en-US) позволяет вам устанавливать какой тип маркера использовать в качестве точек маркера. В нашем примере мы установили использование заглавных римских цифр в упорядоченном списке:
ol {
list-style-type: upper-roman;
}
Это даёт нам следующий вид:
Вы можете найти гораздо больше опций, заглянув на справочную страницу list-style-type
(en-US).
Позиция маркера
Свойство list-style-position
(en-US) устанавливает будет ли появляться маркер внутри пунктов списка или снаружи перед началом каждого пункта. Значение по умолчанию — outside
, которое заставляет маркеры находится снаружи пунктов списка, как видно выше.
Если вы установите значение на inside
, то маркеры будут находиться внутри строк:
ol {
list-style-type: upper-roman;
list-style-position: inside;
}
Использование пользовательского изображения как маркер
Свойство list-style-image
позволяет вам использовать пользовательское изображение в качестве вашего маркера. Синтаксис довольно прост:
ul {
list-style-image: url(star.svg);
}
Однако это свойство немного ограничено с точки зрения управления позициями, размерами (и т.д.) маркеров. Вам лучше использовать семейство свойств background
, о которых вы узнаете намного больше в модуле Styling boxes. А пока вот вам образец для дегустации!
В нашем законченном примере мы оформили неупорядоченный список следующим образом (поверх того, что вы уже видели выше):
ul {
padding-left: 2rem;
list-style-type: none;
}
ul li {
padding-left: 2rem;
background-image: url(star.svg);
background-position: 0 0;
background-size: 1.6rem 1.6rem;
background-repeat: no-repeat;
}
Мы сделали следующее:
- Установили
padding-left
элемента<ul>
с40px
по умолчанию на20px
, затем установили то же самое количество в пунктах списка. Это для того, чтобы все пункты списка продолжали выравниваться с порядком пунктов списка и описаний списка описаний, но пункты списка имеют некоторый padding для фоновых изображений чтобы сидеть внутри. Если бы мы не сделали этого, то фоновые изображения накладывались бы с текстом пунктов списка, что выглядело бы неряшливо. - Установили
list-style-type
(en-US) наnone
, для того чтобы маркеры не появлялись по умолчанию. Мы собираемся использовать свойстваbackground
для управления маркерами. - Вставили маркер в каждый пункт неупорядоченного списка. Соответствующие свойства, следующие:
background-image
: Указывает путь к файлу изображения, который вы хотите использовать в качестве маркера.background-position
: Определяет где в фоне выбранного элемента появится изображение — в данном случае мы говорим0 0
, что значит что маркер будет появляться в самом верху слева каждого пункта списка.background-size
: Задаёт размер фонового изображения. В идеале мы хотим, чтоб маркеры были того же размера что и пункты списка (или самую малость меньше или крупнее). Мы используем размер1.6rem
(16px
), что очень хорошо сочетается с отступом (padding)20px
, который мы позволили разместить внутри маркера — 16px плюс 4px интервала между маркером и текстом пункта списка работают хорошо.background-repeat
: По умолчанию, фоновые изображения повторяются пока не заполнят доступное фоновое пространство. Мы хотим всего лишь одну копию вставленного изображения в каждом случае, поэтому мы установили значениеno-repeat
.
Это даёт нам следующий результат:
короткая запись list-style
Эти три свойства упомянутые выше могут все быть заданы, используя лишь одну короткую запись свойства, list-style
(en-US). Например, следующий CSS:
ul {
list-style-type: square;
list-style-image: url(example.png);
list-style-position: inside;
}
Может быть заменён этим:
ul {
list-style: square url(example.png) inside;
}
Значения могут быть перечислены в любом порядке, и вы можете использовать одно, два и все три (значения по умолчанию, использованные для свойств, которые не включены — disc
, none
, и outside
). Если указаны и type
и image
, тип используется в качестве запасного варианта, если изображение по какой-либо причине не может быть загружено.
Контроль счета списка
Иногда вам может понадобиться вести счёт в упорядоченном списке по-другому — например начинать с цифры отличной от 1, или считать в обратном порядке, или вести счёт с шагом больше 1. HTML и CSS имеют несколько инструментов которые помогут с этим.
start
Атрибут start
позволит вам начать счёт списка с цифры отличной от 1. Например:
<ol start="4">
<li>Toast pita, leave to cool, then slice down the edge.</li>
<li>Fry the halloumi in a shallow, non-stick pan, until browned on both sides.</li>
<li>Wash and chop the salad.</li>
<li>Fill pita with salad, hummus, and fried halloumi.</li>
</ol>
что даст вам такой результат:
reversed
Атрибут reversed
начнёт отсчёт по убыванию вместо возрастания. Например:
<ol start="4" reversed>
<li>Toast pita, leave to cool, then slice down the edge.</li>
<li>Fry the halloumi in a shallow, non-stick pan, until browned on both sides.</li>
<li>Wash and chop the salad.</li>
<li>Fill pita with salad, hummus, and fried halloumi.</li>
</ol>
что даст вам такой результат:
Примечание: Обратите внимание: Если пунктов в списке в обратном списке больше, чем значение атрибута start
, счёт продолжится до нуля и далее отрицательные значения.
value
Атрибут value
позволит вам установить специфичные цифровые значения к пунктам списка. Например:
<ol>
<li value="2">Toast pita, leave to cool, then slice down the edge.</li>
<li value="4">Fry the halloumi in a shallow, non-stick pan, until browned on both sides.</li>
<li value="6">Wash and chop the salad.</li>
<li value="8">Fill pita with salad, hummus, and fried halloumi.</li>
</ol>
что даст вам такой результат:
Примечание: Обратите внимание: Даже если вы используете нечисловой list-style-type
(en-US), вам всё равно надо использовать эквивалентное цифровое значение в атрибуте value
.
Активное изучение: Стилизация вложенного списка
В этой сессии активного изучения, мы хотим, чтобы вы взяли всё что вы выучили выше и попробовали стилизовать вложенный список. Мы предоставили вам HTML и хотим, чтобы вы:
- Задали неупорядоченному списку квадратные маркеры.
- Задали пунктам неупорядоченного и упорядоченного списка 1,5 межстрочный интервал их размера шрифта.
- Задали упорядоченному списку маркеры в виде строчных букв.
- Не стесняйтесь играться с примерами списков столько сколько вам нравится, экспериментируя с типами маркеров, интервалами или со всем что вы найдёте.
Если вы допустите ошибку, вы всегда можете сделать сброс используя кнопку Reset. Если вы застрянете, нажмите кнопку Show solution чтобы посмотреть возможный ответ.
<div class="body-wrapper" style="font-family: 'Open Sans Light',Helvetica,Arial,sans-serif;">
<h2>HTML Input</h2>
<textarea id="code" class="html-input" style="width: 90%;height: 10em;padding: 10px;border: 1px solid #0095dd;"><ul>
<li>First, light the candle.</li>
<li>Next, open the box.</li>
<li>Finally, place the three magic items in the box, in this exact order, to complete the spell:
<ol>
<li>The book of spells</li>
<li>The shiny rod</li>
<li>The goblin statue</li>
</ol>
</li>
</ul></textarea>
<h2>CSS Input</h2>
<textarea id="code" class="css-input" style="width: 90%;height: 10em;padding: 10px;border: 1px solid #0095dd;"></textarea>
<h2>Output</h2>
<div class="output" style="width: 90%;height: 12em;padding: 10px;border: 1px solid #0095dd;overflow: auto;"></div>
<div class="controls">
<input id="reset" type="button" value="Reset" style="margin: 10px 10px 0 0;">
<input id="solution" type="button" value="Show solution" style="margin: 10px 0 0 10px;">
</div>
</div>
var htmlInput = document.querySelector(".html-input");
var cssInput = document.querySelector(".css-input");
var reset = document.getElementById("reset");
var htmlCode = htmlInput.value;
var cssCode = cssInput.value;
var output = document.querySelector(".output");
var solution = document.getElementById("solution");
var styleElem = document.createElement('style');
var headElem = document.querySelector('head');
headElem.appendChild(styleElem);
function drawOutput() {
output.innerHTML = htmlInput.value;
styleElem.textContent = cssInput.value;
}
reset.addEventListener("click", function() {
htmlInput.value = htmlCode;
cssInput.value = cssCode;
drawOutput();
});
solution.addEventListener("click", function() {
htmlInput.value = htmlCode;
cssInput.value = 'ul {n list-style-type: square;n}nnul li, ol li {n line-height: 1.5;n}nnol {n list-style-type: lower-alphan}';
drawOutput();
});
htmlInput.addEventListener("input", drawOutput);
cssInput.addEventListener("input", drawOutput);
window.addEventListener("load", drawOutput);
Смотрите также
Счётчики CSS предоставляют расширенные инструменты для настройки счета и оформления списков, но они довольно сложные. Мы рекомендуем изучить это, если вы захотите размяться. Смотрите:
@counter-style
counter-increment
(en-US)counter-reset
(en-US)
Заключение
В плане стилизации списки сравнительно легко освоить, как только вы освоите несколько связанных базовых принципов и специфичные свойства. В следующей статье мы перейдём к методам стилизации ссылок.
- Назад
- Обзор: Styling text
- Далее
В этом модуле
Списки являются частью повседневной жизни. Список дел определяет что сделано. Навигационные маршруты предлагают пошаговый список направлений. Для рецептов требуется список ингредиентов и список инструкций. Списки встречаются практически везде, так что легко понять, почему они также популярны в Интернете.
Когда мы хотим использовать список на сайте, HTML предлагает три разных типа на выбор: маркированный, нумерованный и список описаний. Какой тип списка выбрать для использования и применять ли список вообще — зависит от содержимого и семантически наиболее подходящего варианта для его отображения.
В дополнение к трём разным типам списков доступных в HTML есть несколько путей для стилизации этих списков через CSS. Например, мы можем выбрать, какой тип маркера указать для списка. Маркер может быть квадратным, круглым, числом, буквой или, возможно, отсутствовать. Кроме того, мы можем решить, как должен отображаться список — по вертикали или горизонтали. Все эти варианты играют важную роль при стилизации наших веб-страниц.
Маркированные списки
Маркированный или неупорядоченный список — это просто список связанных элементов, для которых порядок не имеет значения. Создание маркированного списка в HTML осуществляется с помощью блочного элемента списка <ul>. Каждый отдельный пункт в списке размечается с помощью элемента <li>.
По умолчанию, большинство браузеров добавляет вертикальный margin и левый padding к элементу <ul>, а перед каждым элементом <li> ставит однотонную точку. Эта точка называется маркером списка и может быть изменена с помощью CSS.
<ul>
<li>Оранжевый</li>
<li>Зелёный</li>
<li>Синий</li>
</ul>
Демонстрация маркированного списка
Нумерованные списки
Нумерованный или упорядоченный список элементов <ol> очень похож на маркированный список, отдельные пункты списка создаются таким же образом. Основным различием между списками является то, что для упорядоченного списка важен порядок представления пунктов.
Поскольку порядок имеет значение, вместо точки в качестве маркера по умолчанию в нумерованном списке применяются номера.
<ol>
<li>Пройдите по Абрикосовой улице</li>
<li>Сверните на Виноградную</li>
<li>Остановитесь на Тенистой улице</li>
</ol>
Демонстрация нумерованного списка
У нумерованных списков также есть доступные для них уникальные атрибуты, включая start и reversed.
Атрибут start
Атрибут start определяет номер, с которого должен начинаться нумерованный список. По умолчанию списки начинаются с 1, однако могут возникнуть ситуации, когда список должен начинаться с 30 или с другого числа. Когда мы используем атрибут start для элемента <ol>, то можем точно определить, с какого номера должен начинаться отсчёт нумерованного списка.
Атрибут start принимает только целые значения, хотя в нумерованных списках могут применяться разные системы нумерации, например, римские числа.
<ol start="30">
<li>Пройдите по Абрикосовой улице</li>
<li>Сверните на Виноградную</li>
<li>Остановитесь на Тенистой улице</li>
</ol>
Демонстрация атрибута start
Атрибут reversed
Атрибут reversed при добавлении к элементу <ol> позволяет списку отображаться в обратном порядке. Список из пяти пунктов пронумерованных от 1 до 5 может быть задан обратно и нумероваться от 5 до 1.
Атрибут reversed является логическим атрибутом и как таковой он не принимает никакого значения. Он может быть истиной, либо ложью. Ложь является значением по умолчанию, значение становится истинным, когда атрибут reversed появляется у элемента <ol>.
<ol reversed>
<li>Пройдите по Абрикосовой улице</li>
<li>Сверните на Виноградную</li>
<li>Остановитесь на Тенистой улице</li>
</ol>
Демонстрация атрибута reversed
Атрибут value
Атрибут value может применяться к отдельным элементам <li> в нумерованном списке, чтобы изменить его значение в списке. Номер любого пункта списка, который появляется ниже пункта списка с атрибутом value, будет пересчитан соответственно.
В качестве примера, если у второго пункта списка атрибут value задан как 9, номер этого пункта списка будет выводиться, как если бы он был девятым. Все последующие пункты списка будут пронумерованы от 9.
<ol>
<li>Пройдите по Абрикосовой улице</li>
<li value="9">Сверните на Виноградную</li>
<li>Остановитесь на Тенистой улице</li>
</ol>
Демонстрация атрибута value
Списки описания
Другой тип списка который вы видели в Интернете (но не так часто, как маркированные или нумерованные списки) — это список описаний. Такие списки применяются для обозначения нескольких терминов и их описаний, как в глоссарии, к примеру.
Создание списка описания в HTML происходит с помощью блочного элемента <dl>. Вместо использования элемента <li> для разметки пунктов списка, список описания требует два блочных элемента: <dt> для термина и <dd> для описания.
Список описания может содержать множество терминов и описаний, один за другим. Кроме того, такой список может содержать несколько терминов на одно описание, а также несколько описаний на термин. Один термин может иметь несколько значений и допускать несколько описаний. И наоборот, одно описание может подходить к нескольким терминам.
При добавлении списка описания элемент <dt> должен идти до элемента <dd>. Термин и описание, которое следует непосредственно за ним, связаны друг с другом. Таким образом, порядок этих элементов имеет важное значение.
По умолчанию, элемент <dl> включает вертикальные отступы, подобно элементам <ul> и <ol>. Кроме того, элемент <dd> включает в себя по умолчанию левый margin.
<dl>
<dt>учёба</dt>
<dd>Посвящение времени и внимания для получения знаний по преподаваемому предмету, особенно с помощью книг.</dd>
<dt>проект</dt>
<dd>Представленный план или чертёж, который показывает, как будет выглядеть и функционировать здание, одежда или другой предмет, прежде чем он будет построен или сделан.</dd>
<dd>Существующие цели, планы или намерения до их воплощения или реализации в материальном объекте.</dd>
<dt>бизнес</dt>
<dt>работа</dt>
<dd>Регулярные занятия человека, профессия или ремесло.</dd>
</dl>
Демонстрация списка описания
Вложенные списки
Особенность, которая делает списки очень мощными — это возможность вложения. Каждый список может быть помещён в другой список и они могут быть вложены неоднократно. Но возможность вкладывать списки бесконечно не даёт свободу делать это. Списки должны быть зарезервированы специально там, где они сохраняют наиболее семантическое значение.
Трюк с вложением списков заключается в том, что следует знать, где начинается и заканчивается каждый список и пункт списка. Говоря конкретно о маркированных и нумерованных списках, единственным элементом, который может находиться непосредственно внутри <ul> и <ol> является элемент <li>. Повторим — единственным элементом, который мы можем поставить как прямой потомок элементов <ul> и <ol>, является <li>.
Тем не менее, внутри элемента <li> может быть добавлен стандартный набор элементов, включая любые элементы <ul> или <ol>.
Чтобы вложить список — перед закрытием пункта списка начните новый список. После того, как вложенный список завершён и закрыт, закройте обрамляющий пункт списка и продолжите с первоначального списка.
<ol>
<li>Погулять с собакой</li>
<li>Сложить бельё</li>
<li>
Сходить в магазин и купить:
<ul>
<li>Молоко</li>
<li>Хлеб</li>
<li>Сыр</li>
</ul>
</li>
<li>Подстричь газон</li>
<li>Приготовить ужин</li>
</ol>
Демонстрация вложенных списков
Поскольку вложенные списки могут немного запутать и отобразить нежелательные стили, если они сделаны неправильно — давайте быстро их просмотрим. Элементы <ul> и <ol> могут содержать только элементы <li>. Элемент <li> может содержать любой обычный элемент, какой пожелаете. Однако элемент <li> должен быть прямым потомком либо элемента <ul>, либо <ol>.
Стоит также отметить, что когда списки вложены внутрь других списков, их маркеры будут меняться в зависимости от глубины вложения. В предыдущем примере маркированный список, вложенный в нумерованный, использует в качестве маркеров кружок вместо точки. Это изменение происходит потому, что маркированный список вложен на один уровень в нумерованном списке.
К счастью, мы можем управлять, как маркеры пунктов списка выглядят на любом уровне, что мы и рассмотрим дальше.
Стилизация пунктов списка
Маркированные и нумерованные списки используют маркеры пунктов списка по умолчанию. Для маркированных списков это, как правило, однотонные точки, в то время как для нумерованных списков, как правило, применяются числа. С помощью CSS стиль и положение этих маркеров можно настраивать.
Свойство list-style-type
Свойство list-style-type используется для установки содержимого маркера пунктов списка. Доступные значения находятся в диапазоне от квадратиков и десятичных чисел до армянской нумерации и стиль в CSS может быть добавлен к элементам <ul>, <ol> или <li>.
Любое значение свойства list-style-type может быть добавлено к маркированному или нумерованному списку. Имея это в виду, можно использовать нумерацию в маркированном списке и не числовые маркеры в нумерованном списке.
HTML
<ul>
<li>Оранжевый</li>
<li>Зелёный</li>
<li>Синий</li>
</ul>
CSS
ul {
list-style-type: square;
}
Демонстрация свойства list-style-type
Значения list-style-type
Как упоминалось ранее, свойство list-style-type содержит горстку разных значений. В следующей таблице представлены эти значения, а также соответствующее им содержимое.
Значение list-style-type | Содержимое |
---|---|
none | Нет пунктов списка |
disc | Однотонный кружок |
circle | Пустая окружность |
square | Однотонный квадрат |
decimal | Десятичные числа |
decimal-leading-zero | Десятичные числа начинающиеся с нуля |
lower-roman | Строчные римские числа |
upper-roman | Заглавные римские числа |
lower-greek | Строчные греческие числа |
lower-alpha / lower-latin | Строчные латинские буквы |
upper-alpha / upper-latin | Заглавные латинские буквы |
armenian | Традиционная армянская нумерация |
georgian | Традиционная грузинская нумерация |
Использование изображения в качестве маркера списка
Может наступить время, когда значений по умолчанию для свойства list-style-type не хватит и мы пожелаем задать свой собственный маркер списка. Чаще всего это делается путём размещения фонового изображения для каждого элемента <li>.
Процесс включает в себя удаление любого значения свойства list-style-type по умолчанию и добавление фонового изображения и полей для элемента <li>.
Подробнее — значение none свойства list-style-type удалит существующие маркеры списка. Свойство background задаст фоновое изображение вместе с его положением и повтором, если необходимо. А свойство padding обеспечит пространство слева от текста для фоновой картинки.
HTML
<ul>
<li>Оранжевый</li>
<li>Зелёный</li>
<li>Синий</li>
</ul>
CSS
li {
background: url("arrow.png") 0 50% no-repeat;
list-style-type: none;
padding-left: 12px;
}
Демонстрация изображения в качестве маркера
Свойство list-style-position
По умолчанию маркеры списка располагаются слева от содержимого в элементе <li>. Такой стиль позиционирования описывается как outside, это означает, что всё содержимое будет отображаться непосредственно справа, за пределами маркера списка. С помощью свойства list-style-position мы можем изменить значение по умолчанию outside на inside или inherit.
Значение outside размещает маркер списка слева от элемента <li> и не позволяют любому содержимому обтекать ниже этот маркер. Значение inside (которое редко используется и можно увидеть) размещает маркер списка в первой строке элемента <li> и позволяет содержимому обтекать маркер при необходимости.
HTML
<ul>
<li>Капкейки...</li>
<li>Обсыпка...</li>
</ul>
CSS
ul {
list-style-position: inside;
}
Демонстрация свойства list-style-position
Универсальное свойство list-style
Свойства списка, которые мы недавно обсудили, list-style-type и list-style-position, могут быть объединены в одно универсальное свойство list-style. В этом свойстве мы можем использовать одно или все значения свойств списка одновременно. Порядок этих значений должен быть: list-style-type, затем идёт list-style-position.
ul {
list-style: circle inside;
}
ol {
list-style: lower-roman;
}
Горизонтальное отображение списка
Иногда мы хотим отобразить списки горизонтально, а не вертикально. Возможно, мы желаем разделить список на несколько колонок, чтобы построить список навигации или разместить несколько пунктов списка в один ряд. В зависимости от содержания и желаемого внешнего вида есть несколько способов для отображения списков в виде одной строки, например, путём принятия значения свойства display для элементов <li> как inline или inline-block или через свойство float.
Отображение списка
Самый быстрый способ отобразить список на одной строке — это задать элементам <li> свойство display со значением inline или inline-block. Это поставит все элементы <li> в одну строку с одинаковым промежутком между каждым пунктом списка.
Если промежутки между элементами <li> доставляют проблемы, то они могут быть удалены с помощью тех же методов, что мы обсуждали в уроке 5, «Позиционирование содержимого».
Намного чаще мы будем использовать значение inline-block вместо значения inline. Значение inline-block позволяет легко добавлять вертикальные отступы и другое пространство к элементам <li>, в то время как значение inline нет.
При изменении значения свойства display на inline или inline-block, маркер списка, будь то точка, число или другое, удаляется.
HTML
<ul>
<li>Оранжевый</li>
<li>Зелёный</li>
<li>Синий</li>
</ul>
CSS
li {
display: inline-block;
margin: 0 10px;
}
Демонстрация списка с inline-block
Списки с float
Изменение значение свойства display на inline или inline-block быстро, однако это удаляет маркеры списка. Если они необходимы, то добавление float к каждому элементу <li> является лучшим вариантом, чем изменение свойства display.
Установка для всех элементов <li> свойства float как left выровняет горизонтально все элементы <li> непосредственно рядом друг с другом без каких-либо промежутков между ними. Когда мы используем float для <li>, маркер списка отображается по умолчанию и будет располагаться поверх элемента <li> рядом с ним. Чтобы предотвратить отображение маркера списка поверх других элементов <li>, должны быть добавлены горизонтальный margin или padding.
HTML
<ul>
<li>Оранжевый</li>
<li>Зелёный</li>
<li>Синий</li>
</ul>
CSS
li {
float: left;
margin: 0 20px;
}
Демонстрация списка с float
Как и с любыми обтекаемыми элементами это нарушает поток страницы. Мы не должны забывать очищать float и возвращать страницу в обычный поток — наиболее распространённым методом через clearfix.
Пример навигационного списка
Мы часто разрабатываем и находим навигационные меню, в которых применяются неупорядоченные списки. Эти списки, как правило, располагаются горизонтально с помощью одного из двух методов, упомянутых ранее. Вот, к примеру, горизонтальное навигационное меню, размеченное с помощью неупорядоченного списка, в котором элементы <li> отображаются как inline-block.
HTML
<nav class="navigation">
<ul>
<li><a href="#">Профиль</a></li><!--
--><li><a href="#">Настройки</a></li><!--
--><li><a href="#">Уведомления</a></li><!--
--><li><a href="#">Выход</a></li>
</ul>
</nav>
CSS
.navigation ul {
font: bold 11px "Helvetica Neue", Helvetica, Arial, sans-serif;
margin: 0;
padding: 0;
text-transform: uppercase;
}
.navigation li {
display: inline-block;
}
.navigation a {
background: #395870;
background: linear-gradient(#49708f, #293f50);
border-right: 1px solid rgba(0, 0, 0, .3);
color: #fff;
padding: 12px 20px;
text-decoration: none;
}
.navigation a:hover {
background: #314b60;
box-shadow: inset 0 0 10px 1px rgba(0, 0, 0, .3);
}
.navigation li:first-child a {
border-radius: 4px 0 0 4px;
}
.navigation li:last-child a {
border-right: 0;
border-radius: 0 4px 4px 0;
}
Демонстрация навигационного списка
На практике
Теперь, когда мы знаем, как создавать списки в HTML и CSS, давайте оглянемся на наш сайт Styles Conference и посмотрим, где мы могли бы использовать списки.
-
Сейчас навигационные меню в элементах <header> и <footer> на наших страницах состоят из нескольких ссылок. Эти элементы могут быть лучше организованы в виде неупорядоченного списка.
Использование неупорядоченного списка (через элемент <ul>) и пунктов списка (через элемент <li>) задаст структуру наших навигационных меню. Эти новые элементы, однако, будут отображать наши навигационные меню вертикально.
Мы собираемся изменить значение display для наших элементов <li> на inline-block, чтобы все они выравнивались в строке по горизонтали. Когда мы это сделаем, то также должны учесть пустое пространство слева между каждым элементом <li>. Вспоминая урок 5, «Позиционирование содержимого», мы знаем что открытие комментария HTML в конце элемента <li> и закрытие комментария в начале элемента <li> удалит это пространство.
Помня об этом, разметка для навигационного меню внутри нашего элемента <header> будет выглядеть так:
<nav class="nav primary-nav"> <ul> <li><a href="index.html">Главная</a></li><!-- --><li><a href="speakers.html">Спикеры</a></li><!-- --><li><a href="schedule.html">Расписание</a></li><!-- --><li><a href="venue.html">Место проведения</a></li><!-- --><li><a href="register.html">Регистрация</a></li> </ul> </nav>
В том же духе, разметка для навигационного меню внутри нашего элемента <footer> будет выглядеть так:
<nav class="nav"> <ul> <li><a href="index.html">Главная</a></li><!-- --><li><a href="speakers.html">Спикеры</a></li><!-- --><li><a href="schedule.html">Расписание</a></li><!-- --><li><a href="venue.html">Место проведения</a></li><!-- --><li><a href="register.html">Регистрация</a></li> </ul> </nav>
Не забывайте внести эти изменения во все наши HTML-файлы.
-
С нашим маркированным списком давайте удостоверимся, что пункты списка выровнены по горизонтали и слегка очистим их стили. Мы будем использовать существующий класс nav для указания наших новых стилей.
Начнём с того, чтобы все элементы <li> внутри какого-либо элемента со значением nav атрибута class отображались как inline-block, чтобы включить горизонтальные margin и чтобы можно было выравнивать элементы по вертикали.
Кроме того, мы воспользуемся псевдоклассом :last-child чтобы определить последний элемент <li> и сбросить его правый margin в 0. Это гарантирует, что любое горизонтальное пространство между элементами <li> и краем его родителя исчезнет.
В наш файл main.css, ниже стилей навигации добавим следующий CSS:
.nav li { display: inline-block; margin: 0 10px; vertical-align: top; } .nav li:last-child { margin-right: 0; }
Вы наверное удивлены, почему наш список не включает каких-либо маркеров списка или стилей по умолчанию. Эти стили были удалены сбросом вверху нашего стиля. Если мы посмотрим на сброс, то увидим что элементы <ol>, <ul> и <li> включают в себя нулевые margin и padding, а для <ol> и <ul> значение list-style задано как none.
-
Меню навигации не единственное место, где мы будем использовать списки. Также применим их на некоторых наших внутренних страницах, включая страницу Спикеры. Давайте добавим несколько спикеров в нашу конференцию.
В файле speakers.html, чуть ниже раздела со вступлением, создадим новый раздел, где мы представим всех наших спикеров. Повторно задействуя некоторые существующие стили мы воспользуемся элементом <section> с классом row, чтобы обернуть всех наших спикеров и применить белый фон и поля за ними. Внутри элемента <section> мы добавим элемент <div> с классом grid чтобы выровнять по центру страницы наших спикеров и это позволит нам также включить несколько колонок.
Пока наш HTML ниже раздела со вступлением выглядит следующим образом:
<section class="row"> <div class="grid"> </div> </section>
-
Внутри grid каждый спикер будет размечен с собственным элементом <section>, который включает две колонки. Первая колонка отмеряет две трети элемента <section> и будет размечена с помощью элемент <div>. Вторая колонка отмеряет оставшуюся треть элемента <section> и будет размечена с помощью элемента <aside>, а его содержимое вторично по отношению к спикеру и его речи.
Используя наши существующие классы col-2-3 и col-1-3, схема для раздела со спикерами будет выглядеть так:
<section id="shay-howe"> <div class="col-2-3"> ... </div><!-- --><aside class="col-1-3"> ... </aside> </section>
Здесь есть несколько пунктов, на которые стоит обратить внимание. Первое, каждый элемент <section> для каждого спикера включает в себя атрибут id с именем спикера в качестве значения. Позже, когда мы создадим расписание для нашей конференции, эти атрибуты id послужат якорями, которые позволят нам связать расписание с профилем спикера.
Кроме того, закрывающий тег элемента <div> сопровождается открытием комментария в HTML и открывающим тегом элемента <aside>, которому предшествует закрытие комментария. Поскольку классы для колонок будут отображать эти элементы как строчно-блочные, мы удаляем пустое пространство, которое появится между ними.
-
Внутри колонки 2/3 размеченный элементом <div> мы будем использовать несколько заголовков и абзацев, чтобы показать имя спикера, краткую биографию, название доклада и его анонс.
Учитывая это содержимое, раздел спикера будет выглядеть следующим образом:
<section id="shay-howe"> <div class="col-2-3"> <h2>Шэй Хоу</h2> <h5>Лучше меньше, да лучше: как ограничения культивируют рост</h5> <p>Установив ограничения, мы заставляем себя...</p> <h5>О спикере</h5> <p>Как дизайнер и фронтенд-разработчик, Шэй...</p> </div><!-- --><aside class="col-1-3"> ... </aside> </section>
-
В колонку 1/3 размеченной элементом <aside> мы собираемся добавить элемент <div> с классом speaker-info. Мы будем использовать элемент <div>, потому что добавим стили к этому элементу в ближайшее время.
Прежде чем перейти к каким-либо стилям, давайте добавим неупорядоченный список в элемент <div>, который включает в себя пункты списка, имеющие отношение к спикеру.
Теперь наш HTML для спикера будет выглядеть следующим образом:
<section id="shay-howe"> <div class="col-2-3"> <h2>Шэй Хоу</h2> <h5>Лучше меньше, да лучше: как ограничения культивируют рост</h5> <p>Установив ограничения, мы заставляем себя...</p> <h5>О спикере</h5> <p>Как дизайнер и фронтенд-разработчик, Шэй...</p> </div><!-- --><aside class="col-1-3"> <div class="speaker-info"> <ul> <li><a href="https://twitter.com/shayhowe">@shayhowe</a></li> <li><a href="http://learn.shayhowe.com/">learn.shayhowe.com</a></li> </ul> </div> </aside> </section>
-
Когда элемент <div> с классом speaker-info готов, мы можем добавить к нему некоторые стили.
Начнём с добавления нового раздела в наш файл main.css для стилей страницы Спикеры. В нём добавим однопиксельную сплошную рамку с радиусом 5 пикселей вокруг любого элемента с классом speaker-info.
Далее добавим верхний margin 88 пикселей, чтобы поместить элемент на той же вертикальной строке, что и первый абзац докладчика, а также добавим 22 пикселя по вертикали для padding, чтобы обеспечить место для вложенного маркированного списка.
Наконец, выровняем по центру весь текст внутри элемента.
В целом, наш CSS для класса speaker-info выглядит следующим образом:
/* ======================================== Спикеры ======================================== */ .speaker-info { border: 1px solid #dfe2e5; border-radius: 5px; margin-top: 88px; padding: 22px 0; text-align: center; }
Остановимся на минутку и разберём, почему мы используем здесь элемент <div> и соответствующие стили.
Мы размещаем элемент <div> внутри элемента <aside> со значением col-1-3 у атрибута class, потому что хотим чтобы padding, унаследованный от класса col-1-3, был за пределами border у элемента <div>. Вскоре мы включим изображение внутрь элемента <div> наряду со списком, поэтому мы создали элемент <div>, а не применили эти стили непосредственно к элементу <ul>.
По мере добавления больше и больше спикеров на страницу мы хотим убедиться, что они остаются на равном расстоянии друг от друга по вертикали. Чтобы сделать это, мы создадим набор правил для класса speaker, который включает в себя нижний margin 44 пикселя, таким образом:
.speaker { margin-bottom: 44px; }
Мы можем применить данный класс к <section> для каждого спикера, при условии, что это не последний спикер. Мы опускаем этот класс для последнего спикера, так как не хотим создать ненужные отступы перед нашим элементом <footer>. С более чем одним спикером наша разметка будет выглядеть так:
<section class="row"> <div class="grid"> <section class="speaker" id="chris-mills"> <div class="col-2-3"> ... </div><!-- --><aside class="col-1-3"> ... </aside> </section> <section id="shay-howe"> <div class="col-2-3"> ... </div><!-- --><aside class="col-1-3"> ... </aside> </section> </div> </section>
Обратите внимание на первый элемент <section> со спикером Крис Миллс. Раздел включает в себя атрибут class со значением speaker, который вертикально отделяет его от моего раздела, Шэя Хоу. Последний элемент <section> снова мой и он не включает в себя класс speaker чтобы сохранить его на нужном расстоянии от элемента <footer>.
Наше меню навигации в настоящее время завершено и страница Спикеры начала принимать свою форму.
Рис. 8.01. Наша страница Спикеры после обновления навигационных меню и добавления колонки
Демонстрация и исходный код
Ниже вы можете просмотреть сайт Styles Conference в его нынешнем состоянии, а также скачать исходный код сайта на данный момент.
Просмотр сайта Styles Conference или Скачать исходный код
Резюме
Списки довольно часто применяются в HTML, нередко в местах, которые не явны или очевидны. Главное, насколько это возможно, использовать их семантически и там, где они подходят лучше всего.
Подводя итоги, в этом уроке мы рассмотрели следующее:
- как создать маркированный, нумерованный список и список описаний;
- как правильно вкладывать одни списки внутрь других;
- как изменить стиль маркера списка и его положение;
- как использовать фоновое изображение вместо маркера списка;
- как горизонтально отобразить список через display и float.
Теперь, когда мы знаем, как добавить списки на наши страницы, давайте также включим медиа-контент. В следующей главе мы погрузимся во встраивание медиа, таких как изображения, аудио и видео.
Ресурсы и ссылки
- Styling HTML Lists with CSS via Smashing Magazine
- List Style Type via Mozilla Developer Network
- CSS Design: Taming Lists via A List Apart
См. также
Последнее изменение: 11.08.2018
Свойства списков
С помощью CSS можно создать маркированные и нумерованные списки, а также использовать
в качестве маркера подходящее изображение.
В табл. 1 перечислены свойства элементов, предназначенных для создания и изменения
списков.
Свойство | Значение | Описание | Пример |
---|---|---|---|
list-style-type | disc circle square decimal lower-roman upper-roman lower-alpha upper-alpha none |
Вид маркера. Первые три используются для создания маркированного списка, а остальные — для нумерованного. |
LI {list-style-type: circle} LI {list-style-type: upper-alpha} |
list-style-image | none URL |
Устанавливает символом маркера любую картинку. | LI {list-style-image: url(check.gif)} |
list-style-position | outside inside |
Выбор положения маркера относительно блока строк текста. | LI {list-style-position: inside} |
list-style | Универсальное свойство, включает одновременно все вышеперечисленные свойства. |
Поскольку тег <li> наследует стилевые свойства
тега <ol> или <ul>,
который выступает в качестве его родителя, то можно устанавливать стиль как
для селектора UL, так и для селектора LI.
Так, в примере 1 используется селектор UL, для
него и задаются стилевые параметры.
Пример 1. Создание маркированного списка
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Списки</title>
<style type="text/css">
UL {
list-style-type: square; /* Маркеры в виде квадрата */
list-style-position: outside; /* Маркеры размещаются за пределами текстового блока */
color: navy; /* Цвет текста списка */
}
</style>
</head>
<body>
<ul>
<li>Заголовок должен быть короче трех строк.</li>
<li>При названии разделов используйте уже устоявшиеся термины, такие
как гостевая книга, чат, ссылка, главная страница и другие.</li>
<li>Перед использованием специального термина или слова, решите,
будет ли оно понятно читателю.</li>
</ul>
</body>
</html>
Результат данного примера показан на рис. 1. Используются квадратные маркеры и их внешнее размещение относительно
текста.
Рис. 1. Вид списка, измененого с помощью стилей
Чтобы установить свое собственное изображение в качестве маркера применяется
свойство list-style-image, как показано в примере 2.
Пример 2. Использование изображений в качестве маркера
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Списки</title>
<style type="text/css">
LI {
list-style-image: url(images/check.png); /* Путь к файлу с маркером */
}
</style>
</head>
<body>
<ul>
<li>Заголовок должен быть короче трех строк.</li>
<li>При названии разделов используйте уже устоявшиеся термины, такие
как гостевая книга, чат, ссылка, главная страница и другие.</li>
<li>Перед использованием специального термина или слова, решите,
будет ли оно понятно читателю.</li>
</ul>
</body>
</html>
Результат данного примера показан на рис. 2. В качестве маркеров используется маленькая
картинка.
Рис. 2. Изображения в качестве маркеров
Некоторые примеры создания различных списков приведен в табл. 2.
Код HTML | Пример |
---|---|
<li style=»list-style: disc»> | Что следует учитывать при тестировании сайта:
|
<li style=»list-style: circle»> | Что следует учитывать при тестировании сайта:
|
<li style=»list-style: square»> | Что следует учитывать при тестировании сайта:
|
<li style=»list-style: decimal»> |
Нумерованный список с арабскими цифрами:
|
<li style=»list-style: lower-roman»> |
Нумерованный список со строчными римскими цифрами:
|
<li style=»list-style: upper-roman»> |
Нумерованный список с заглавными римскими цифрами:
|
<li style=»list-style: lower-alpha»> |
Нумерованный список со строчными буквами латинского алфавита:
|
<li style=»list-style: upper-alpha»> |
Нумерованный список с заглавными буквами латинского алфавита:
|
HTML Lists Recap
There are two main types of lists in HTML — Ordered and Unordered.
In Ordered lists (<ol></ol>
), the order of the list items is important. The items may appear in order by number, roman numeral, alpha numeral, or another type of marker. The default marker for ordered lists is a number (or decimal
):
In Unordered lists (<ul></ul>
), the order of the list items does not matter. The items appear in bullet format. The default marker for unordered lists is a round bullet point or disc
.
Each list item within an ordered or unordered list is created with the <li></li>
tag.
List-Specific Styles
There are three common properties specific to styling lists: list-style-type
, list-style-position
, and list-style-image
. There is also a shorthand property which includes all three.
list-style-type
The markers (or bullet points) that appear in ordered and unordered lists can be styled in a variety of ways. The CSS property for styling the marker type is list-style-type
. The default list-style-type
value for an ordered list is decimal
, whereas the default for an unordered list is disc
.
Ordered list example:
/* css */
ol {
list-style-type: upper-roman;
}
Unordered list example:
/* css */
ul {
list-style-type: square;
}
No marker example:
/* css */
ul {
list-style-type: none;
}
Accepted values for the list-style-type
property include:
Unordered:
- disc (default)
- circle
- square
Ordered:
- decimal (default)
- decimal-leading-zero
- lower-roman
- upper-roman
- lower-greek
- lower-latin
- upper-latin
- armenian
- georgian
- lower-alpha
- upper-alpha
Other:
- none
Note: all the property values listed above can be used for styling both ordered and unordered lists (ex: an ordered list with square
list markers).
list-style-position
list-style-position
controls whether the list marker appears inside or outside of each list item element (<li></li>
). The property accepts two values, outside
(default) or inside
.
Position the marker outside
of the list item element, and all text lines and sub-lines of each list item will align vertically:
/* css */
ul {
list-style-position: outside; /* default */
}
Position the marker inside
, and the first text line of each list item will be indented to make room for the marker. Any sub-lines of the same list item will align with the marker rather than the first text line:
/* css */
ul {
list-style-position: inside;
}
list-style-image
The list-style-image
property accepts an image url in place of the list marker. The default value for this property is none
.
/* css */
ul {
list-style-image: url(https://url-to-image);
}
list-style
Shorthand
list-style
is a shorthand property for the three style properties listed above. The order of values list-style
accepts is list-style-type
, list-style-position
, and list-style-image
. If any value is omitted, the default value for that property will be used.
Example:
/* css */
ul {
list-style: circle inside none;
}
More List-Specific Styling
Ordered list tags also accept attributes that control the flow, count, or specific marker values of its list items. These include the start
, reversed
, and value
attributes. See the MDN resources listed below for further details.
General Styling
List content can be styled just like other p
or div
elements. color
, font-family
, margin
, padding
, or border
are just a few examples of properties that can be added to either the ul
, ol
, or li
elements.
Note that any styles added to the ul
or ol
element will affect the entire list. Styles added directly to the li
elements will affect the individual list items. In the example below, the border and background-color properties are styled differently between the list and list item elements:
/* css */
ul {
list-style-type: circle;
border: 2px solid blue;
background-color: lightblue;
}
li {
margin: 5px;
background-color: lightyellow;
}
List Spacing
You may notice extra spacing in front of the list items when list-style-type
is set to none
. Setting padding
to 0
(or whatever spacing is preferred) on the list element will override this default padding.
/* css */
ul {
list-style: none;
padding: 0;
}
li {
padding: 5px 10px;
background-color: #EEEEEE;
border: 1px solid #DDDDDD;
}
Sources:
The links below were referenced in compiling information found in this article. Please visit them for further details about this topic.
More Information:
MDN — Styling Lists
W3Schools — CSS Lists
CSS Tricks — list-style
Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started
HTML Lists Recap
There are two main types of lists in HTML — Ordered and Unordered.
In Ordered lists (<ol></ol>
), the order of the list items is important. The items may appear in order by number, roman numeral, alpha numeral, or another type of marker. The default marker for ordered lists is a number (or decimal
):
In Unordered lists (<ul></ul>
), the order of the list items does not matter. The items appear in bullet format. The default marker for unordered lists is a round bullet point or disc
.
Each list item within an ordered or unordered list is created with the <li></li>
tag.
List-Specific Styles
There are three common properties specific to styling lists: list-style-type
, list-style-position
, and list-style-image
. There is also a shorthand property which includes all three.
list-style-type
The markers (or bullet points) that appear in ordered and unordered lists can be styled in a variety of ways. The CSS property for styling the marker type is list-style-type
. The default list-style-type
value for an ordered list is decimal
, whereas the default for an unordered list is disc
.
Ordered list example:
/* css */
ol {
list-style-type: upper-roman;
}
Unordered list example:
/* css */
ul {
list-style-type: square;
}
No marker example:
/* css */
ul {
list-style-type: none;
}
Accepted values for the list-style-type
property include:
Unordered:
- disc (default)
- circle
- square
Ordered:
- decimal (default)
- decimal-leading-zero
- lower-roman
- upper-roman
- lower-greek
- lower-latin
- upper-latin
- armenian
- georgian
- lower-alpha
- upper-alpha
Other:
- none
Note: all the property values listed above can be used for styling both ordered and unordered lists (ex: an ordered list with square
list markers).
list-style-position
list-style-position
controls whether the list marker appears inside or outside of each list item element (<li></li>
). The property accepts two values, outside
(default) or inside
.
Position the marker outside
of the list item element, and all text lines and sub-lines of each list item will align vertically:
/* css */
ul {
list-style-position: outside; /* default */
}
Position the marker inside
, and the first text line of each list item will be indented to make room for the marker. Any sub-lines of the same list item will align with the marker rather than the first text line:
/* css */
ul {
list-style-position: inside;
}
list-style-image
The list-style-image
property accepts an image url in place of the list marker. The default value for this property is none
.
/* css */
ul {
list-style-image: url(https://url-to-image);
}
list-style
Shorthand
list-style
is a shorthand property for the three style properties listed above. The order of values list-style
accepts is list-style-type
, list-style-position
, and list-style-image
. If any value is omitted, the default value for that property will be used.
Example:
/* css */
ul {
list-style: circle inside none;
}
More List-Specific Styling
Ordered list tags also accept attributes that control the flow, count, or specific marker values of its list items. These include the start
, reversed
, and value
attributes. See the MDN resources listed below for further details.
General Styling
List content can be styled just like other p
or div
elements. color
, font-family
, margin
, padding
, or border
are just a few examples of properties that can be added to either the ul
, ol
, or li
elements.
Note that any styles added to the ul
or ol
element will affect the entire list. Styles added directly to the li
elements will affect the individual list items. In the example below, the border and background-color properties are styled differently between the list and list item elements:
/* css */
ul {
list-style-type: circle;
border: 2px solid blue;
background-color: lightblue;
}
li {
margin: 5px;
background-color: lightyellow;
}
List Spacing
You may notice extra spacing in front of the list items when list-style-type
is set to none
. Setting padding
to 0
(or whatever spacing is preferred) on the list element will override this default padding.
/* css */
ul {
list-style: none;
padding: 0;
}
li {
padding: 5px 10px;
background-color: #EEEEEE;
border: 1px solid #DDDDDD;
}
Sources:
The links below were referenced in compiling information found in this article. Please visit them for further details about this topic.
More Information:
MDN — Styling Lists
W3Schools — CSS Lists
CSS Tricks — list-style
Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started
Хочешь знать больше про веб?
Подпишись на наш телеграм-канал TechRocks WEB-разработка?
Подписаться
×
Перевод статьи
«A complete guide about lists in HTML and CSS».
Что такое списки
Список это способ представления набора
данных или информации. Таким образом
этот набор данных становится более
понятным, чем при любой другой форме
изложения. Например, список покупок
выглядит куда понятнее, если имеет вид
именно списка, а не простого абзаца, где
наименования идут просто через запятую.
Списки в HTML
Если вы хотите представлять на своих
веб-страницах какие-то данные, являющиеся
наборами чего-либо, список является
прекрасным вариантом оформления.
Благодаря спискам пользователи легче
воспринимают информацию.
Виды списков
В HTML списки бывают трех видов:
- Упорядоченные списки.
- Неупорядоченные списки.
- Списки определений.
Что такое упорядоченный
список?
Упорядоченный список это набор
элементов, представленных в определенном
порядке. Форма упорядоченного списка
лучше всего подходит для представления
наборов данных, где порядок элементов
имеет значение.
Примерами могут послужить кулинарные
рецепты, где действия следует выполнять
в определенном порядке, или списки
инструкций простой программы.
Подобные списки делают упорядоченными,
потому что без нужной последовательности
изложения эта информация теряет свой
смысл. Упорядоченные списки также
называют нумерованными.
Для создания упорядоченных списков
используется тег <ol> (ordered
list – «упорядоченный список»), а для
каждого из его элементов – тег <li>
(list – «список»).
HTML-код:
[html]<ol>
<li>Налейте воду в кастрюлю.</li>
<li>Добавьте сахар, чайные листья и специи.</li>
<li>Доведите до кипения и подержите на медленном огне около минуты.</li>
<li>Добавьте молоко.</li>
<li>Доведите до кипения и подержите на медленном огне 3-5 минут.</li>
<li>Процедите чай и перелейте его в чайник.</li>
</ol>
[/html]
Результат:
- Налейте воду в кастрюлю.
- Добавьте сахар, чайные листья и специи.
- Доведите до кипения и подержите на медленном огне около минуты.
- Добавьте молоко.
- Доведите до кипения и подержите на медленном огне 3-5 минут.
- Процедите чай и перелейте его в чайник.
Значения по умолчанию:
По умолчанию пункты списка обозначаются
арабскими цифрами.
Это можно изменить, используя разные
значения CSS-свойства list-style-type.
list-style-type: upper-alpha
See the Pen
ordered-list-upper-alpha by Amrish Kushwaha (@isamrish)
on CodePen.
list-style-type: upper-roman
See the Pen
ordered-list-upper-roman by Amrish Kushwaha (@isamrish)
on CodePen.
list-style-type: lower-alpha
See the Pen
ordered-list-lower-alpha by Amrish Kushwaha (@isamrish)
on CodePen.
list-style-type: lower-roman
See the Pen
ordered-list-lower-roman by Amrish Kushwaha (@isamrish)
on CodePen.
Это самые часто
используемые значения свойства
list-style-type. Но есть множество других
значений, которые мы рассмотрим дальше.
Что такое неупорядоченный
список?
Неупорядоченный список
это список с элементами, которые могут
быть представлены в произвольном
порядке. Такие списки также называют
маркированными.
Примеры таких списков
– списки покупок, списки запланированных
дел.
Для создания упорядоченных
списков используется тег <ul>
(unordered list), а для каждого из его
элементов – тег <li> (как и в
упорядоченном списке).
HTML-код:
[html]<ul>
<li>одежда</li>
<li>книги</li>
<li>ручки</li>
<li>ноутбук</li>
<li>сумка</li>
</ul>
[/html]
Результат:
- одежда
- книги
- ручки
- ноутбук
- сумка
Значения по умолчанию:
По умолчанию маркеры
элементов представлены в виде кружочков.
Это можно изменить, используя все то же
CSS-свойство list-style-type.
list-style-type: circle
See the Pen
unordered-list-circle by Amrish Kushwaha (@isamrish)
on CodePen.
list-style-type: square
See the Pen
unordered-list-square by Amrish Kushwaha (@isamrish)
on CodePen.
list-style-type: disc
See the Pen
unordered-list-disc by Amrish Kushwaha (@isamrish)
on CodePen.
Дальше мы разберем и
другие варианты стилей.
Что такое список определений?
Список определений
отличается тем, что каждый его пункт
состоит из двух элементов. Первый из
них – термин, а второй – его определение.
Вы можете создать
список определений при помощи тега <dl>
(definition list – «список определений»).
В пунктах списка термины (term) создаются
при помощи тега <dt>, а описание
(description) – при помощи тега <dd>.
Например:
See the Pen
definition-list by Amrish Kushwaha (@isamrish)
on CodePen.
Что такое вложенные списки?
Иногда бывают ситуации,
когда вам нужно представить информацию
в виде списка, причем его пункты сами
могут быть отдельными списками. Такая
структура называется вложенным списком.
Например:
See the Pen
nested-list by Amrish Kushwaha (@isamrish)
on CodePen.
Стиль списка
Для придания стилей
списку используются три CSS-свойства.
list-style-type
Как вы уже знаете, это
свойство используется для стилизации
маркеров списка (как упорядоченного,
так и неупорядоченного).
Это свойство может
принимать несколько значений:
- disc (круг)
- square (квадрат)
- circle (окружность)
- decimal (арабские цифры)
- lower-alpha (строчные
латинские буквы, =lower-latin) - lower-roman (римские цифры
в нижнем регистре) - lower-latin (строчные
латинские буквы, =lower-alpha) - lower-greek (строчные
греческие буквы) - upper-alpha (заглавные
латинские буквы, =upper-latin) - upper-roman (римские цифры
в верхнем регистре) - upper-latin (заглавные
латинские буквы, =upper-alpha)
С полным списком
возможных значений свойства list-style-type
можно ознакомиться здесь.
list-style-image
Это свойство используется,
чтобы в качестве маркера списка установить
изображение. Свойство может принимать
два значения: url изображения или
none.
Например:
See the Pen
list-style-image by Amrish Kushwaha (@isamrish)
on CodePen.
Поскольку значение
этого свойства наследуется, для
возвращения значения по умолчанию
используется значение none.
list-style-position
Это свойство служит
для определения положения маркера
относительно элементов списка. Свойство
list-style-position может принимать два
значения: inside (внутри) и outside
(снаружи).
Пример применения
значения inside
See the Pen
list-style-position-inside by Amrish Kushwaha (@isamrish)
on CodePen.
Пример применения
значения outside
See the Pen
list-style-position-outside by Amrish Kushwaha (@isamrish)
on CodePen.
А теперь давайте поиграем с
цветами списка
Расцвеченный маркированный список
Вариант 1: элементы списка и маркеры
имеют один цвет.
See the Pen
same-color-unordered-list by Amrish Kushwaha (@isamrish)
on CodePen.
Вариант 2: элементы списка и маркеры
имеют разные цвета.
See the Pen
different-color-unordered-list by Amrish Kushwaha (@isamrish)
on CodePen.
Расцвеченный нумерованный список
Вариант 1: элементы списка и их номера
имеют один цвет.
See the Pen
colored-numbered-list by Amrish Kushwaha (@isamrish)
on CodePen.
Вариант 2: элементы списка и их номера
имеют разные цвета.
See the Pen
different-color-numbered-list by Amrish Kushwaha (@isamrish)
on CodePen.
Надеемся, статья вам понравилась. Если знаете о списках еще что-то интересное, добавляйте в комментарии!
This tutorial will show how to use CSS grid layout for easy custom list styling in addition to:
- Data attributes as the content of pseudo elements
- CSS counters for styling ordered lists
- CSS custom variables for per-list item styling
- Responsive multi-column lists
Update: The
::marker
pseudo selector is now well supported in modern browsers. While this tutorial includes handy CSS tips for the items listed above, you may want to jump to the::marker
solution
List HTML
First we’ll setup our HTML, with one ul
and one li
. I’ve included a longer bullet to assist in checking alignment, spacing, and line-heihgt.
<ul role="list">
<li>Unordered list item</li>
<li>Cake ice cream sweet sesame snaps dragée cupcake wafer cookie</li>
<li>Unordered list item</li>
</ul><ol role="list">
<li>Ordered list item</li>
<li>Cake ice cream sweet sesame snaps dragée cupcake wafer cookie</li>
<li>Ordered list item</li>
</ol>
Note the use of role="list"
. At first, it may seem extra, but we are going to remove the inherent list style with CSS. While CSS doesn’t often affect the semantic value of elements, list-style: none
can remove list semantics for some screen readers. The easiest fix is to define the role
attribute to reinstate those semantics. You can learn more from this article from Scott O’Hara.
Base List CSS
First we add a reset of list styles in addition to defining them as a grid with a gap.
ol,
ul {
margin: 0;
padding: 0;
list-style: none;
display: grid;
gap: 1rem;
}
The gap
benefit is adding space between li
, taking the place of an older method such as li + li { margin-top: ... }
.
Next, we’ll prepare the list items:
li {
display: grid;
grid-template-columns: 0 1fr;
gap: 1.75em;
align-items: start;
font-size: 1.5rem;
line-height: 1.25;
}
We’ve also set list items up to use grid. And we’ve upgraded an older «hack» of using padding-left
to leave space for an absolute positioned pseduo element with a combo of a 0
width first column and gap
. We’ll see how that works in a moment. Then we use align-items: start
instead of the default of stretch
, and apply some type styling.
UL: Data attributes for emoji bullets
Now, this may not exactly be a scalable solution, but for fun we’re going to add a custom data attribute that will define an emoji to use as the bullet for each list item.
First, let’s update the ul
HTML:
<ul role="list">
<li data-icon="🦄">Unordered list item</li>
<li data-icon="🌈">
Cake ice cream sweet sesame snaps dragée cupcake wafer cookie
</li>
<li data-icon="😎">Unordered list item</li>
</ul>
And to apply the emojis as bullets, we use a pretty magical technique where data attributes can be used as the value of the content
property for pseudo elements:
ul li::before {
content: attr(data-icon);
/* Make slightly larger than the li font-size
but smaller than the li gap */
font-size: 1.25em;
}
Here’s the result, with the ::before
element inspected to help illustrate how the grid is working:
The emoji still is allowed to take up width to be visible, but effectively sits in the gap. You can experiment with setting the first li
grid column to auto
which will cause gap to fully be applied between the emoji column and the list text column.
OL: CSS counters and CSS custom variables
CSS counters have been a viable solution since IE8, but we’re going to add an extra flourish of using CSS custom variables to change the background color of each number as well.
We’ll apply the CSS counter styles first, naming our counter orderedlist
:
ol {
counter-reset: orderedlist;
}ol li::before {
counter-increment: orderedlist;
content: counter(orderedlist);
}
This achieves the following, which doesn’t look much different than the default ol
styling:
Next, we can apply some base styling to the counter numbers:
/* Add to li::before rule */
font-family: "Indie Flower";
font-size: 1.25em;
line-height: 0.75;
width: 1.5rem;
padding-top: 0.25rem;
text-align: center;
color: #fff;
background-color: purple;
border-radius: 0.25em;
First, we apply a Google font and bump up the font-size
. The line-height
is half of the applied line-height
of the li
(at least that’s what worked for this font, it may be a bit of a magic number). It aligns the number where we would like in relation to the main li
text content.
Then, we need to specify an explicit width. If not, the background will not appear even though the text will.
Padding is added to fix the alignment of the text against the background.
Now we have this:
That’s certainly feeling more custom, but we’ll push it a bit more by swapping the background-color
to a CSS custom variable, like so:
ol {
--li-bg: purple;
}ol li::before {
background-color: var(--li-bg);
}
It will appear the same until we add inline styles to the second and third li
to update the variable value:
<ol role="list">
<li>Ordered list item</li>
<li style="--li-bg: darkcyan">
Cake ice cream sweet sesame snaps dragée cupcake wafer cookie
</li>
<li style="--li-bg: navy">Ordered list item</li>
</ol>
And here’s the final ul
and ol
all put together:
By Stephanie Eckles (@5t3ph)
Upgrade your algos: Multi-column lists
Our example only had 3 short list items, but don’t forget we applied grid to the base ol
and ul
.
Whereas in a previous life I have done fun things with modulus in PHP to split up lists and apply extra classes to achieve evenly divided multi-column lists.
With CSS grid, you can now apply it in three lines with inherent responsiveness, equal columns, and respect to content line length:
ol,
ul {
display: grid;
/* adjust the `min` value to your context */
grid-template-columns: repeat(auto-fill, minmax(22ch, 1fr));
gap: 1rem;
}
Applying to our existing example (be sure to remove the max-width
on the li
first) yields:
You can toggle this view by updating the $multicolumn
variable in Codepen to true
.
Gotcha: More than plain text as li
content
If you have more than plain text inside the li
— including something like an innocent <a>
— our grid template will break.
However, it’s a very easy solve — wrap the li
content in a span
. Our grid template doesn’t care what the elements are, but it does only expect two elements, where the pseudo element counts as the first.
Upgrading to CSS Marker
During the months after this article was originally posted, support for ::marker
became much better across all modern browsers.
The ::marker
pseudo selector allows directly changing and styling the ol
or ul
list bullet/numerical.
We can fully replace the solution for ul
bullets using ::marker
but we have to downgrade our ol
solution because there are only a few properties allowed for ::marker
:
animation-*
color
content
direction
font-*
transition-*
unicode-bidi
white-space
Unordered List Style With ::marker
Since content
is still an allowed property, we can keep our data-icon
solution for allowing custom emoji markers 🎉
We just need to swap ::before
to ::marker
:
ul li::marker {
content: attr(data-icon);
font-size: 1.25em;
}
Then remove the no longer needed grid properties from the li
and add back in some padding
to replace the removed gap
:
li {
/* replace the grid properties with: */
padding-left: 0.5em;
}
Finally, we previously removed margin
but we need to add back in some left margin to ensure space for the ::marker
to prevent it being cut off due to overflow:
/* update in existing rule */
ol,
ul {
margin: 0 0 0 2em;
/* ...existing styles */
}
And the visual results is identical to our previous solution, as you can see in the demo.
Ordered List Style With ::marker
For our ordered list, we can now switch and take advantage of the built-in counter.
We also have to drop our background-color
and border-radius
so we’ll swap to using our custom property for the color
value. And we’ll change our custom property name to --marker-color
for clarity.
So our reduced styles are as follows:
ol {
--marker-color: purple;
}li::marker {
content: counter(list-item);
font-family: "Indie Flower";
font-size: 1.5em;
color: var(--marker-color);
}
Don’t forget to update the CSS custom property name in the HTML, too!
Watch out for this gotcha: Changing the
display
property forli
will remove the::marker
pseudo element. So if you need a different display type for list contents, you’ll need to apply it by nesting an additional wrapping element.
::marker
Demo
Here’s our updated custom list styles that now use ::marker
.
Be sure to check for current browser support to decide which custom list style solution to use based on your unique audience! You may want to choose to use ::marker
as a progressive enhancement from one of the previously demonstrated solutions.
By Stephanie Eckles (@5t3ph)
For more details on using
::marker
, check out this excellent article by Adam Argyle.
В этой статье учебника речь пойдет о работе со списками в CSS, вы научитесь изменять тип маркера, расположение маркера относительно элемента списка, создавать собственные маркеры и даже изменять цвет маркера.
Думаю, вы уже знаете, что в HTML 5 применяется два основных вида списков (если не брать в расчет списки описаний и элементы меню):
- нумерованный (упорядоченный) список – HTML элемент <ol>
- маркированный (неупорядоченные) список – HTML элемент <ul>
CSS предоставляет нам широкие возможности форматирования внешнего вида этих списков, давайте рассмотрим основные из них.
Изменение типа маркера
Первое свойство, которое хотелось бы рассмотреть это свойство list-style-type, оно задает тип маркера элемента списка.
Меню навигации, к примеру, часто составляется из обычных маркированных списков (HTML элемент <ul>), по умолчанию маркер которых, отображается в форме закрашенного круга, чтобы его убрать необходимо, воспользоваться CSS свойством list-style-type со значением none:
ul { list-style-type : none; /* убираем маркер у списка */ }
Для маркированных (неупорядоченных) списков (HTML элемент <ul>) предусмотрено три типа маркеров: в форме закрашенного кружка (disc — это значение по умолчанию), маркер в форме полого круга (сircle) и в форме квадрата (square), а для нумерованных (упорядоченных) списков (элемент <ol>) все оставшиеся варианты. Полный перечень размещен в следующей таблице:
Значение | Описание |
---|---|
none
|
Маркер не отображается. |
disc
|
Маркер в форме закрашенного кружка. Это значение по умолчанию. |
armenian
|
Числовой маркер (традиционная Армянская нумерация). |
circle
|
Маркер в форме круга. |
cjk-ideographic
|
Простые идеографические числа. |
decimal
|
Числовой маркер (десятеричные арабские числа, начинающихся с 1). |
decimal-leading-zero
|
Числовой маркер (десятеричные арабские числа, начинающихся с 1 и дополненные начальным нулем — 01, 02, 03…). |
georgian
|
Числовой маркер (традиционная Грузинская нумерация — an, ban, gan, …, he, tan, in, in-an…). |
hebrew
|
Числовой маркер (традиционная Еврейская нумерация.). |
hiragana
|
Числовой маркер (японская слоговая азбука Хирагана — a, i, u, e, o, ka, ki…). |
hiragana-iroha
|
Числовой маркер (японская слоговая азбука Хирагана ироха — i, ro, ha, ni, ho, he, to, …). |
katakana
|
Числовой маркер (японская слоговая азбука Катакана — A, I, U, E, O, KA, KI, …). |
katakana-iroha
|
Числовой маркер (японская слоговая азбука Катакана ироха — I, RO, HA, NI, HO, HE, TO, …). |
lower-alpha
|
Буквы ascii нижнего регистра (a, b, c, d…z). |
lower-greek
|
Строчные греческие буквы (α, β, γ, δ, и т.д.). |
lower-latin
|
Строчные латинские буквы (a, b, c, d,…z). |
lower-roman
|
Римские числа в нижнем регистре (i, ii, iii, iv, v и т.д.). |
square
|
Маркер в форме квадрата. |
upper-alpha
|
Буквы ascii верхнего регистра (A, B, C, D,…Z). |
upper-latin
|
Заглавные латинские буквы (A, B, C, D,…Z). |
upper-roman
|
Римские цифры в верхнем регистре (I, II, III, IV, V и т.д.). |
Обращаю Ваше внимание, что значения hebrew, cjk-ideographic, hiragana, hiragana-iroha, katakana, katakana-iroha не поддерживаются браузером Internet Explorer.
Давайте рассмотрим пример использования свойства list-style-type в тексте:
<!DOCTYPE html> <html> <head> <title>Пример использования свойства list-style-type</title> <style> .test { list-style-type : lower-roman; /* устанавливаем тип маркера - римские числа в нижнем регистре */ color : orange; /* обратите внимание, что текст цвета соответствует цвету маркера */ } .test2 { list-style-type : circle; /* устанавливаем тип маркера в форме круга */ color : IndianRed; /* обратите внимание, что текст цвета соответствует цвету маркера */ } </style> </head> <body> <ul> /* список со значением типа маркера по умолчанию (disc). */ <li>Элемент списка</li> <li>Элемент списка</li> <li>Элемент списка</li> </ul> <ol class = "test"> /* нумерованный список с типом маркера lower-roman */ <li>Элемент списка</li> <li>Элемент списка</li> <li>Элемент списка</li> </ol> <ul class = "test2"> /* маркированный список с типом маркера circle */ <li>Элемент списка</li> <li>Элемент списка</li> <li>Элемент списка</li> </ul> </body> </html>
В данном примере мы создали два стиля, первый устанавливает тип маркера — римские числа в нижнем регистре (значение lower-roman), мы его применили к нумерованном списку (HTML элемент <ol>), а к маркированному списку (HTML элемент <ul>) мы применили стиль, который устанавливает тип маркера в форме полого круга (значение circle).
Результат нашего примера:
Обращаю Ваше внимание, что вы можете применить свойство list-style-type даже к отдельно взятому элементу списка (HTML элемент <li>), чтобы установить свой тип маркера, либо создать стили, которые будет применять определённый маркер к чётным, либо нечетным элементам списка, как рассмотрено в следующем примере:
<!DOCTYPE html> <html> <head> <title>Пример чередования стилей свойства list-style-type</title> <style> li:nth-child(even) { /* четное чередование стиля */ list-style-type : none; color : red; } li:nth-child(odd) { /* нечетное чередование стиля */ list-style-type : square; color : green; } </style> </head> <body> <ul> <li>Элемент списка</li> <li>Элемент списка</li> <li>Элемент списка</li> <li>Элемент списка</li> <li>Элемент списка</li> <li>Элемент списка</li> <li>Элемент списка</li> <li>Элемент списка</li> </ul> </body> </html>
В этом примере мы стилизовали все нечетные элементы списка — указали тип маркера квадрат, а цвет текста указали зеленый. Четные элементы списка получили следующий стиль: красный цвет текста и отсутствие маркера.
Результат нашего примера:
Расположение маркера относительно элемента списка
С помощью CSS свойства list-style-position вы можете определить расположение маркера, либо цифры относительно элемента списка. Для того, чтобы расположить маркер (цифру) внутри элемента списка вместе с содержимым, то необходимо использовать значение inside, а для того, чтобы расположить за границей элемента списка необходимо использовать значение outside.
Давайте для наглядности рассмотрим пример, в котором помимимо свойства list-style-position используем еще одно новое свойство, которое позволит нам установить границы элемента.
<!DOCTYPE html> <html> <head> <title>Пример использования свойства list-style-position</title> <style> li { border : 1px solid orange; /* устанавливаем сплошную границу размером 1px оранжевого цвета для всех элементов списка*/ } .test { list-style-position : outside; /* указываем, что маркер располагается слева от текста за границей элемента списка */ background-color : khaki; /* устанавливаем цвет заднего фона */ } .test2 { list-style-position : inside; /* указываем, что маркер располагается слева от текста внутри элемента вместе с содержимым */ background-color : khaki; /* устанавливаем цвет заднего фона */ } </style> </head> <body> <ul class = "test"> <li>Элемент списка</li> <li>Элемент списка</li> <li>Элемент списка</li> </ul> <ol class = "test2"> <li>Элемент списка</li> <li>Элемент списка</li> <li>Элемент списка</li> </ol> </body> </html>
В данном примере для маркированного списка (HTML элемент <ul>) мы расположили маркер внутри элемента списка вместе с содержимым, использовав свойство list-style-position со значение outside, а для нумерованного списка (HTML элемент <ol>) разместили цифру слева от текста внутри элемента вместе с содержимым (свойство list-style-position со значение inside).
Универсальное свойство border, которое позволяет установить границу для всех элементов списка, мы использовали для лучшего понимания работы свойства list-style-position. Работа с границами элементов в скором времени будет подробно рассмотрена в учебнике в статье «Границы элемента в CSS».
Результат нашего примера:
Создание собственных маркеров
Рано или поздно перед Вами встанет необходимость создать маркеры списка со своим дизайном, благодаря CSS свойству list-style-image мы это желание сможем реализовать в Вашем проекте.
Синтаксис свойства следующий:
ol { list-style-image : url('images/primer.png'); /* указываем относительный путь к изображению */ } ul { list-style-image : url('http://basicweb.ru/images/mini5.png'); /* указываем абсолютный путь к изображению */ }
Значение в скобках соответствует пути к изображению, которое вы планируете использовать в роли маркера. Путь к изображению может быть как абсолютный, так и относительный. При указании относительного пути, важным моментом является то, что его необходимо указывать относительно размещения таблицы стилей, а не страницы.
Если вы планируете оформить собственные маркеры, то вам придется использовать программу для редактирования графики, либо воспользоваться уже готовыми наборами. Обратите внимание на такой момент, который может произойти, даже если Вы все сделали правильно, изображение может не загрузиться на страницу, в этом случае необходимо отредактировать изображение таким образом, чтобы его фон стал прозрачным.
Давайте рассмотрим пример использования собственных маркеров в документе:
<!DOCTYPE html> <html> <head> <title>Пример использования CSS свойства list-style-image</title> .test { list-style-image : url('http://basicweb.ru/images/mini5.png'); /* указываем абсолютный путь к изображению, которое будет использовано в качестве маркера */ } </style> </head> <body> <ul class = "test"> <li>Элемент списка</li> <li>Элемент списка</li> <li>Элемент списка</li> </ul> </body> </html>
В данном примере мы указываем абсолютный путь к изображению, которое будет использовано в качестве маркера.
Результат нашего примера:
Изменение цвета маркера в CSS
В завершении этой статьи давайте рассмотрим продвинутый способ изменения цвета маркера без изменения цвета элемента, с использованием CSS свойства content и ранее рассмотренного псевдоэлемента :before:
<!DOCTYPE html> <html> <head> <title>Пример изменения цвета маркера</title> <style> ul { list-style : none; /* убираем маркеры у маркированного списка */ } li:before {/* Псевдоэлемент :before добавляет содержимое, указанное в свойстве content перед каждым элементом <li> */ content : "•"; /* вставляем содержимое, которое выглядит как маркер */ padding-right : 10px; /* устанавливаем правый внутренний отступ элемента. */ color : orange; /* устанавливаем цвет шрифта */ } </style> </head> <body> <ul> <li>Элемент списка</li> <li>Элемент списка</li> <li>Элемент списка</li> </ul> </body> </html>
Суть этого способа заключается в том, что мы перед каждым элементом списка (HTML элемент <li>) вставляем псевдоэлементом (:before) сгенерированный контент (CSS свойство content), который идентичен по внешнему виду маркеру в маркированном списке (HTML элемент <ul>), только уже необходимого для нашей задачи цвета.
Обращаю Ваше внимание, что в данном примере использовано свойство padding-right, которое нам позволило сделать внутренний отступ справа в каждом элементе списка (HTML элемент <li>). Если в данном случае не применять это свойство, то маркер будет находится в упор к тексту, что зрительно некрасиво.
Работа с внутренними и внешними отступами элементов будет подробно рассмотрена в следующей статье учебника «Блочная и строчная модель в CSS».
Вопросы и задачи по теме
Перед тем как перейти к изучению следующей темы пройдите практические задания:
- Для выполнения задания вам понадобится скачать архив и скопировать содержимое архива (два HTML файла и изображение) в любую папку на вашем жестком диске:
- Используя полученные знания составьте следующие HTML страницы:
Практическое задание № 18. Продвинутое задание:
Практическое задание № 19.
Если у Вас возникают трудности при выполнении практического задания, Вы всегда можете открыть пример в отдельном окне и проинспектировать страницу, чтобы понять какой код CSS был использован.