Высота изображения такая же, как и ширина

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

Любые идеи? Я использую sass, если это поможет ..

.container {
width: 50%;
}

.container img {
  width: 100%;
  height: 400px; //this should be the same as the width value..
}
<div class = "container"><img src = "https://images.pexels.com/photos/1249588/pexels-photo-1249588.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260"/></div>

Желательно без решения javascript, но, может быть, иначе это невозможно?

Возможный дубликат Высота равна динамической ширине (гибкий макет CSS)

Farahmand 20.07.2018 19:07

Я думаю, что нет чистого решения css

enno.void 20.07.2018 19:09

Возможный дубликат css высота такая же, как ширина

Farahmand 20.07.2018 19:10

Установите отступ на 100%

Matt L. 20.07.2018 19:11

Возможный дубликат Поддерживайте соотношение сторон div с помощью CSS

Amaury Hanser 20.07.2018 19:11

@ mr.void Есть решение css. Продать все размещенные ссылки.

Amaury Hanser 20.07.2018 19:12

Я не вижу указания, хотите ли вы, чтобы изображение сохраняло соотношение сторон или нет ...

Heretic Monkey 20.07.2018 19:16

@HereticMonkey да, он должен сохранять соотношение сторон .. я думаю, контейнер должен быть идеальным квадратом, а изображение должно быть квадратным или центрированным

Simon 20.07.2018 19:17

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

Heretic Monkey 20.07.2018 19:21

@HereticMonkey Я думаю, что автору нужно разместить изображение (с любым соотношением сторон) в адаптивном квадрате. Как видите, в его примере изображение не квадрат.

Amaury Hanser 20.07.2018 19:26
Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
14
11
17 372
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Может, это у вас работает?

.container img {
 width: 100%;
 padding-bottom: 100%;
}

Это работает только с тегом, который имеет цвет фона или фоновое изображение, не работает с тегом <img>

The Anh Nguyen 08.05.2020 11:52
Ответ принят как подходящий

Многие из нас дали вам некоторые подсказки в комментариях, так что теперь вы можете создать отзывчивый квадрат.


Поместите изображение внутрь квадрата

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

Фрагмент:

.container {
  position: relative;
  width: 37%; /* The size you want */
}
.container:after {
  content: "";
  display: block;
  padding-bottom: 100%; /* The padding depends on the width, not on the height, so with a padding-bottom of 100% you will get a square */
}

.container img {
  position: absolute; /* Take your picture out of the flow */
  top: 0;
  bottom: 0;
  left: 0;
  right: 0; /* Make the picture taking the size of it's parent */
  width: 100%; /* This if for the object-fit */
  height: 100%; /* This if for the object-fit */
  object-fit: cover; /* Equivalent of the background-size: cover; of a background-image */
  object-position: center;
}
<div class = "container">
  <img src = "https://images.pexels.com/photos/1249588/pexels-photo-1249588.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260"/>
</div>

Если это действительно дубликат, вам, вероятно, не стоит на него отвечать ...

Heretic Monkey 20.07.2018 19:45

@HereticMonkey Я знаю, но мне не удалось найти ответ на изображение внутри квадрата. Все ответы, которые я прочитал, касались только создания квадрата. Если найду с изображением, удалю ответ

Amaury Hanser 20.07.2018 19:48

@AmauryHanser: Это замечательно! Я экономлю время! Большое спасибо!

truthblue82 24.02.2019 20:02

@AmauryHanser большое спасибо за это решение, мне очень помогло

Pritom 08.08.2020 06:46

это действительно решило мою проблему. не удаляйте этот пост.

alien 01.10.2020 13:18

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

демо ниже (с фиктивным изображением, ваше мне не показывается)

.container {
  width: 50%;
}

.container img {
  width: 100%;
  height: 0px;/* padding will mage sizing here */
  padding: 50% 0;/* make it a square = 100% vertical padding , none horizontal*/
  background-image: url(http://dummyimage.com/750x1260/951&text=My_BG_Image);/* used a different color from the one in the tag */
  background-size: 100% 100%;
  /* reset just in case */
  background-clip: border-box;
  box-sizing:border-box;
}
<div class = "container"><img src = "http://dummyimage.com/750x1260/159&text=My_Image" /></div>

Обратите внимание, я также использовал размер вашего изображения, которое также не является квадратом. Вы тоже не возражали против растяжки?

Добавьте это в начало файла стиля:

    :root{
  --size: 100px;
}

Затем присвойте определенной переменной ширину и высоту:

width: var(--size);
height: var(--size);

Если вы хотите использовать фоновое изображение, это решение будет работать https://codepen.io/anon/pen/jpyrwB.

Это сохранит квадратное соотношение и заставит изображение покрыть весь div. Он также сохранит изображение по центру и обрежет стороны, если изображение шире, чем высота.

HTML

<div class='square-box'>
    <div class='square-content'></div>
</div>

CSS

.square-box{
    position: relative;
    width: 50%;
    overflow: hidden;
}
.square-box:before{
    content: "";
    display: block;
    padding-top: 100%;
}
.square-content{
    position:  absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    background-image: url(https://images.pexels.com/photos/1249588/pexels-photo-1249588.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260);
    background-position: center;
    background-size: 100% 100%;
    background-size: cover;
}

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