Css img сохранить пропорции: Пропорции для img — dr.Brain

Пропорции для img — dr.Brain

В этом очень небольшом обзоре мы изучим, как установить соотношение сторон (пропорции) для изображения, размещаемого на HTML-странице. Для чего это нужно? К примеру, полученные знания будут полезны, если возникает необходимость уместить картинки различных размеров и пропорций в квадратный блок (или любой другой блок с четко определенными размерами и соотношением сторон), не искажая изображения.

Следует понимать, что в данном случае мы будем манипулировать CSS-свойствами, ни одно изображении не пострадает и сохранит свое первозданное состояние.

Содержание


Изображение фиксированного размера

Если на страницу нужно вывести картинку заранее определенных размеров, можно воспользоваться атрибутами width и height.

Так как мы не знаем размеры и пропорции исходного изображения, применим CSS-свойство object-fit. Таким образом, мы сможем быть уверены, что картинка не деформируется.

HTML:

<img src="/path/to/image. jpeg" alt="">

CSS:

img {
    object-fit: cover;
}

Результат можно увидеть на нижеприведенной иллюстрации. Заметьте: исходное изображение имеет большую ширину, но оно не подверглось искажениям, вместо этого оно “обрезано” по центру:

object-fit: cover

Свойство object-fit принимает значения fill, contain, cover, none, scale-down. Подробно информацию можно изучить на сайте MDN.

Изображение нефиксированного размера

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

HTML:

<div>
    <img src="/media/desk.jpg" alt=""/>
</div>

CSS:

/* Position child elements relative to this element */
.aspect-ratio-box {
    position: relative;
}
/* Create a pseudo element that uses padding-bottom to take up space */
. aspect-ratio-box::after {
    display: block;
    content: '';
    /* 16:9 aspect ratio */
    padding-bottom: 56.25%;
}
/* Image is positioned absolutely relative to the parent element */
.aspect-ratio-box img {
    /* Image should match parent box size */
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
}

Приблизительно так будет выглядеть результат при соотношении сторон 16:9:

16:9

Свойство padding-bottom определяет высоту родительского контейнера, выраженную в процентах от его ширины. Например, при ширине блока 400px результирующая высота составит 56,25% от 400px, то есть около 225px.

Для того, чтобы определить нужное нам значение padding-bottom необходимо разделить высоту на ширину.

Например, при соотношении сторон 16:9, арифмитические манипуляции будут выглядеть так:

9 / 16 = 0.5625

Выразим результ в процентах (умножим полученное число на 100):

0.5625 * 100 = 56. 25

Результат: 56.25%

Вот и все.

Заключение

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

Полезно прочитать

  1. Как управлять размерами изображения с помощью CSS?
  2. CSS. Магия отступов

Изменение размеров в CSS | MDN

  • Назад
  • Обзор: Building blocks
  • Далее

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

Необходимые условия:Базовая компьютерная грамотность, Установка базового ПО, базовые знания работы с файлами, основы HTML (Введение в HTML), и общее представление о том, как работает CSS (Введение в CSS. )
Цель:Изучить различные способы задания размеров объектов в CSS.

Элементы HTML имеют размеры по умолчанию, заданные до того, как на них повлияет какое-либо правило CSS. Простой пример — изображение. Изображение имеет ширину и высоту, определенные в файле изображения. Этот размер называется —

внутренний размер, он исходит из самого изображения.

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

С другой стороны, пустой <div> не имеет собственного размера. Если вы добавите <div> в свой HTML-код без содержимого, а затем установите для него рамку, как мы это делали с изображением, вы увидите линию на странице. Это схлопнувшиеся границы элемента — содержимое, которое могло бы удерживать ее в открытом состоянии, отсутствует. В нашем примере ниже эта граница растягивается на всю ширину контейнера, потому что это элемент блочный, поведение которого должно быть вам знакомо. У него нет высоты, потому что нет содержимого.

В приведенном выше примере попробуйте добавить текст внутри пустого элемента. Этот текст теперь становится охваченным границами, потому что высота элемента определяется содержимым. Следовательно, размер этого <div> устанавливается размером содержимого. Как и в предыдущем примере, этот размер является внутренним размером — размер элемента определяется размером его содержимого.

Конечно, мы можем задать элементам нашей страницы определенный размер. Размер, который присваивается элементу (содержимое, которого затем должно соответствовать этому размеру), называется внешним размером. Возьмите наш <div> из примера выше и установите ему специальные значения width и height и теперь он будет иметь эти размеры, независимо от того, какого размера содержимое в него помещается.

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

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

