Немаркированный список html


Задача
Результат запроса содержит ряд значений, которые надо структурировать в виде списка.

Решение
Заключите элементы списка в теги HTML, соответствующие требуемому типу списка.

Обсуждение
Списки, занимающие по степени структурированности промежуточное положение между абзацами и таблицами, удобно использовать для представления набора отдельных элементов. В языке HTML есть несколько видов списков, а именно, неупорядоченные (маркированные) списки, упорядоченные (нумерованные) списки и списки определений. Возможно, вам понадобятся вложенные списки, образующиеся при форматировании элемента списка в виде списка.

Списки обычно состоят из открывающего и закрывающего тегов, окружающих набор элементов, каждый из которых помечен собственным тегом. Элементы списка естественным образом соответствуют строкам, полученным в запросе, поэтому создание HTML-списка из программы заключается в перекодировании результата запроса, добавлении к каждой строке нужных тегов и выводе открывающего и закрывающего тегов. Наиболее распространены два подхода к созданию списков. Если вы хотите выводить список по мере получения результатов запроса, делайте так:


1. Выведите открывающий тег списка.

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

3. Выведите закрывающий тег списка. Другой подход состоит в формировании списка в памяти:1. Сохраните элементы списка в массиве.

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

Следующий пример иллюстрирует оба подхода.

Нумерованные списки
Нумерованный список (ordered list) состоит из элементов, расположенных в определенном порядке. Броузеры обычно отображают такие списки как набор элементов с порядковыми номерами:

1. Первый элемент
2. Второй элемент
3. Третий элемент

Вам не надо задавать номера элементов, так как броузер проставляет их автоматически. В HTML нумерованный список начинается и заканчивается тегами

    и

