Если картинка отвалится или окажется неправильного размера — сломаются блоки. Как быть?

Руст Кулматов

К сожалению, в ЦСС до сих пор нет нормального способа это сделать. Если хотя бы одна сторона элемента img резиновая, при загрузке раскладка будет прыгать.

Чтобы побороть это, можно воспользоваться старым хаком, зафиксировав место под картинку с помощью padding-bottom и разместив само изображение внутри абсолютом.

<!-- index. html -->
<div>
  <img src="demo.png" />
</div>
/* style.css */
.box {
  position: relative;
  padding-bottom: 75%;
  /* Размеры изображения 400x300.
  300 / 400 = 0.75 → 75% */
}

img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
Padding-bottom считается относительно ширины родителя, поэтому с помощью него можно задать пропорцию контейнера

Применим этот способ для вёрстки картинки с текстом:

<!-- index.html -->
<div>
  <div>
    <div>
      <img src="demo.png" />
    </div>
    <div>
      Остроумная подпись к изображению
    </div>
  </div>
  <div>
    Пласт, так или иначе, неравномерен. 
    Показательный пример – детройтское техно
    начинает соноропериод. Ощущение
    мономерности ритмического движения
    возникает, как правило, в условиях
    темповой стабильности, тем не менее
    процессуальное изменение ненаблюдаемо.
  </div>
</div>
/* style.css */
.row {
  display: flex;
}

.boxWrapper {
  width: 30%;
  margin-right: 1em;
}

.text {
  flex: 1
}

.box {
  border: 1px solid #000;
}
Без обёртки padding-bottom посчитатется от всей ширины родителя и пропорции сломаются

Пласт, так или иначе, неравномерен. Показательный пример – детройтское техно начинает соноропериод. Ощущение мономерности ритмического движения возникает, как правило, в условиях темповой стабильности, тем не менее процессуальное изменение ненаблюдаемо.

Теперь, если картинка по какой-то причине не загрузится, раскладка не сломается:

Пласт, так или иначе, неравномерен. Показательный пример – детройтское техно начинает соноропериод. Ощущение мономерности ритмического движения возникает, как правило, в условиях темповой стабильности, тем не менее процессуальное изменение ненаблюдаемо.

Картинка загрузилась, всё в порядке

Пласт, так или иначе, неравномерен. Показательный пример – детройтское техно начинает соноропериод. Ощущение мономерности ритмического движения возникает, как правило, в условиях темповой стабильности, тем не менее процессуальное изменение ненаблюдаемо.

Картинка не загрузилась, всё на своих местах

Если изображение выполняет функцию фона, то лучше и вставить его фоном, растянув нужным образом с помощью свойства

background-size. В этом случае изображение будет подстраиваться под заданные текстом размеры и не будет влиять на раскладку:

<!-- index. html -->
<div>
  Пласт, так или иначе, неравномерен.
  Показательный пример – детройтское техно
  начинает соноропериод. Ощущение
  мономерности ритмического движения
  возникает, как правило, в условиях
  темповой стабильности, тем не менее
  процессуальное изменение ненаблюдаемо.
</div>

<div>
  Пласт, так или иначе, неравномерен.
  Показательный пример – детройтское техно
  начинает соноропериод. Ощущение
  мономерности ритмического движения
  возникает, как правило, в условиях
  темповой стабильности, тем не менее
  процессуальное изменение ненаблюдаемо.
</div>
/* style.css */
.container {
  background: url(demo.png) no-repeat center;
  height: 300px;
  border: 1px solid #000;
}

.container.with__cover {
  background-size: cover;
  /* Изображение растянется под обрез
  с сохранением пропорций */
}

.
container.with__contain { background-size: contain; /* Изображение впишется в контейнер */ }

Пласт, так или иначе, неравномерен. Показательный пример – детройтское техно начинает соноропериод. Ощущение мономерности ритмического движения возникает, как правило, в условиях темповой стабильности, тем не менее процессуальное изменение ненаблюдаемо.