Использование процентного соотношения

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

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

Margins и paddings в процентах

Если вы установите margins и padding в процентах, вы можете заметить странное поведение. В приведенном ниже примере у нас есть блок. Мы присвоили внутреннему блоку margin 10% и padding 10%. Padding и margin сверху и снизу имеют тот же размер, что и margins слева и справа.

Например, вы можете ожидать, что процентное значение верхнего и нижнего margins будет в процентах от высоты элемента, а процентное левое и правое margins — в процентах от ширины элемента. Тем не менее, это не так!

При использовании margins и padding, заданных в процентах, значение рассчитывается на основе inline размера блока — следовательно, ширины при работе с горизонтальным языком. В нашем примере все поля и отступы составляют 10% width. Это означает, что вы будете иметь margins и padding одинакового размера по всему полю. Этот факт стоит запомнить, если вы действительно пользуетесь процентами.

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

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

Это очень полезно при работе с переменным объемом контента, избегая при этом переполнения.

Часто max-width применяют для уменьшения масштаба изображений, если недостаточно места для их отображения.

Например, если бы вы установили width: 100% для изображения, а его внутренняя ширина была меньше, чем его контейнер, изображение было бы вынуждено растягиваться и становиться больше, в результате чего оно выглядело бы пикселизированным.

Если бы вы вместо этого применили max-width: 100%

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

В приведенном ниже примере мы использовали одно и то же изображение трижды. Первому изображению было задано width: 100% и оно находится в контейнере, который больше его ширины, поэтому он растягивается до ширины контейнера. Второму изображению задано max-width: 100%, изображение достигло 100% своей ширины не растягивается, чтобы заполнить контейнер. Третье поле снова содержит то же изображение, также с max-width: 100% в этом случае вы можете увидеть, как он уменьшилось, чтобы поместиться в контейнер.

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

Примечание: Узнайте больше о методах создания адаптивных изображений.

Вьюпо́рт — это видимая область вашей страницы в браузере, который вы используете для просмотра сайта. В CSS у нас есть единицы измерения, которые относятся к размеру вьюпорта — vw единицы ширины вьюпорта и vh высоты вьюпорта. Используя эти единицы измерения, вы можете изменять размер чего-либо относительно вьюпорта пользователя.

1vh равен 1% от высоты вьюпорта и 1vw равен 1% ширины вьюпорта. Вы можете использовать эти единицы измерения для размеров блоков, а также текста. В приведенном ниже примере у нас есть блок размером 20vh и 20vw. В блоке есть буква A, которой присвоено значение font-size 10vh.

Если вы измените величину vh и vw — это изменит размер блока или шрифт; изменение размера вьюпорта также изменит их размеры, поскольку они имеют размер заданный относительно вьюпорта. Чтобы увидеть изменение примера при изменении размера вьюпорта, вам нужно будет загрузить пример в новое окно браузера, размер которого можно изменить (поскольку встроенное приложение <iframe>, содержащее показанный выше пример, является его окном просмотра). Откройте пример, измените размер окна браузера и посмотрите, что происходит с размером поля и текста.

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

В этой статье мы рассмотрели многое, но можете ли вы вспомнить самую важную информацию? Вы можете найти дополнительные тесты, чтобы убедиться, что вы сохранили эту информацию, прежде чем двигаться дальше — см. Проверка своих навыков: задание размеров (en-US).

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

  • Назад
  • Обзор: Building blocks
  • Далее
  1. Каскад и наследование
  2. Селекторы CSS
    • Селекторы типа, класса и ID
    • Селекторы атрибута
    • Псевдоклассы и псевдоэлементы
    • Комбинаторы
  3. Блочная модель(The box model)
  4. Фон и границы
  5. Обработка разных направлений текста
  6. Переполнение содержимого
  7. Значения и единицы измерения
  8. Размеры в CSS
  9. Элементы изображений, форм и медиа-элементы
  10. Стилизация таблиц
  11. Отладка CSS
  12. Организация вашей CSS

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

Want to get more involved? Learn

how to contribute.

This page was last modified on by MDN contributors.

html — заставить изображение соответствовать размеру и сохранить соотношение сторон

Задавать вопрос

спросил

Изменено 4 года, 5 месяцев назад

