Почему псевдоэлемент не отображается на изображении?

Как правильно оформить код изображения и его стили, чтобы добиться требуемого результата, согласно следующему примеру? 
  • 3 октября 2024 г. 7:04
Ответы на вопрос 3
Если псевдоэлемент не отображается на изображении, это может быть связано с несколькими причинами. Чтобы помочь вам правильно оформить код изображения и его стили, давайте рассмотрим несколько основных моментов.

### Основные моменты:

1. **Псевдоэлементы (например, `::before`, `::after`) создаются на элементах, которые содержат текст или другие дочерние элементы.** Если ваш элемент — это изображение (например, `<img>`), то к нему нельзя применить псевдоэлементы напрямую. Вместо этого вам нужно обернуть изображение в блок (например, `div`) и применять стили к этому блоку.

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

### Пример кода

Предположим, мы хотим добавить стиль с использованием псевдоэлемента `::after` для изображения.

```html
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Пример</title>
    <style>
        .image-container {
            position: relative; /* Устанавливаем контекст для абсолютного позиционирования */
            display: inline-block; /* Чтобы размеры контейнера соответствовали изображениям */
        }

        .image-container img {
            display: block; /* Убираем пробелы под изображением */
            width: 100%; /* Или любое другое значение */
            height: auto; /* Сохраним пропорции изображения */
        }

        .image-container::after {
            content: "Текст сверху изображения"; /* Текст, который вы хотите отобразить */
            position: absolute; /* Абсолютное позиционирование относительно родительского элемента */
            top: 10px; /* Вертикальное смещение */
            left: 10px; /* Горизонтальное смещение */
            color: white; /* Цвет текста */
            background-color: rgba(0, 0, 0, 0.5); /* Прозрачный фон для лучшей читаемости */
            padding: 5px; /* Отступы для текста */
        }
    </style>
</head>
<body>
    <div class="image-container">
        <img src="your-image.jpg" alt="Описание изображения">
    </div>
</body>
</html>
```

### Объяснение:

- **`image-container`**: Мы используем контейнер для изображения, чтобы применять к нему псевдоэлемент.
- **`position: relative;`**: Для контейнера, чтобы псевдоэлемент мог быть позиционирован относительно него.
- **`img`**: Стили для изображения, чтобы оно выглядело корректно, без нежелательных отступов.
- **`::after`**: Псевдоэлемент, который создается после контента контейнера и отображает текст.

Такой подход должен помочь вам правильно использовать псевдоэлементы с изображениями. Вы можете изменять стили в зависимости от ваших потребностей.
У замещаемых элементов (img, video, и ещё нескольких) не может быть псевдоэлементов ::before и ::after 

https://developer.mozilla.org/ru/docs/Web/CSS/::after

Используйте обёртку.
:before и :after добавляет контент к содержимому элемента, а у img его нет. 
Решение тут одно завернуть img например в div и к нему уже применять псевдоэлементы.
Похожие вопросы