Задать вопрос
@75db77

Как создать вторую рамку за изображением, смещенную влево и вниз?

У изображения должен быть border красного цвета. Также визуально за изображением должен быть ещё один border без background, смещенный относительно изображения влево и вниз (скриншот). Как бы вы реализовали смещенный border?

Разметка возле изображения такая:
<div class="field__item">
  <picture>
    <source ...>
    <img ...>
  </picture>
</div>


Я не могу изменять разметку, потому что она генерируется CMS.
07e7c1832cb8ff848ae0bace794653ee.png
  • Вопрос задан
  • 341 просмотр
Подписаться 2 Простой 4 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Яндекс Практикум
    Профессиональная вёрстка на HTML и CSS
    3 месяца
    Далее
  • Академия Эдюсон
    Frontend-разработчик + ИИ
    9 месяцев
    Далее
Решения вопроса 4
Ankhena
@Ankhena Куратор тега CSS
Нежно люблю верстку
Для однородного фона просто рамка + двойная тень

picture, source {
  display: contents;
}

img {
  border: 2px solid red;
  box-shadow: -10px 10px 0 -2px white, -10px 10px 0 0 red;
}

Преимущество в том, что всё задается одному элементу, прямо картинке. Нет ни сдвигов ни зависимостей от других элементов.

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

Ещё один вариант: небольшая svg и border-image.

p.s. picture и source удобно убирать с помощью display contents, чтобы не тревожится, будут у клиента эти теги или удалит и что там вообще с ними происходит. Просто делаем их "прозрачными".
Ответ написан
opium
@opium
Просто люблю качественно работать
у меня такое через ::after на враппере делается:

.field__item { position: relative; display: inline-block; z-index: 0; }
.field__item::after { content: '\; position: absolute; inset: 0; border: 2px solid red; transform: translate(-12px, 12px); z-index: -1; }
.field__item img { border: 2px solid red; display: block; }


translate(-12px, 12px) — смещение влево и вниз, подбери под свой дизайн.
Ответ написан
Fragster
@Fragster
помогло? отметь решением!
Ответ написан
Комментировать
Web6s
@Web6s
основатель IT-компании «Веб6с»
Для создания эффекта двойной рамки, где вторая рамка смещена влево и вниз относительно изображения, вы можете использовать следующий CSS, не изменяя HTML-разметку:

.field__item {
    position: relative;
    display: inline-block;   /* Чтобы размер контейнера соответствовал изображению */
}

/* Убираем лишние отступы у picture и img */
.field__item picture,
.field__item img {
    display: block;
}

/* Основная рамка изображения – красная */
.field__item img {
    border: 2px solid red;
    position: relative;
    z-index: 1;
}

/* Смещённая рамка (вторая) – псевдоэлемент */
.field__item::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    border: 2px solid red;       /* Тот же цвет, что у основной рамки */
    background: transparent;
    transform: translate(-10px, 10px);  /* Смещение влево и вниз */
    z-index: 0;
    pointer-events: none;         /* Чтобы рамка не мешала кликам по изображению */
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы