← Назад к вопросам

К чему может получить доступ псевдоэлемент

1.3 Junior🔥 241 комментариев
#HTML и CSS

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

К чему может получить доступ псевдоэлемент?

Псевдоэлементы (::before, ::after, ::first-letter, ::first-line) — это виртуальные элементы, создаваемые CSS. Они имеют свои ограничения в доступе к содержимому и свойствам.

Основные псевдоэлементы

::before и ::after:

/* Создают виртуальные элементы до и после содержимого */
p::before {
  content: "➤ "; /* Могут содержать текст или изображения */
}

p::after {
  content: " [конец]"; /* Добавляют текст после элемента */
}
<p>Текст параграфа</p>
<!-- Результат: ➤ Текст параграфа [конец] -->

::first-letter:

p::first-letter {
  font-size: 2em;
  color: red;
  float: left; /* Первая буква увеличивается и становится буквицей */
}

::first-line:

p::first-line {
  font-weight: bold;
  text-transform: uppercase; /* Первая строка текста становится заглавной */
}

К чему имеют доступ псевдоэлементы?

1. CSS свойства (большинство работают)

p::before {
  content: "Текст"; /* Обязательно для ::before и ::after */
  color: blue;           /* Цвет текста */
  font-size: 14px;       /* Размер шрифта */
  font-weight: bold;     /* Вес шрифта */
  background: yellow;    /* Фон */
  padding: 10px;         /* Внутренние отступы */
  margin: 5px;           /* Внешние отступы */
  border: 1px solid red; /* Границы */
  width: 100px;          /* Ширина */
  height: 50px;          /* Высота */
  display: block;        /* Тип отображения */
  position: absolute;    /* Позиционирование */
  transform: rotate(45deg); /* Трансформации */
  opacity: 0.8;          /* Прозрачность */
  z-index: 10;           /* Слой */
}

2. Свойства, которые НЕ работают для ::before и ::after

p::before {
  /* НЕ работают: */
  /* - float (не может быть поплавком) */
  /* - position: relative (относительное позиционирование имеет ограничения) */
  /* - vertical-align (не работает как ожидается) */
  /* - margin: auto (не центрирует автоматически) */
  /* - width: auto (не расширяется по содержимому) */
}

3. Содержимое (content свойство)

/* Текст */
p::before {
  content: "Текст";
}

/* URL изображения */
img::after {
  content: url('image.png');
}

/* Атрибут элемента */
a::after {
  content: " (" attr(href) ")"; /* Вывести URL ссылки */
}

/* Счётчик */
li::before {
  content: counter(item) ". ";
}

/* Комбинация */
p::before {
  content: "[" attr(data-label) "]"; /* Вывести data-атрибут */
}

Практические примеры

1. Увеличенная первая буква (буквица)

p::first-letter {
  font-size: 2em;
  font-weight: bold;
  float: left;
  color: #8b0000;
  line-height: 60px;
  padding-right: 8px;
}

2. Украшение ссылок

a::after {
  content: " " attr(title); /* Показать title атрибут */
  color: gray;
  font-size: 0.8em;
}
<a href="/page" title="Перейти на страницу">Ссылка</a>
<!-- Результат: Ссылка Перейти на страницу -->

3. Кавычки

q::before {
  content: open-quote; /* Открывающая кавычка */
}

q::after {
  content: close-quote; /* Закрывающая кавычка */
}
<q>Цитата</q>
<!-- Результат: "Цитата" -->

4. Стрелки для списков

li::before {
  content: "→ ";
  color: blue;
  font-weight: bold;
  margin-right: 10px;
}

5. Счётчики

ol {
  list-style: none; /* Убрать стандартную нумерацию */
  counter-reset: item; /* Начать считать с 0 */
}

li {
  counter-increment: item; /* Увеличить счётчик */
}

li::before {
  content: counter(item) ". "; /* Вывести номер */
  font-weight: bold;
}

6. Разделители

li::after {
  content: " | "; /* Добавить разделитель */
}

li:last-child::after {
  content: ""; /* Убрать последний разделитель */
}

Что НЕ могут делать псевдоэлементы?

// НЕ видны в DOM
const elements = document.querySelectorAll('p::before');
console.log(elements.length); // 0 — псевдоэлементы не в DOM

// НЕ могут быть выбраны JavaScript
const before = document.querySelector('p::before');
console.log(before); // null

// НЕ имеют события
// Клик на псевдоэлемент срабатывает на родительском элементе
p::before {
  cursor: pointer; /* Можно изменить курсор */
}

Ограничения доступа

/* Некоторые свойства не работают для ::first-letter и ::first-line */
p::first-letter {
  background: yellow;     /* Работает */
  color: red;             /* Работает */
  font-size: 2em;         /* Работает */
  margin: 0 5px;          /* НЕ работает полностью */
  padding: 0 5px;         /* Работает */
  border: 1px solid;      /* НЕ работает для ::first-letter */
  float: left;            /* Работает */
  clear: none;            /* НЕ работает */
}

p::first-line {
  color: blue;            /* Работает */
  font-weight: bold;      /* Работает */
  text-transform: uppercase; /* Работает */
  letter-spacing: 2px;    /* Работает */
  word-spacing: 10px;     /* Работает */
  line-height: 1.5;       /* Работает */
}

Ключевые моменты

  • Псевдоэлементы создаются CSS, НЕ видны в DOM
  • ::before и ::after требуют свойства content
  • Большинство CSS свойств работают для псевдоэлементов
  • Нельзя выбрать псевдоэлемент JavaScript (он не в DOM)
  • ::first-letter и ::first-line имеют собственные ограничения
  • Полезны для украшения, добавления символов, счётчиков