#html
#HTML
Вопрос:
У меня есть вариант использования, когда я автоматически генерирую HTML из произвольного ввода, что может привести к списку, который пропускает уровень, например:
<!DOCTYPE html>
<html lang=en>
<head>
<title>Skipping a level in a list</title>
</head>
<body>
<ul>
<li>Valid HTML
<ul>
<li>
<ul>
<li>But displays an awkward extra marker</li>
</ul>
</li>
</ul>
</li>
<li>Invalid HTML
<ul>
<ul>
<li>But no extra marker, looks good</li>
</ul>
</ul>
</li>
</ul>
</body>
</html>
Как описано там, у меня может быть либо неудобно выглядящий, но допустимый HTML, либо более привлекательный, но недопустимый HTML. Очевидно, что я предпочел бы иметь красивый и корректный HTML.
Могу ли я что-нибудь с этим сделать? Имейте в виду, что я также хочу поддерживать структуру, подобную этой:
- Lorem
- Ipsum
-Dolor
Комментарии:
1. Существует ли серверный язык, генерирующий HTML, такой как PHP?
2. Честно говоря, для меня это не имеет смысла: почему это должно быть вложено на два уровня глубже без промежуточного родителя / ссылки?
3. Это простой случай плохого генератора. Проблему можно было бы тривиально решить, не отображая пропущенный уровень, что является заданием JS, а не проблемой HTML. Вы также могли бы справиться с этим с помощью CSS, но вам нужно было бы добавить класс к маркеру, который вы хотите скрыть.
4. @JohnVandivier, отсутствие рендеринга пропущенного уровня привело бы к тому, что пропущенный уровень был бы
Lorem
на том же уровне, что иDolor
, что было бы неправильно. Хотя скрытие пропущенного, отмеченного с помощью CSS, кажется возможным.
Ответ №1:
Вы можете использовать CSS, чтобы пропустить второй или любой другой уровень.
Лучше всего использовать класс css, зависит от вашего варианта использования.
Например:
.item-level-not-visible{
list-style-type: none;
}
ul ul{ /*skip second level*/
list-style-type: none;
}
ul ul ul{
list-style-type: square;
}
<!DOCTYPE html>
<html lang=en>
<head>
<title>Skipping a level in a list</title>
</head>
<body>
<ul>
<li>Valid HTML
<ul>
<li>
<ul>
<li>But displays an awkward extra marker</li>
</ul>
</li>
</ul>
</li>
<li>Invalid HTML
<ul>
<ul>
<li>But no extra marker, looks good</li>
</ul>
</ul>
</li>
</ul>
</body>
</html>
Комментарии:
1. Проголосовано «Против», потому что CSS — правильный способ сделать это, но обратите внимание, что классы предпочтительнее правил на основе элементов. Например, если вы добавите еще один уровень глубже, вы заметите, что проблема возвращается.
Ответ №2:
Единственный известный мне способ — это допустимый метод, который вы использовали. Вы могли бы сделать что-то подобное, но я не уверен, какой метод написания был бы предпочтительнее другими разработчиками:
<ul>
<li><ul>
<li>List item</li>
</ul></li>
</ul>
или
<ul>
<li><ul><li>List item</li></ul></li>
</ul>
Комментарии:
1. Ах, извините, я имел в виду не неудобный HTML-код, а результат. Пожалуйста, взгляните на отображаемый результат, там есть дополнительный маркер.
2. Да, я видел дополнительный маркер и никогда не знал, что такое может произойти. Я видел, что в другом ответе было хорошее объяснение того, как это исправить. Спасибо за ваш вопрос! Я нашел это чем-то полезным и интересным для ознакомления.