Использование псевдоэлемента '::marker' для создания заголовков в стиле Markdown

Это работает,

h1::before{content:'# '}
h2::before{content:'## '}
<h1>Level-1 heading</h1>
<h2>Level-2 heading</h2>

но у меня такое ощущение, что здесь правильнее было бы использовать ::marker, а у меня это почему-то не работает. Почему это?

h1,h2,h3,h4,h5,h6{display:list-item}
h1::marker{content: '# '}
h2::marker{content: '## '}
<h1>Level-1 heading</h1>
<h2>Level-1 heading</h2>
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас нет элементов списка, у вас есть заголовки ref: «выбирает маркер элемента списка» здесь https://developer.mozilla.org/en-US/docs/Web/CSS/::marker

Чтобы подробнее объяснить, почему вам нужен контейнер для этих элементов, я дал им контейнер со стилем UL по умолчанию;

.list-container {
  display: block;
  list-style: disc outside none;
  margin: 1em 0;
  padding: 0 0 0 40px;
}

h1,
h2,
h3,
h4,
h5,
h6 {
  display: list-item;
}

h1::marker {
  content: '# ';
}

h2::marker {
  content: '## ';
}
<div class = "list-container">
  <h1>Level-1 heading</h1>
  <h2>Level-1 heading</h2>
</div>

Но затем: «Это работает с любым элементом или псевдоэлементом, предназначенным для отображения: list-item, например с элементами <li> и <summary>». Поэтому я ожидал, что ::marker будет работать и для заголовков, потому что я добавил к ним display: list-item.

user22996855 02.06.2024 17:59

Это работает, но проблема в контейнере. Я добавил пример, чтобы CSS контейнера работал так, как вы ожидали.

Mark Schultheiss 02.06.2024 18:04

Большое спасибо за обновление ответа, Марк. Кажется, единственный вариант создать такие заголовки без изменения HTML — это использовать ::before, верно?

user22996855 02.06.2024 18:05

@ jsx97 - Нет, вы можете использовать ::marker без контейнера. Основная проблема — оставить место слева для маркера. Вы можете использовать margin-inline-start: 40px; в заголовке, чтобы освободить место (или margin-left, если хотите), или использовать list-style-position: inside, чтобы вам не нужно было покидать пространство.

Alohci 02.06.2024 19:25

@Alohci Справедливый комментарий относительно маржи. Я часто вижу, как люди используют LI, а затем работают над удалением этого интервала и стиля (маркеров и т. д. для маркера), когда элемент без них, такой как span или div, может быть более подходящим.

Mark Schultheiss 03.06.2024 13:12

Другие вопросы по теме