Почему div растягивается правильно, а не изображение?

Я новичок в HTML/CSS, и мне любопытно, почему в приведенном ниже примере правильно растягивается div, но не изображение?

  • Изображение рассчитывается иначе, чем div?
  • Есть ли документация MDN, в которой я могу узнать больше об этом поведении?

body {
  background: #222;
  padding: 32px;
}

.card {
  background-color: white;
  padding: 32px;
  border-radius: 8px;
}

img {
  width: auto;
  margin: 0px -32px 0px -32px;
}

.gooddiv {
  width: auto;
  height: 100px;
  margin: 0px -32px 0px -32px;
  border: 2px solid red
}
<div class = "card">
  <img alt = "SG Image" src = "https://images.unsplash.com/photo-1508964942454-1a56651d54ac?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1035&q=80" />
  <div class = "gooddiv"></div>
</div>

изображение отличается от div. Это замененный элемент с внутренним соотношением

Temani Afif 19.03.2022 11:08
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
1
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для <div> параметр width: auto будет означать 100% его родительского элемента, поэтому он будет растягиваться.

Для изображения width: auto (что также используется по умолчанию, если вы вообще не определяете width) будет означать, что (если нет настройки height) изображение отображается в исходном размере и, следовательно, не растягивается и не сжимается. Если вы определите width: 100% или что-то подобное (или настройку высоты), она будет скорректирована.

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

Чтобы избежать упомянутого искажения из-за растяжения за пределы исходного размера, распространенный способ справиться с этим — использовать max-width: 100%; (а также max-height: 100%, если вы определили высоту для родителя), тем самым оставив width и height по умолчанию auto (= исходный размер). Таким образом, вы растянете изображение на полную ширину, если оно по крайней мере равно ширине исходного родителя, или отобразите его в исходном размере, если оно меньше (избегая плохого качества из-за растяжения за пределы исходного размера). В приведенном ниже фрагменте я использовал только max-width: 100%; (т.е. все остальное с настройками по умолчанию), что ограничивает ширину изображения шириной родительского элемента (минус отступы), позволяет избежать растяжения за пределы исходной ширины и автоматически регулирует высоту, сохраняя исходную высоту/ширину. соотношение. (Кстати, я удалил отрицательные поля, которые вы добавили, что не имело бы смысла в этом контексте)

Примечание. Установка width: 100%иheight: 100% является нет хорошей идеей для изображений, так как в большинстве случаев это искажает соотношение высоты и ширины изображения, делая его плохим (если только это не абстрактный графический узор, где диспропорция между высотой и шириной не имеет значения). дело).

body {
  background: #222;
  padding: 32px;
}

.card {
  background-color: white;
  padding: 32px;
  border-radius: 8px;
}

img {
  max-width: 100%;
  margin: 0;
}

.gooddiv {
  width: auto;
  height: 100px;
  margin: 0px -32px 0px -32px;
  border: 2px solid red
}
<div class = "card">
  <img alt = "SG Image" src = "https://images.unsplash.com/photo-1508964942454-1a56651d54ac?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1035&q=80" />
  <div class = "gooddiv"></div>
</div>

Кроме того, компонент карты является полноэкранным. Если вы укажете ширину img: 100%, изображение также будет полноэкранным, и оно существует на экранах шириной 2500 пикселей и более, поэтому вы можете установить максимальную ширину: 100% или контролировать ширину карты.

Umbert 19.03.2022 11:22

поэтому я установил ширину и высоту на 100%, но изображение не растягивалось, как это делал div. Читая комментарий Темани, я вижу, что это замененный элемент, поэтому кажется, что он выложен иначе, чем html, встроенный в элементы developer.mozilla.org/en-US/docs/Web/CSS/Replaced_element.

Rohit Sharma 19.03.2022 13:06

обратите внимание на дополнения к моему ответу

Johannes 19.03.2022 13:25

Другие вопросы по теме