соответственно и состоит из элементов, заключенных в теги

  • и
  • :

    1. Первый элемент
    2. Второй элемент
    3. Третий элемент

    Предположим, у вас есть таблица ingredient, содержащая пронумерованные ингредиенты кулинарного рецепта:

    +—+————————————+
    | id | item |
    +—+————————————+
    | 1 | 3 cups flour |
    | 2 | 1/2 cup raw («unrefined») sugar |
    | 3 | 3 eggs |
    | 4 | pinch (< 1/16 teaspoon) salt |
    +-+————————————-+


    В таблице есть столбец идентификаторов id, но для представления рецепта в виде нумерованного списка достаточно вывести только текстовые значения, так как броузер пронумерует их самостоятельно. Значения содержат специальные символы » и <, поэтому придется перекодировать их, прежде чем добавлять теги, превращающие значения в элементы списка. Результат должен выглядеть так:

    1. 3 cups flour
    2. 1/2 cup raw ("unrefined") sugar
    3. 3 eggs
    4. pinch (< 1/16 teaspoon) salt

    Один из путей создания такого списка в программе – вывод в HTML по мере выборки строк результирующего множества. Вот как это можно сделать в JSP-странице с использованием тегов JSTL:

    SELECT item FROM ingredient ORDER BY id

    В PHP ту же операцию можно проделать так:

    $query = «SELECT item FROM ingredient ORDER BY id»;
    $result_id = mysql_query ($query, $conn_id);
    if (!$result_id)
    die (htmlspecialchars (mysql_error ($conn_id)));
    print («

      n»);
      while (list ($item) = mysql_fetch_row ($result_id))
      print («

    1. » . htmlspecialchars ($item) . «
    2. n»);
      mysql_free_result ($result_id);
      print («


    n»);

    Нет необходимости добавлять символы конца строки после завершающих тегов, как это сделано в данном примере; броузер не интересуется их наличием или отсутствием. Я предпочитаю добавлять их, так как генерируемый сценарием HTML-код легче читается, если не состоит из единственной строки, а это облегчает отладку.

    Подход, использованный в предыдущих примерах, предполагает чередование выборки записей с генерацией вывода. Возможен и другой способ: раздельное выполнение операций, при котором данные сначала выбираются, затем выводятся. Запросы для разных списков могут различаться, но генерация самого списка выполняется, как правило, единообразно. Написав функцию генерации списка, вы сможете использовать ее с разными запросами. Две вещи, которые должна выполнять такая функция, – это перекодирование элементов (если это еще не сделано) и добавление требуемых HTML-
    тегов. В PHP, например, функцию make_ordered_list() можно реализовать следующим образом (она принимает в качестве аргумента массив элементов списка и возвращает список в виде строки):

    function make_ordered_list ($items, $encode = TRUE)
    {
    if (!is_array ($items))
    return («make_ordered_list: items argument must be an array»);
    $str = «

      n»;
      reset ($items);
      while (list ($k, $v) = each ($items))
      {
      if ($encode)$v = htmlspecialchars ($v);
      $str .= «

    1. $v
    2. n»;
      }
      $str .= «


    n»;
    return ($str);
    }

    Написав такую функцию, вы можете сделать выборку и вывести результат в HTML, например, так:

    # получить элементы списка
    $query = «SELECT item FROM ingredient ORDER BY id»;
    $result_id = mysql_query ($query, $conn_id);
    if (!$result_id)
    die (htmlspecialchars (mysql_error ($conn_id)));
    $items = array ();
    while (list ($item) = mysql_fetch_row ($result_id))
    $items[] = $item;
    mysql_free_result ($result_id);
    # сформировать HTML-список
    print (make_ordered_list ($items));

    В Python подобная функция будет выглядеть так:

    def make_ordered_list (items, encode = 1):
    if type (items) not in (types.ListType, types.TupleType):
    return («make_ordered_list: items argument must be a list»)
    list = «


      for item in items:
      if item is None: # обработать возможный пустой элемент
      item = «»
      # убедиться, что элемент – строка, и при необходимости перекодировать
      if type (item) is not types.StringType:
      item = `item`
      if encode:
      item = cgi.escape (item, 1)
      list = list + «

    1. » + item + «

    2. list = list + «



    return list

    А использовать ее надо так:

    # получить элементы списка
    query = «SELECT item FROM ingredient ORDER BY id»
    cursor = conn.cursor ()
    cursor.execute (query)
    items = []
    for (item,) in cursor.fetchall ():
    items.append (item)
    cursor.close ()
    # сформировать HTML-список

    print make_ordered_list (items)В обоих вариантах функции make_ordered_list() на PHP и Python проверяется, является ли первый аргумент массивом. Если нет, возвращается строка с описанием ошибки. Благодаря возврату содержательной строки проблема сразу становится очевидной при взгляде на веб-страницу, сформированную функцией. Если хотите, можете возвращать другие признаки ошибки или генерировать исключение, или завершать выполнение сценария.

    Второй аргумент функции make_ordered_list() определяет, надо ли перекодировать элементы списка. Проше всего позволить функции определять необходимость этого самостоятельно (поэтому по умолчанию и передается «истина»). Но если вы формируете список из элементов, которые уже содержат теги HTML, то не захотите, чтобы функция преобразовывала специальные символы, содержащиеся в этих тегах. Например, если вы создаете список гиперссылок, то каждый элемент списка будет содержать тег (a). Чтобы исключить перекодирование тега в <a>, передайте функции make_ordered_list() вторым параметром значение FALSE (для PHP) или 0 (для Python).


    Конечно, если в вашем API есть функции генерации HTML-структур, вам не придется писать их самостоятельно. Это относится к модулю Perl CGI.pm: вызовите функцию li(), которая создает элемент, добавляя к нему открывающий и закрывающий теги, сохраните элементы в массиве, затем передайте этот массив в функцию ol(), которая добавит открывающий и закрывающий теги списка:

    my $query = «SELECT item FROM ingredient ORDER BY id»;
    my $sth = $dbh->prepare ($query);
    $sth->execute ();
    my @items = ();
    while (my $ref = $sth->fetchrow_arrayref ())
    {
    # обработать возможный элемент NULL (undef)
    my $item = (defined ($ref->[0]) ? escapeHTML ($ref->[0]) : «»);
    push (@items, li ($item));
    }
    print ol (@items);

    Преобразовывать неопределенные значения (undef или NULL) в пустые строки необходимо для того, чтобы исключить генерацию предупреждений о неинициализированных значениях, когда Perl запускается с опцией -w. (Таблица ingredient не содержит значений NULL, но этот способ полезен при работе с таблицами, в которых такие значения встречаются.)

    В предыдущем примере выборка записей и генерация HTML выполняются попеременно. Чтобы разделить операции выборки и формирования кода, поместите элементы в массив. Затем передайте массив по ссылке функции li(), а ее результат – функции ol():


    # получить элементы списка
    my $query = «SELECT item FROM ingredient ORDER BY id»;
    my $item_ref = $dbh->selectcol_arrayref ($query);
    # сгенерировать список HTML, обрабатывая возможные элементы NULL (undef)$item_ref = [ map { defined ($_) ? escapeHTML ($_) : «» } @{$item_ref} ];
    print ol (li ($item_ref));

    Имейте в виду следующие два свойства функции li():

    • Она не выполняет никакого HTML-кодирования; вы должны сделать это самостоятельно.

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

  • и
  • к каждому элементу массива, затем склеит их и вернет результирующую строку. Если вы передадите массив не по ссылке, а по значению, функция сначала объединит элементы, а затем заключит результат в единственную пару тегов, что, скорее всего, не соответствует вашим ожиданиям. Аналогичное поведение свойственно и некоторым другим функциям CGI.pm, которые могут оперировать как одним, так и несколькими значениями. Например, функция обработки табличных данных td() добавляет единственную пару тегов

    и

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

    Маркированные списки
    Маркированный список (unordered list) аналогичен нумерованному, за исключением того, что броузер отображает его элементы, помечая их одним и тем же символом (маркером):


    • Первый элемент
    • Второй элемент
    • Третий элемент

    Маркированные списки являются неупорядоченными в том смысле, что символ маркера не содержит информацию о порядке элементов. Разумеется, вы можете вывести элементы в нужном вам порядке. Код HTML для маркированного списка аналогичен коду нумерованного списка, только вместо тегов

      и

    используются

      и

    :

    • Первый элемент
    • Второй элемент
    • Третий элемент

    В тех API, где вы непосредственно выводите теги, используйте ту же процедуру, что и для нумерованных списков, но вместо

      и

    выводите

      и

    . Вот пример на JSP:

    SELECT item FROM ingredient ORDER BY id

    В Perl маркированный список создается функцией ul() модуля CGI.pm:

    # получить элементы списка
    my $query = «SELECT item FROM ingredient ORDER BY id»;
    my $item_ref = $dbh->selectcol_arrayref ($query);
    # сгенерировать список HTML, обрабатывая возможные элементы NULL (undef)$item_ref = [ map { defined ($_) ? escapeHTML ($_) : «» } @{$item_ref} ];
    print ul (li ($item_ref));


    Если вы пишете собственную функцию для маркированного списка, то можете адаптировать функцию формирования нумерованного списка. Например, обе версии функции make_ordered_list() для PHP и Python легко превращаются в make_unordered_list(), так как отличие заключается только в открывающем и закрывающем тегах.

    Списки определений
    Элементы списка определений (definition list) состоят из двух частей – термина и его определения. Здесь слова «термин» и «определение» можно толковать сколь угодно широко: вы можете размещать здесь любую информацию. Например, в приведенной ниже таблице doremi каждой ноте музыкальной гаммы (note) сопоставлена мнемоническая фраза (mnemonic), облегчающая запоминание (которая в действительности определением не является):

    +—+——+——————————+
    | id | note | mnemonic |
    +—+——+——————————+
    | 1 | do | A deer, a female deer |
    | 2 | re | A drop of golden sun |
    | 3 | mi | A name I call myself |
    | 4 | fa | A long, long way to run |
    | 5 | so | A needle pulling thread |
    | 6 | la | A note to follow so |
    | 7 | ti | I drink with jam and bread |
    +—+——+——————————+


    Тем не менее столбцы note и mnemonic могут быть представлены списком определений:

    do
    A deer, a female deer
    re
    A drop of golden sun
    mi
    A name I call myself
    fa
    A long, long way to run
    so
    A needle pulling thread
    la
    A note to follow so
    ti
    I drink with jam and bread

    Код HTML для списка определений начинается и заканчивается тегами

    и

    соответственно. Каждый элемент содержит термин, заключенный в теги

    и

    , и определение, помещенное в теги

    и

    :

    do
    A deer, a female deer

    re
    A drop of golden sun

    mi
    A name I call myself

    fa
    A long, long way to run

    so
    A needle pulling thread

    la
    A note to follow so

    ti
    I drink with jam and bread

    В JSP-страницах список определений можно сгенерировать так:

    SELECT note, mnemonic FROM doremi ORDER BY note

    В PHP можно сделать так:

    $query = «SELECT item FROM ingredient ORDER BY id»;
    $result_id = mysql_query ($query, $conn_id);
    if (!$result_id)
    die (htmlspecialchars (mysql_error ($conn_id)));
    print («

    n»);
    while (list ($note, $mnemonic) = mysql_fetch_row ($result_id))
    {
    print («

    » . htmlspecialchars ($note) . «

    n»);
    print («

    » . htmlspecialchars ($mnemonic) . «

    n»);
    }
    mysql_free_result ($result_id);
    print («

    n»);

    Или можно написать функцию, принимающую массивы терминов и определений и возвращающую список в виде строки:

    function make_definition_list ($terms, $definitions, $encode = TRUE)
    {
    if (!is_array ($terms))
    return («make_definition_list: terms argument must be an array»);
    if (!is_array ($definitions))
    return («make_definition_list: definitions argument must be an array»);
    if (count ($terms) != count ($definitions))
    return («make_definition_list: term and definition list size mismatch»);
    $str = «

    n»;
    reset ($terms);
    reset ($definitions);
    while (list ($dtk, $dtv) = each ($terms))
    {list ($ddk, $ddv) = each ($definitions);
    if ($encode)
    {
    $dtv = htmlspecialchars ($dtv);
    $ddv = htmlspecialchars ($ddv);
    }
    $str .= «

    $dtv

    n

    $ddv

    n»;
    }
    $str .= «

    n»;
    return ($str);
    }

    Приведем пример использования функции make_definition_list():

    # получить элементы списка
    $query = «SELECT note, mnemonic FROM doremi ORDER BY id»;
    $result_id = mysql_query ($query, $conn_id);
    if (!$result_id)
    die (htmlspecialchars (mysql_error ($conn_id)));
    $terms = array ();
    $defs = array ();
    while (list ($note, $mnemonic) = mysql_fetch_row ($result_id))
    {
    $terms[] = $note;
    $defs[] = $mnemonic;
    }
    mysql_free_result ($result_id);
    # сгенерировать список HTML
    print (make_definition_list ($terms, $defs));

    В Perl создайте термины и определения вызовом функций dt() и dd(), сохраните их в массиве и передайте его функции dl():

    my $query = «SELECT note, mnemonic FROM doremi ORDER BY id»;
    my $sth = $dbh->prepare ($query);
    $sth->execute ();
    my @items = ();
    while (my ($note, $mnemonic) = $sth->fetchrow_array ())
    {
    # обработать возможные значения NULL (undef)
    $note = (defined ($note) ? escapeHTML ($note) : «»);
    $mnemonic = (defined ($mnemonic) ? escapeHTML ($mnemonic) : «»);
    push (@items, dt ($note));
    push (@items, dd ($mnemonic));
    }
    print dl (@items);

    Ниже приведен чуть более сложный пример. Каждый термин – это имя базы данных, а в соответствующем определении указано количество таблиц в ней. Значения получены выполнением запроса SHOW TABLES к каждой базе данных и подсчетом строк результата:

    # получить список имен баз данных
    my $db_ref = $dbh->selectcol_arrayref («SHOW DATABASES»);
    my @items = ();
    foreach my $db_name (@{$db_ref})
    {
    # получить список имен таблиц базы данных; отключить RaiseError для этого запроса,
    # чтобы сценарий не завершался, если пользователь не имеет доступа к текущей БД
    $dbh->{RaiseError} = 0;
    my $tbl_ref = $dbh->selectcol_arrayref («SHOW TABLES FROM $db_name»);
    $dbh->{RaiseError} = 1;
    my $tbl_count = (defined ($tbl_ref) # ошибка?
    ? @{$tbl_ref} . » tables» # нет, считаем таблицы
    : «cannot access»); # да, сообщаем о проблеме
    push (@items, dt (escapeHTML ($db_name)));
    push (@items, dd (escapeHTML ($tbl_count)));
    }
    print dl (@items);

    Обратите внимание на то, что надо не допустить выхода из сценария при возникновении ошибки выполнения команды SHOW TABLES по причине запуска сценария пользователем, не имеющим доступа к какой-либо базе данных.

    Немаркированные списки
    В списках этого типа, обычно даже не рассматриваемых при обсуждении списков, вообще нет маркеров. Это просто набор элементов, каждый из которых расположен на отдельной строке. Создать немаркированный список очень просто: после каждой строки добавьте тег перевода строки. Вот пример на JSP:

    Если элементы уже помещены в массив, просто пройдите их в цикле. Например, в Perl, если элементы находятся в массиве @items, список генерируется так:

    foreach my $item (@items)
    {
    # обработать возможные значения NULL (undef)
    $item = (defined ($item) ? escapeHTML ($item) : «»);
    print $item . br ();
    }

    Вложенные списки
    Некоторые приложения выводят информацию, которая лучше всего воспринимается в виде списка списков. В следующем примере названия штатов, сгруппированные по первой букве, отображаются в списке определений.

    В каждом элементе списка термином служит начальная буква, а определение представляет собой маркированный список названий штатов, начинающихся с этой буквы:

    A
    • Alabama
    • Alaska
    • Arizona
    • Arkansas
    C
    • California
    • Colorado
    • Connecticut
    D
    • Delaware

    Вот один из способов создания (на Perl) такого списка:

    # получить список начальных букв
    my $ltr_ref = $dbh->selectcol_arrayref (
    «SELECT DISTINCT UPPER(LEFT(name,1)) AS letter
    FROM states ORDER BY letter»);
    my @items = ();
    # получить список штатов для каждой буквы
    foreach my $ltr (@{$ltr_ref})
    {
    my $item_ref = $dbh->selectcol_arrayref (
    «SELECT name FROM states WHERE LEFT(name,1) = ?
    ORDER BY name», undef, $ltr);
    $item_ref = [ map { escapeHTML ($_) } @{$item_ref} ];
    # сформировать маркированный список названий штатов
    my $item_list = ul (li ($item_ref));
    # для каждого элемента списка определений начальная буква – термин,
    # а список штатов — определение
    push (@items, dt ($ltr));
    push (@items, dd ($item_list));
    }
    print dl (@items);

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

    my $sth = $dbh->prepare («SELECT name FROM states ORDER BY name»);
    $sth->execute ();
    my @items = ();
    my @names = ();
    my $cur_ltr = «»;
    while (my ($name) = $sth->fetchrow_array ())
    {my $ltr = uc (substr ($name, 0, 1)); # начальная буква названия
    if ($cur_ltr ne $ltr) # начать с новой буквы?
    {
    if (@names) # есть ли уже имена для предыдущих букв?
    {
    # для каждого элемента списка определений начальная буква – термин,
    # а список штатов — определение
    push (@items, dt ($cur_ltr));
    push (@items, dd (ul (li (@names))));
    }
    @names = ();
    $cur_ltr = $ltr;
    }
    push (@names, escapeHTML ($name));
    }
    if (@names) # остались названия для последней буквы?
    {
    push (@items, dt ($cur_ltr));
    push (@items, dd (ul (li (@names))));
    }
    print dl (@items);

    В третьем варианте используется единственный запрос, но разделены этапы подготовки данных и генерации HTML-кода:

    # получить названия штатов и сопоставить их списку начальных букв
    my $sth = $dbh->prepare («SELECT name FROM states ORDER BY name»);
    $sth->execute ();
    my %ltr = ();
    while (my ($name) = $sth->fetchrow_array ())
    {
    my $ltr = uc (substr ($name, 0, 1)); # первая буква названия
    # инициализировать список букв пустым массивом, если
    # это первый штат, затем добавлять штаты в массив
    $ltr{$ltr} = [] unless exists ($ltr{$ltr});
    push (@{$ltr{$ltr}}, $name);
    }
    # теперь создать результирующий список
    my @items = ();
    foreach my $ltr (sort (keys (%ltr)))
    {
    # кодировать список названий штатов для данной буквы,
    # создать маркированный список
    my $ul_str = ul (li ([ map { escapeHTML ($_) } @{$ltr{$ltr}} ]));
    push (@items, dt ($ltr), dd ($ul_str));
    }
    print dl (@items);

    Немаркированный список html Извлечение изображений и других двоичных данных
    Немаркированный список html Использование результатов запроса для загрузки файлов
    Немаркированный список html Представление результатов запроса в виде абзацев
    Немаркированный список html Представление результатов запроса в виде гиперссылок
    Немаркированный список html Представление результатов запроса в виде таблиц

    oooportal.ru

    Создание HTML-списков

    • Содержание:
    • 1. Маркированный список <ul>
    • 2. Нумерованный список <ol>
    • 3. Список определений <dl>
    • 4. Вложенный список
    • 5. Многоуровневый нумерованный список

    1. Маркированный список

    Маркированный список представляет собой неупорядоченный список (от англ. Unordered List). Создаётся с помощью парного тега <ul></ul>. В качестве маркера элемента списка выступает метка, например, закрашенный кружок.

    Браузеры по умолчанию добавляют следующее форматирование блоку списка:

    ul {padding-left: 40px; margin-top: 1em; margin-bottom: 1em;}

    Каждый элемент списка создаётся с помощью парного тега <li></li> (от англ. List Item).

    Для тега <ul> доступны ‎глобальные атрибуты.

    <ul>   <li>Microsoft</li>   <li>Google</li>   <li>Apple</li>   <li>IBM</li>  </ul>
    unordered list
    Рис. 1. Маркированный список

    2. Нумерованный список

    Нумерованный список создаётся с помощью парного тега <ol></ol>. Каждый пункт списка также создаётся с помощью элемента <li>. Браузер нумерует элементы по порядку автоматически и если удалить один или несколько элементов такого списка, то остальные номера будут автоматически пересчитаны.

    Блок списка также имеет стили браузера по умолчанию:

    ol {padding-left: 40px; margin-top: 1em; margin-bottom: 1em;}

    Для тега <li> доступен атрибут value, который позволяет изменить номер по умолчанию для выбранного элемента списка. Например, если для первого пункта списка задать <li value="10">, то остальная нумерация будет пересчитана относительно нового значения.

    Для тега <ol> доступны следующие атрибуты:

    Таблица 1. Атрибуты тега <ol>
    Атрибут Описание, принимаемое значение
    reversed Атрибут reversed задает отображение списка в обратном порядке (например, 9, 8, 7…).
    start Атрибут start задает начальное значение, от которого пойдет отсчет нумерации, например, конструкция <ol start="10"> первому пункту присвоит порядковый номер «10». Также можно одновременно задавать тип нумерации, например, <ol type="I" start="10">.
    type Атрибут type задает вид маркера для использования в списке (в виде букв или цифр). Принимаемые значения:
    1 — значение по умолчанию, десятичная нумерация.
    A — нумерация списка в алфавитном порядке, заглавные буквы (A, B, C, D).
    a — нумерация списка в алфавитном порядке, строчные буквы (a, b, c, d).
    I — нумерация римскими заглавными цифрами (I, II, III, IV).
    i — нумерация римскими строчными цифрами (i, ii, iii, iv).
    <ol>   <li>Microsoft</li>   <li>Google</li>   <li>Apple</li>   <li>IBM</li>  </ol>
    ordered list
    Рис. 2. Нумерованный список

    3. Список определений

    Списки определений создаются с помощью тега <dl></dl>. Для добавления термина применяется тег <dt></dt>, а для вставки определения — тег <dd></dd>.

    Блок списка определений имеет следующие стили браузера по умолчанию:

    dl {margin-top: 1em; margin-bottom: 1em;}

    Для тегов <dl>, <dt> и <dd> доступны ‎глобальные атрибуты.

    <dl>   <dt>Режиссер:</dt>   <dd>Петр Точилин</dd>   <dt>В ролях:</dt>   <dd>Андрей Гайдулян</dd>   <dd>Алексей Гаврилов</dd>   <dd>Виталий Гогунский</dd>   <dd>Мария Кожевникова</dd>  </dl>
    dl
    Рис. 3. Список определений

    4. Вложенный список

    Зачастую возможностей простых списков не хватает, например, при создании оглавления никак не обойтись без вложенных пунктов. Разметка для вложенного списка будет следующей:

    <ul>   <li>Пункт 1.</li>   <li>Пункт 2.   <ul>   <li>Подпункт 2.1.</li>   <li>Подпункт 2.2.    <ul>   <li>Подпункт 2.2.1.</li>   <li>Подпункт 2.2.2.</li>   </ul>   </li>    <li>Подпункт 2.3.</li>   </ul>   </li>   <li>Пункт 3.</li>  </ul>
    ul ul ul
    Рис. 4. Вложенный список

    5. Многоуровневый нумерованный список

    Многоуровневый список используется для отображения элементов списка на разных уровнях с различными отступами. Разметка для многоуровневого нумерованного списка будет следующей:

    <ol>   <li>пункт</li> <!-1.->   <li>пункт    <ol>   <li>пункт</li> <!-2.1.->   <li>пункт</li> <!-2.2.->   <li>пункт   <ol>   <li>пункт</li> <!-2.3.1.->   <li>пункт</li> <!-2.3.2.->   <li>пункт</li> <!-2.3.3.->    </ol>   </li> <!-2.3.->   <li>пункт</li> <!-2.4.->    </ol>   </li> <!-2.->   <li>пункт</li> <!-3.->    <li>пункт</li> <!-4.->   </ol>

    Такая разметка по умолчанию создаст для каждого вложенного списка новую нумерацию, начинающуюся с единицы. Чтобы сделать вложенную нумерацию, нужно использовать следующие свойства:
    counter-reset сбрасывает один или несколько счётчиков, задавая значение для сброса;
    counter-increment задаёт значение приращения счётчика, т.е. с каким шагом будет нумероваться каждый последующий пункт;
    content — генерируемое содержимое, в данном случае отвечает за вывод номера перед каждым пунктом списка.

    ol {  /* убираем стандартную нумерацию */  list-style: none;   /* Идентифицируем счетчик и даем ему имя li. Значение счетчика не указано - по умолчанию оно равно 0 */   counter-reset: li;   }  li:before {  /* Определяем элемент, который будет нумероваться — li. Псевдоэлемент before указывает, что содержимое, вставляемое при помощи свойства content, будет располагаться перед пунктами списка. Здесь же устанавливается значение приращения счетчика (по умолчанию равно 1). */  counter-increment: li;   /* С помощью свойства content выводится номер пункта списка. counters() означает, что генерируемый текст представляет собой значения всех счетчиков с таким именем. Точка в кавычках добавляет разделяющую точку между цифрами, а точка с пробелом добавляется перед содержимым каждого пункта списка */  content: counters(li,".") ". ";   }
    numeric list
    Рис. 5. Многоуровневый нумерованный список

    html5book.ru

    Списки в HTML (XHTML)

     Списки в HTML (XHTML) используются для оформления и форматирования видимой текстовой части html-документа. Дополнительно, на основании кодов списков, в HTML-разметке веб-страницы создаются и группируются элементы управления и навигации – кнопочки и менюшки (простые и выпадающие). Коды списков языка гипертекстовой разметки HTML ничем не отличаются от кодов списков XHTML…

    1. Код и видимая часть списков HTML
    2. Виды списков в HTML
      • Маркированный список
      • Нумерованный список
      • Список определений
      • Многоуровневые (вложенные) списки
      • Ненумерованные и немаркированные списки
      • Выпадающие списки
    3. Теги списков в HTML
      <ul>,<ol>,<li>,<dl>, dt>,<dd>
    4. Как создать список в html
    5. Примеры списков html
      • Маркированный | Теги <ul> и <li>
      • Нумерованный | Теги <ol> и <li>
      • Многоуровневые (вложенные) списки
      • Список определений | Теги <dl>, <dt> и <dd>
      • Ненумерованные и немаркированные списки

    Код и видимая часть списков HTML

    Равно как и все объекты веб-страницы, списки в HTML имеют две составляющие – код списка и его видимую часть (интерпретацию кода). Код списка HTML невидим пользователю. Код записывается в HTML-разметку веб-документа и интерпретируется браузером непосредственно на экран монитора пользователя – это будет видимая часть списка.

    Виды списков в HTML

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

    Теги списков в HTML

    Для создания кода списков в HTML используются теги:
    <ul>, <ol> и <li>, а также <dl>, <dt> и <dd>
    Все теги парные – закрывающий тег обязателен.
    Теги списков в HTML создают и обозначают:

    • <ul> – маркированный список
    • <ol> – нумерованный список
    • <li> – элементы (строки) маркированного и нумерованного списков
    • <dl> – список определений
    • <dt> – элемент-термин в списке определений
    • <dd> – элемент-описание в списке определений

    Как создать список в html

    Чтобы создать список в веб-документе, нужно в его HTML-разметке написать html-код списка. Код любого html-списка начинается и заканчивается обрамляющими (оборачивающими) тегами (ol, ul, dl) которые указывают браузеру на вид списка. Между оборачивающими (обрамляющими) тегами располагаются элементы списка, обёрнутые, в свою очередь – тегами элементов списка (li, dd, dt).

    Существует множество визуальных html-редакторов, облегчающих работу по созданию разнообразных списков. В этой статье, речь – непосредственно про коды списка на веб-странице. Выбор способа создания кода, в Notepad-е (блокноте) или в хитрющем html-редакторе – личное дело юзера. Практически все текстовые html-редакторы слишком упрощённо подходят к созданию html-списков.

    Маркированный html-список | Теги <ul> и <li>

    Код маркированного списка начинается с открывающего тега <ul>. Потом идут элементы, обрамлённые парными тегами <li></li>. Код маркированного списка заканчивается закрывающим тегом </ul>. Пример кода маркированного списка:

    Маркированный (неупорядоченный) список по-англицки звучит, как Unordered List. Становится понятной аббревиатура его обрамляющего тега – <ul> (Unordered List). Написание тега <ul> заглавными литерами – <UL>. В спецификации HTML нет верхнего регистра. Правильно писать – <ul>

    Нумерованный html-список | Теги <ol> и <li>

    Код нумерованного списка ничем не отличается от кода маркированного списка, с той разницей, что обрамляющие список теги <ul> заменяются на <ol> (анг. Ordered List – нумерованный, упорядоченный список). Код нумерованного списка открывает тег <ol>. Внутри находятся элементы, обрамлённые парными тегами, вида <li>элемент</li>. Закрывается код нумерованного списка тегом </ol>. Пример кода нумерованного списка:

    Многоуровневые (вложенные списки)

    Вложенные (многоуровневые, ступенчатые) списки в HTML представляют наибольший интерес. Чтобы создать многоуровневый вложенный список в HTML, нужно в код одного списка вставить код другого списка. Код вложенного списка вставляется в виде отдельного элемента, между тегами <li></li>. Порядок и степень вложения не имеет значения. Допускается вкладывать маркированный список в нумерованный и наоборот, на любую глубину и пока не надоест. Браузер всё вытерпит. Пример кода многоуровневого списка со вложенными списками (код основного списка обозначен синим цветом, первого вложенного – жёлтым, второго вложенного – зелёным):

    Список определений | Теги <dl>, <dt> и <dd>

    Список определений (описаний, объяснений) – перечень терминов и пояснений к ним. Этот вид текстовой записи списка специально придуман для объяснения и описания терминов и определений, например – описания списка товаров. Список определений отличается от обычных списков. Элементы списка определений разделены на две части – слово (термин) и его описание (определение, пояснение для этого слова или термина).

    Код списка определений начинается открывающим тегом <dl> (анг. Definition Lists – список определений). После него идёт элемент-термин списка, который требуется объяснить – этот элемент обрамлён парным тегом <dt></dt>. Дальше идёт текстовый объясняющий элемент списка, он обрамлён парным тегом <dd></dd>. Код списка определений заканчивается закрывающим тегом </dl>. Пример кода списка определений:

    Для усиления визуального эффекта использован CSS,
    который к данному коду не имеет никакого отношения.

    Элементы списка определений не имеют бу́ллетов – специальных типографских знаков. В HTML, списки определений существует исключительно для создания описаний и оформления текстовой видимой части веб-документа. Маркированный и нумерованный списки значительно универсальней и разнообразней. Управление их внешним видом производится при помощи атрибутов тегов списка и атрибутов тегов элементов (строк) списка. Дополнительно, маркированный и нумерованный списки используются в html-разметке веб-страниц для создания и группирования элементов управления и навигации.

    Ненумерованные и немаркированные списки

    Список без ничего – без нумерации, маркировки и прочих списочных причиндалов (бу́ллетов), получится из маркированного или нумерованного списка, после присвоения последнему свойства list-style:none;

    Более сложный способ скрыть/убрать бу́ллеты (маркеры) у списка – это добавить ему свойство overflow: hidden;, которое обрезает выступающую за пределы списка маркировку (нумерацию, или что там у него есть). Прим. Обрезание маркеров (overflow: hidden;) работает только за пределами списка – свойство list-style-position: outside; Это свойство устанавливается дефолтными настройками по-умолчанию для всех видов браузеров и, если специально нигде не указано другое (list-style-position:inside;) то тогда добавляем просто overflow: hidden;. Пример кода немаркированного и ненумерованного списка (<ul> или <ol>, не важно):

    tehnopost.info

    Нумерованный список HTML

    Обычный нумерованный список HTML можно создать при помощи следующих тегов:

    <ol>

    <li>Первый пункт списка</li>

    <li>Второй пункт списка</li>

    <li>Третий пункт списка</li>

    </ol>

    Простые списки выглядят вот так

    нумерованный список html

    Согласно стандартам, каждый пункт списка должен быть внутри открывающего и закрывающего тега li. Но если вы не поставите закрывающий тег, то результат будет точно таким же. Обработчик весьма умный. Во время преобразования списка он анализирует открывающие теги. Если он видит новый <li>, то автоматически перед ним ставит </li>.

    Таким образом, списки можно делать так, как показано ниже.

    html тег нумерованный список

    Но с точки зрения профессионалов это некорректно.

    Маркированные списки

    Маркированные списки

    Ненумерованные (или же маркерные) списки создаются точно так же, только вместо тега ol, пишется ul.

    В маркированных списках нет цифр или букв – только различные символы, которые называются маркерами.Маркированные списки пример

    Многоуровневый нумерованный список HTML

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

    многоуровневый нумерованный список html

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

    нумерованный список по центру html

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

    Для нумерованных указываем алфавит или тип цифр, а для остальных случаев — тип маркера.

    Варианты сортировки списков

    Если использовать специальный HTML-тег, нумерованный список может стать любым, каким вы хотите.

    Можно указать атрибут type с любым значением из таблицы. Или в классе стиля css указать list-style-type с желаемым типом сортировки.

    Варианты сортировки списков

    Перевод значений довольно простой. Хватит базовых знаний английского языка. Но даже если вы не можете перевести слова «круг», «квадрат» и т. п., то можно визуально понять, каков будет результат при указании этих значений в атрибуте type.

    Для нумерованных списков нужно использовать следующие варианты:

    • 1 — арабские цифры;
    • A — заглавные латинские буквы;
    • a — строчные латинские буквы;
    • I — заглавные римские цифры;
    • i — строчные римские цифры.

    По умолчанию всегда используется список с арабскими цифрами. То есть, если вы ничего не указали, это равносильно type=»1″.

    Помимо этого, нумерованные списки можно начинать с любой желаемой позиции. По умолчанию — вывод от 1. Но при желании можно начать хоть со ста. Для этого нужно указать атрибут start с любым значением.

    изменение начала списка в html

    Кроме этого, можно сделать вывод в обратном порядке. Для этого нужно написать reversed.

    Обратный порядок в списках

    Оформление списков

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

    Вот примеры красивых списков.

    примеры красивых списков

    Как видно из примера, можно изменять внешний вид нумерации и самих элементов.

    Создать обычный список можно вот так.

    пронумерованный список html

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

    оформление списков html

    Рассмотрим сначала вариант с круглым оформлением списка. Вернитесь к коду списка. Там указан класс rounded-list. Вот именно с этим классом нужно повозиться, чтобы сделать такую красоту. Назвать класс вы можете как хотите.

    красивый список с круглыми цифрымистиль оформления cssстиль оформления списка css

    Теперь рассмотрим квадратное оформление.

    квадратное оформления списка css

    Стили весьма похожи. Разница в том, что в первом случае происходит округление элемента посредством возможностей css.

    пример красивого оформления css

    пример красивого оформления списка css

    пример красивого квадратного оформления css

    Поддержка браузеров

    Важно понимать, что не все браузеры поддерживают все атрибуты css.

    Например, вы захотели сделать нумерованный список по центру. HTML-код будет одинаковый, но вот результат в старых браузерах может быть совсем иным.

    То же самое касается и оформления нумерации.

    Поддержка браузерами css

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

    Профессиональный верстальщик должен предвидеть и понимать, что не все пользователи используют современные компьютеры. Не у всех установлены Windows 7, 8, 10. Существует процент пользователей, кто до сих пор сидит на Windows XP и использует старые версии браузера Internet Explorer.

    Как правило, почти все современные дизайнерские улучшения элементов ими не поддерживаются. Пользователю будет казаться, что над дизайном сайта вообще не работали. Что всё съехало. Элементы наезжают друг на друга. Чтобы этого избежать, нужно просчитывать все варианты.

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

    Делайте что-то подходящее для всех или учитывайте все варианты браузеров.

    fb.ru

    1. Маркированные списки в HTML

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

    А вот так выглядит в браузере:

    Рис. 1.1. Стандартный вид маркированного ненумерованного списка HTML в браузере

    1.1 Стандартные маркеры для маркированного списка

    На изображении выше (Рис 1.1.) можно заметить кружки в начале каждого элемента меню. Это и есть маркер. По умолчанию он в браузере в виде закрашенного круга. Всего есть несколько видов маркеров в HTML: закрашенный круг, пустой круг и квадрат. Они не требуют ни CSS ни подключения сторонних изображений:

    Название маркера Значение атрибута "type" Пример списка
    Маркеры в виде круга disc
    • Земля
    • Сатурн
    • Венера
    Маркеры в виде незакрашенного круга circle
    • HTML
    • JS
    • CSS
    Маркеры в виде квадрата square
    • Лужа
    • Озеро
    • Море

    1.2 Маркер списка в виде пустого круга

    Значения атрибута вы знаете, а сейчас посмотрим как сделать маркированный список HTML в коде. Из таблицы выше мы выбрали второе значение "circle" для атрибута type и задали его нашему маркированному списку:

    Сразу смотрим как этот код будет выглядеть в браузере:

    Рис. 1.2. Вид маркера для списка в виде окружности в браузере

    1.3 Маркер списка в виде квадрата

    Посмотрим также и последний пример с квадратным маркером для HTML списка:

    Обратите внимание на маркер, он стал квадратным:

    Рис. 1.3. Вид маркера для списка в виде квадрата в браузере

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

    2. Нумерованные списки в HTML

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

    Пример нумерованного списка:

    Таким образом выглядит нумерованный список со стандартными настройками в браузере:

    Рис. 2.1. Нумерованный список в браузере со стандартными настройками

    Как и у его предшественника (маркированного списка) у него есть свои стили для вывода цифр. Обычная нумерация — это не единственный вид маркеров у нумерованного списка в HTML.

    2.1 Стандартные маркеры для нумерованного списка

    Здесь у нас есть выбор не из трех видов маркеров, а из пяти:

    Название маркера Значение атрибута "type" Пример списка
    Маркеры в виде арабских чисел 1
    • Бадминтон
    • Бейсбол
    • Бокс
    Маркеры в виде строчных латинских букв a
    • Джомолунгма
    • Чогори
    • Канченджанга
    Маркеры в виде заглавных латинских букв A
    • Summit Plummet
    • Tantrum Alley
    • Insano
    Маркеры в виде римских цифр в нижнем регистре i
    • Филиппинское море
    • Аравийское море
    • Коралловое море
    Маркеры в виде римских цифр в верхнем регистре I
    • Красный
    • Зеленый
    • Синий

    2.2 Своя нумерация в списке HTML

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

    Вот как это будет отображаться на реальном сайте:

    Рис. 2.2. Нумерация с произвольного числа в нумерованном списке

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

    Ну а сейчас перейдем к вложенным спискам HTML.

    3. Как сделать многоуровневый (вложенный) список в HTML

    Многоуровневые списки используются на сайте в построении меню. Это меню чаще всего выглядит выпадающим либо вниз (урок по выпадающему меню на CSS3), либо выпадающим влево или вправо. Такие меню позволяют хранить в себе другие элементы меню в компактном виде.

    На примере моделей автомобилей мы построим многоуровневый список в HTML:

    Обратите внимание, как выглядит многоуровневый список в браузере:

    Рис. 3.1. Пример многоуровневого списка в HTML

    Мы делали многоуровневый список с помощью маркированного (тег <ul>). Многоуровневый список с моделями Citroen появился с другими маркерами. Основной список с закрашенными маркерами, а список на 2-м уровне — с пустыми кружками. Но, как помните, с помощью атрибута "type" мы можем переопределить маркеры (лучше задавать стили для маркеров с помощью CSS).

    Но мы можем объединить многоуровневые списки с нумерованными и маркированными следующим образом:

    В примере выше у нас двойная вложенность (2 уровня). Сначала вкладывается список из двух классов тюльпанов, он у нас нумерованный. Затем в каждый из элементов нумерованного списка вкладывается маркированный список.

    Смотрим его вид в браузере:

    Рис. 3.2. Пример многоуровневого нумерованного списка в маркированный список в браузере

    4. Полезные материалы по спискам HTML

    Здесь находится информация, для которой необходимо понимание свойств CSS. Для этого рекомендую изучить следующие уроки: основы CSS. Все примеры будут сразу с исходным кодом и разбиты по вкладкам HTML (структура), CSS (стили) и Result (результат).

    4.1 Как сделать список HTML в строку

    Сделать список HTML в строку может понадобиться при создании горизонтального меню. Сделать его очень просто:

    4.2 Как сделать список HTML без значка

    За это отвечает свойство list-style-type в CSS (подробнее здесь):

    4.3 Как сделать список в HTML по центру

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

    4.4 Как сделать список в HTML с картинками

    Достаточно лишь одного свойства CSS list-style-image. Внутри url указать адрес до иконки. Хочу лишь заметить, что изображение лучше сразу подбирать маленькое, потому что от него зависит высота строки списка:

    4.5 Маркированный список HTML свой маркер

    В этом случае необходимо заранее подключить шрифтовые иконки (например, FontAwesome). Тогда можно сделать любую иконку вместо стандартного маркера:

    4.6 Как сделать список в HTML в несколько столбцов

    Чтобы сделать список в несколько столбцов мы воспользуемся свойством CSS column-count (свойство поддерживается только в следующих браузерах: IE 10+, Chrome 1.0+, Opera 11.1+, Safari 3.0+, Firefox 1.5+). Также необходимо задать высоту для списка, чтобы увидеть разбиение на несколько столбцов:

    5. Практика работы со списками

    На видео ниже вы можете увидеть всю работу со списками HTML на практике:

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

    На этом со списками заканчиваем и переходите к следующему уроку по изображениям.

    Больше практикуйтесь!

    Понравилась статья — расскажи друзьям! 🙂

    www.sitehere.ru


    You May Also Like

    About the Author: admind

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

    Ваш e-mail не будет опубликован. Обязательные поля помечены *

    Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.