Изображение растянуто по обрез

Пласт, так или иначе, неравномерен. Показательный пример – детройтское техно начинает соноропериод. Ощущение мономерности ритмического движения возникает, как правило, в условиях темповой стабильности, тем не менее процессуальное изменение ненаблюдаемо.

Изображение вписано в прямоугольник с текстом

P. S. Это был совет о веб-разработке. Хотите знать всё о коде, тестах, фронтенд-разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.

Как добавить фоновое изображение с помощью Bootstrap

Алли Мухаммед

Бесплатный курс собеседования по проектированию систем

Многие кандидаты отклоняются или понижаются в рейтинге из-за плохой успеваемости на собеседовании по проектированию систем. Выделитесь на собеседованиях по проектированию систем и получите работу в 2023 году благодаря этому популярному бесплатному курсу.

Свойство background image задает изображение, используемое в качестве фона элемента. Фоновое изображение — отличный способ добавить индивидуальности и стиля веб-страницам. С помощью Bootstrap мы можем легко добавить фоновое изображение, которое меняется в зависимости от ширины страницы. Крайне практично использовать Bootstrap в качестве библиотеки.

В этом ответе вы узнаете, как добавить фоновое изображение с помощью JavaScript.

Пример кода 1

Расшифровка кода

  • Строка 7:

    Создан родительский элемент has-bg-img .

  • Строка 8: Здесь компонент bg-cover добавляется к классу bg-img , оформленному фоновым изображением.

  • Строки 9–10: Эти строки содержат основной текст страницы с компонентом Bootstrap под названием текстовый центр .

Фоновое изображение в приведенном выше примере автоматически адаптирует область элемента, используя background-size: cover .

Режим наложения «Умножение»

Цвет фона умножается на элемент и заменяется, в результате чего конечный цвет становится таким же темным, как и фон. Чтобы использовать режим наложения Multiple, добавьте класс .bg-blend-multiply к изображению .has-bg-img .

Пример кода 2

Расшифровка кода

  • Строка 6: Класс has-bg-img создается с фиолетовым цветом фона и смешивается с многокомпонентным компонентом Bootstrap.

  • Строка 7: Класс bg-img имеет фоновое изображение и цвет, дополненный шириной и высотой.

  • Строка 8: Эта строка содержит основной текст страницы в HTML h5 текст.

Как видно из приведенного выше кода, смесь компонентов Bootstrap добавляется к классу . has-bg-img , благодаря чему цвет становится таким же темным, как фон.

Режим наложения наложения

Режим наложения умножает и экранирует содержимое в зависимости от цвета фона. Добавьте класс .bg-blend-overlay к классу .has-bg-img , чтобы использовать режим наложения с наложением.

Пример кода 3

Расшифровка кода

  • Строка 5: Класс has-bg-img создается с фиолетовым цветом фона и смешивается с компонентом наложения Bootstrap.

  • Строка 6: Класс bg-img имеет фоновое изображение и цвет, дополненный шириной и высотой.

  • Строка 7: Эта строка содержит основной текст страницы в формате HTML h5 .

В приведенном выше примере компонент Bootstrap blend-overlay добавляется к классу has-bg-img , в результате чего содержимое зависит от уже определенного цвета фона

bg-primary .

Режим смешивания экрана

Режим смешивания экрана также умножает фон, а затем содержимое обрабатывает результат, тем самым делая результирующее содержимое ярче, чем цвет фона. Чтобы использовать режим наложения экрана, добавьте .bg-blend-screen class to .has-bg-img .

Пример кода 4

Расшифровка кода

  • Строка 5: Класс has-bg-img создается с фиолетовым цветом фона и смешивается с компонентом смешивания экрана Bootstrap.

  • Строка 6: Здесь класс bg-img оформлен фоновым изображением и цветом.

  • Строка 7: Эта строка содержит основной текст страницы в формате HTML h5 .