Просмотрено 70 тысяч раз

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

 изображение {
   максимальная высота: 200 пикселей;
   ширина:100%;
}
 

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

Любая идея о том, как я могу добиться этого с помощью CSS? или джаваскрипт?

  • HTML
  • CSS

0

Вы можете попробовать CSS3 object-fit и увидеть поддержку браузера таблицы .

CSS3 object-fit / object-position Метод определения того, как объект (изображение или видео) должен помещаться внутри его коробка. параметры объектной подгонки включают «содержать» (подгонка в соответствии с аспектом соотношение), «заливка» (растягивает объект до заполнения) и «обложка» (переполняет поле но сохраняет соотношение), где положение объекта позволяет объекту быть перемещается, как это делает background-image.

JSFIDDLE ДЕМО

 .контейнер {
  ширина: 200 пикселей; /*любого размера*/
  высота: 200 пикселей; /*любого размера*/
}

.object-fit-cover {
  ширина: 100%;
  высота: 100%;
  объект подходит: обложка; /*магия*/
} 
 <дел>
  

Связанная информация:

  • Изучение соответствия объекта ★ Взломы Mozilla

  • Polyfill для свойства соответствия объекту CSS

0

Вы можете добиться этого, используя свойства css flex. См. приведенный ниже код

 .img-container {
  ширина: 150 пикселей;
  высота: 150 пикселей;
  граница: 2 пикселя сплошного красного цвета;
  выравнивание содержимого: по центру;
  дисплей: гибкий;
  flex-направление: строка;
  переполнение: скрыто;
  
}
.img-контейнер .img-to-fit {
  гибкий: 1;
  высота: 100%;
} 
 <дел>
   pexels.com/photos/8633/nature-tree-green-pine.jpg" />
 

0

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

html — автоматическое масштабирование изображения с сохранением соотношения сторон

Задавать вопрос

спросил

Изменено 3 года, 6 месяцев назад

Просмотрено 3к раз

У меня есть img внутри тега div, и в настоящее время я использую CSS

 img {
    максимальная высота: 100%;
    максимальная ширина: 100%;
}
 

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

Я попытался установить высоту на 100% с максимальной шириной 100%, но это искажает изображение, а это не то, что мне нужно. Я также пробовал object-fit: contains; , но это, похоже, ничего не делает.

Спасибо 🙂

  • HTML
  • CSS

2

Попробуйте добавить его в качестве фона, тогда вы можете сделать это:

 div {
      фон: url(images/bg.jpg) фиксированный центр без повторов;
      -webkit-background-size: обложка;
      -moz-background-size: обложка;
      -o-background-size: обложка;
      размер фона: обложка;
}
 

8

Ответ @Michelangelo — еще один способ достичь вашей цели. Если вы хотите, чтобы ваше изображение было внутри тега img (как и ваш исходный пост), сохраните значения max-width и max-height и поместите одно из них в свой класс CSS:

1) Keep соотношение сторон на основе ширины:

 ширина: 300 пикселей; /* Ваша предпочтительная ширина */
высота: авто;
 

2) Сохранить соотношение сторон в зависимости от роста:

 ширина: авто;
высота: 300 пикселей; /* Ваша предпочтительная высота */
 

Я бы также посоветовал вам взглянуть на свойство object-fit здесь: https://www.w3schools.com/css/css3_object-fit.asp

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

2

Если вы хотите сохранить изображение как элемент HTML, а не как фон CSS, я бы использовал объектную подгонку. Существуют ограничения поддержки этого свойства CSS в браузерах.

https://caniuse.com/#search=object-fit

Для борьбы с этим можно использовать полифилл. Такой как: https://github.com/fregante/object-fit-images

Примером того, что, как мне кажется, вам нужно, может быть: https://codepen.io/bin-man/pen/NWKNWLm

 .image-контейнер img {
  объект подходит: обложка;
}
 

Вы можете поэкспериментировать с размерами изображения и удалить объектную подгонку, чтобы посмотреть, как оно себя ведет.

Надеюсь, это поможет.

Думаю, это то, что вам нужно… Пожалуйста, запустите фрагмент кода…

 раздел {
  ширина: 100 пикселей;
  высота: 100 пикселей;
}

раздел > изображение {
  максимальная ширина: 100%;
  максимальная высота: 100%;
  объект-подгонка: уменьшение масштаба;
} 
 <дел> 
<дел>
Оставить комментарий

Добавить комментарий

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