Почему img для :before не работает как надо?

Ссылка скопирована
27 апреля 2026 1 ответ

Мне надо, чтобы расположение было как на 1м скрине. То есть есть две строки текста, обёрнутые в div с классом .name и для этого .name я псевдоэлементом ставлю изображение через бэкграунд.
По началу изображение было вообще наверху, но потом подсказали, что это из-за того,что мой 1й p блочный, поэтому он не пускает картинку к себе. Ну я ему inline-block поставил, и сейчас ситуация как на 3м скрине
Пробовал ставить inline-block и для 2го , много чего пробовал, но что-то не помогло.
Подскажите пожалуйста, что не так(ну и объясните почему оно так работает)
*Знаю, что через скрины здесь код не показывают, но я сейчас не у компухтера.

Почему img для :before не работает как надо?

Почему img для :before не работает как надо?

Почему img для :before не работает как надо?

Дополнительно:

Это фото реального человека, значит, контент, img, а никакой не псевдо.

Абсолюты тут не нужны вообще.
Помогут флексы, но тогда имя и должность нужно будет обернуть в div.
Либо, ещё лучше, гриды. 2х2
Вообще, поможет даже банальный float :) Только аккуратно. Но лучше гриды.

  • Ankhena, только на гридах у меня получилось на две строки больше в css =)
    <div class="person">   <img class="person__photo" src="">   <div class="person__name">Имя фамилия</div>   <div class="person__position">Должность</div> </div>

    <div class="person"> <img class="person__photo" src=""> <div class="person__name">Имя фамилия</div> <div class="person__position">Должность</div> </div>

    .person {   display: grid;   grid-template-columns: 5rem 1fr;   align-items: center;   gap: 0.25rem 1rem; } .person__photo {   grid-row: span 2;   align-self: center;   width: 5rem;   height: 5rem;   border-radius: 50%; } .person__name {   align-self: end; } .person__position {   align-self: start; }

    .person { display: grid; grid-template-columns: 5rem 1fr; align-items: center; gap: 0.25rem 1rem; } .person__photo { grid-row: span 2; align-self: center; width: 5rem; height: 5rem; border-radius: 50%; } .person__name { align-self: end; } .person__position { align-self: start; }

  • Сергей delphinpro, эта строчка align-items: center;, с виду, кажется лишней, если мы каждому пишем self?

    А в варианте с флексами можно и грид убрать (хорошая фраза) и заменить на margin, будет еще меньше строк :)
    gap мне, конечно, более симпатичен.

  • Это изображение контентное, а не оформительское. На реальном сайте, его очевидно будут загружать через админку. Его следует ставить через тег img

    <div class="person">   <img class="person__photo" src="">   <div class="person__wrapper">     <div class="person__name">Имя фамилия</div>     <div class="person__position">Должность</div>   </div> </div>

    <div class="person"> <img class="person__photo" src=""> <div class="person__wrapper"> <div class="person__name">Имя фамилия</div> <div class="person__position">Должность</div> </div> </div>

    .person {   display: flex;   align-items: center;   gap: 1rem; } .person__photo {   width: 50px;   height: 50px;   border-radius: 50%;   flex-shrink: 0; } .person__wrapper {   display: grid;   gap: 0.25rem; } .person__name {} .person__position {}

    .person { display: flex; align-items: center; gap: 1rem; } .person__photo { width: 50px; height: 50px; border-radius: 50%; flex-shrink: 0; } .person__wrapper { display: grid; gap: 0.25rem; } .person__name {} .person__position {}

    Ответы:

    Добавьте к блоку .name position: relative и отступ от края на ширину аватарки и расстояния до имени. А к псевдоэлементу ::before position: absolute и сместите влево на значения отступа. Таким образом, через свойства top left сможете спозиционировать как вам угодно относительно имени. Пример ниже:
    snippet

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Виктор Sys Ответ

    Проблема с использованием свойства `content` с изображением в псевдоэлементе `:before` возникает из-за того, что в CSS контент в псевдоэлементах не поддерживает свойство `url()` для загрузки изображений. Вместо этого, нужно использовать специальный код Юникода для вставки изображения.

    Для того чтобы добавить изображение в псевдоэлемент `:before`, можно воспользоваться следующим способом:

    ```html

    .element:before {
    content: "\1F4F7"; /* Unicode символ для изображения */
    font-size: 30px; /* Размер изображения */
    }

    ```

    В данном примере мы используем Unicode-символ `"\1F4F7"`, который представляет изображение камеры. Вы можете использовать другие Unicode-символы для различных изображений.

    Если вы все же хотите использовать изображение в формате `.png`, `.jpg`, `.svg` и т.д., то можно воспользоваться другим способом, загружая изображение как фон в псевдоэлементе:

    ```html

    .element:before {
    content: "";
    display: block;
    width: 100px;
    height: 100px;
    background: url('path/to/image.png') no-repeat;
    }

    ```

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

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

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

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

    Вам также может быть интересно