В приведенном выше примере показан режим наложения экрана , добавленный к классу .has-bg-img , делающий содержимое ярче, чем уже определенный цвет фона bg-secondary .

Связанные теги

Bootstrap

Фоновое изображение

Умножение

Overlay

Экран

Вклад

Alli Muhammad

Лицензия: Creative Commons-Attribution NonCommercial-ShareAlike 4.0 (CC-BY-NC-SA 4.0)

Фоновые изображения CSS и специальные возможности

Последнее обновление: 14 июня 2011 г. и вопросы их доступности. Кажется, нет четкого решения для всех браузеров и обсуждения всех текущих методов в одном месте.

Проблема

Фоновые изображения CSS часто используются вместо встроенных изображений, поскольку их можно использовать в качестве карт спрайтов CSS. Карта спрайтов — это способ использования одного изображения и отображения только небольшой части этого изображения в виде определенного значка или элемента страницы, например вкладки страницы. Поскольку отправляется только одно изображение, оно выполняется быстрее, чем множество небольших изображений, и может повысить производительность страницы.

Основная проблема с недекоративными фоновыми изображениями CSS заключается в том, что при отключении изображений или включении режима высокой контрастности (например, в ОС Windows) фоновые изображения исчезают. Если фоновое изображение либо содержит текст, как в случае вкладок страниц, либо содержит осмысленные изображения значков, то пользователи режима высокой контрастности и те, у кого нет изображений, не увидят этот контент. Хотя это может повлиять только на пользователей программ чтения с экрана, для пользователей программ чтения с экрана это проще решить, используя атрибут title в ссылках на изображения и текст за пределами экрана внутри контейнеров, содержащих фоновые изображения.

Сравнение со встроенными изображениями

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

Требования

Для изображений текста, для которых часто используется этот метод, существует четкое требование WCAG 2 уровня AA не использовать изображения текста, когда текст может быть отображен технологической платформой. Для веб-приложений почти всегда можно создать текст, за исключением шрифтов, которых может не быть в пользовательских системах. В этих случаях можно использовать технику стиля Cufon. Проблема все еще остается для изображений, которые не являются текстовыми, но имеют смысл, и проблемы по-прежнему относятся к другим требованиям доступности, таким как Раздел 508.

Решения

Невозможно просто скрыть текст за чем-либо, так как фоновое изображение CSS является фоновым изображением, и, таким образом, никакая настройка его непрозрачности не приведет к тому, что текст в элементе, который его содержит, будет скрыт. Возможны несколько концептуальных решений.

Не использовать фоновые изображения

Просто заменить недекоративный фон CSS стандартными встроенными изображениями. Это решение не решает проблему производительности, но предоставляет доступное решение и определяет, сколько сайтов было отрендерено за последние 15 лет.

Позиционирование частей встроенного изображения

Не используйте фоновые изображения — используйте встроенные изображения, но используйте CSS для размещения только той части изображения, которую вы хотите видеть на нужных элементах. В основном это включает в себя создание встроенной карты спрайтов изображения. Информацию об этой технике можно найти в статье TJK Design CSS Sprite.

Использовать до или после псевдоэлементов

Для отображения изображений можно использовать псевдоэлементы. Этот метод отлично подходит для изображений, чтобы они оставались на экране, но не поддерживается некоторыми браузерами, в основном Internet Explorer 7. Информацию об этом методе можно найти в блоге Paciello Group. Кроме того, псевдоэлементы не могут быть выбраны.

Использование холста HTML 5

Элемент холста можно использовать для отображения изображения и размещения холста поверх текста внутри элемента. Это метод, который Cufon использует, когда поддерживается HTML 5. В противном случае Cufon использует VML для отображения пользовательских шрифтов. Cufon разбивает каждое слово на отдельный элемент span, и, таким образом, одним из побочных эффектов использования Cufon является то, что текст может быть разбит на части при чтении с помощью программы чтения с экрана.