По высоте и по ширине: CSS высота равна ширине

Содержание

Сохраняем пропорции высоты и ширины элемента при изменении ширины контента на чистом CSS

Как пропорционально уменьшать ширину и высоту различных элементов при изменении ширины родительского контейнера?

Для изображений это делается очень просто, задаем свойству height значение auto, при этом максимальную ширину изображения ограничиваем шириной родительского контейнера max-width: 100%;

img{
  max-width: 100%;
  height: auto;
}

Проблема в том, что мы не можем задать height: auto; для блочных элементов, например для DIV. В данном случае 100% – это будет высота родителя.

Решение проблемы

HTML

Нам нужны два блочных элемента для достижения желаемого поведения. Нет изображений, нет Javascript.

<div> 
  <div>Aspect ratio of 1:1</div> 
</div>

CSS

.box{
  position: relative;
  width: 50%;		/* desired width */
}
. box:before{
  content: "";
  display: block;
  padding-top: 100%; 	/* initial ratio of 1:1*/
}

Итак, что это? Мы определяем псевдоэлемент для нашего ящика и задаем ему margin-top 100%. Поскольку это 100% значение относится к ширине элемента … вы получаете его (height: 0; padding-bottom: 100%; также будет работать, но тогда вы должны отрегулировать значение padding-bottom каждый раз, когда вы меняете ширину).

Таким образом, наш блок уже выше ширины. Если вы хотите отображать только несколько цветных блоков, тогда уже все готово. Но поскольку пользовательский интерфейс намного сложнее, и если вы также предоставляете некоторый контент, мы добавляем контент в наш блок .box.

Контент

И вот трюк: мы просто позиционируем блок контента как абсолютный со всеми четырьмя ориентациями, установленными в 0. Это просто покрывает родительский элемент полностью, независимо от того, какой размер он имеет.

.content{
  position:  absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
}

Вот и все.

Блестяще, не так ли? Даже padding не сломает его, и нет необходимости в box-sizing: border-box здесь.

Другие пропорции

Если вы хотите создать другие коэффициенты, просто измените значение padding-top псевдоэлемента:

/* Other ratios */
.ratio2_1:before{
  padding-top: 50%;
}
.ratio1_2:before{
  padding-top: 200%;
}
.ratio4_3:before{
  padding-top: 75%;
}
.ratio16_9:before{
  padding-top: 56.25%;
}

IE7 и ниже

Поскольку IE такой IE, и особенно IE7 – это все, но только не браузер, вы должны сами создать элемент вместо псевдоэлемента в своей разметке, если хотите поддержать IE. Или бросьте на него Javascript, пока он, надеюсь, не сломается. Навсегда.
Мой вольный перевод статьи http://www.mademyday.de/css-height-equals-width-with-pure-css.html.

Рабочий пример на CodePen:

See the Pen Height equals width with pure css by Denis (@deniscreative) on CodePen. 0

Вариант №2 – Сохраняем пропорции высоты и ширины элемента при изменении ширины контента на чистом CSS без псевдоэлементов

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

HTML

<div> 
  <div>Some text</div>
</div>

CSS

.box {
  background-color: red;
  width: 100%;
  padding-top: 100%; /* 1:1 Aspect Ratio */
  position: relative;
}
/* If you want text inside of the container */
.content {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
}

Другие пропорции

.ratio16_9{
  padding-top: 56.25%; /* 16:9 Aspect Ratio */
}
.ratio4_3{
  padding-top: 75%; /* 4:3 Aspect Ratio */
}
.ratio3_2{
  padding-top: 66.66%; /* 3:2 Aspect Ratio */
}
/* Other ratios */
.
ratio8_5{ padding-top: 62.5%; /* 8:5 Aspect Ratio */ }

Рабочий пример на CodePen:

See the Pen Height equals width with pure css without pseudoelement by Denis (@deniscreative) on CodePen.0

Что это такое и на что она влияет

Высота профиля шины, что это такое?

Простыми словами, высота профиля шины — это расстояние от диска до поверхности протектора колеса.

  • Как выбрать летние шины для авто?
  • Высота профиля шины
  • Ширина профиля шины
  • Жесткость и мягкость резины шины
  • Жесткая или мягкая боковина шины
  • — Что выбрать — жесткую или мягкую боковину летней шины
  • Типы рисунков протектора шин
  • — Симметричный ненаправленный рисунок протектора шин
  • — Симметричный направленный рисунок протектора шин
  • — Асимметричный ненаправленный рисунок протектора шин
  • — Асимметричный направленный рисунок протектора шин
  • Классификация автомобильных шин
  • Индекс нагрузки шин
  • Индекс скорости шин

Высота профиля — Метрический размер шин

Высота профиля шины в метрическом размере маркируется на колесе в виде значения, которое говорит о процентном соотношении к ширине покрышки. Например, размерность 215/65 R16, говорит о том, что высота профиля шины равна 65% от ширины 215 мм и составляет 139,75 мм, при радиусе колеса 16 дюймов. Метрическая размерность наиболее распространена среди ассортимента автомобильных шин магазинов, поэтому высчитать высоту профиля шины труда не составит. Для пересчета метрической в дюймовую размерность: 1 дюйм = 2,54 см.

Высота профиля — Дюймовые размеры шин

Дюймовые размеры шин не показывают высоту профиля в маркировке, указывается общая высота колеса, ширина колеса и радиус шины в дюймах, например, 31х10,5 R15. Перевод шин из дюймов в метрический размер. Чтобы высчитать метрическую высоту профиля, необходимо из общей высоты колеса вычесть его радиус, полученное значение общей высоты профиля шины поделить пополам и получается высота профиля. (31-15):2=8 дюймов высота профиля, теперь 8х2,54см=20,32см метрическая высота профиля.

Высота профиля шины на что влияет?

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

Увеличение высоты профиля

Увеличивая в разумных пределах профиль шины (1-2 размера без увеличения ширины), машина будет становиться мягче и комфортнее, за счет большего диаметра колеса увеличится посадка автомобиля и практически не ухудшится его управление. Если превысить допустимые значения высоты профиля, то у автомобиля появится валкость в управлении, ухудшение торможения и прохождения поворотов, за счет увеличения центра тяжести и залома резины по высоте профиля, повышение расхода топлива, возможное задевания за элементы кузова и подвески в момент полного выворота руля или при полной загрузке. А также, появится дополнительная нагрузка на детали ходовой, что снизит срок их службы.

Уменьшение высоты профиля

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

Владельцам автомобилей рекомендуется:

  • Шинный онлайн калькулятор для удобного и наглядного подбора размерности шин и дисков по параметрам.
  • Сервис расстояний и маршрутов по автодорогам, чтобы рассчитать расстояние и проложить маршрут между населенными пунктами.
  • Онлайн проверка наличия штрафов ГИБДД с возможностью их оплаты, для контроля задолженности по штрафам за нарушение ПДД.
  • Тест онлайн на знание правил дорожного движения для самостоятельного изучения и проверки своих знаний ПДД.
  • Руководства по ремонту и эксплуатации автомобилей с 70 годов выпуска в лучшем онлайн магазине авто литературы.

Установите ширину и высоту изображений, чтобы уменьшить сдвиги макета

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

Если вы не задаете своим изображениям явную ширину и высоту, вы можете повредить свой совокупный показатель сдвига макета (CLS). Настройка ширины и высоты изображений стала еще более важной сейчас, когда Google использует Core Web Vitals в качестве сигнала ранжирования, а кумулятивный сдвиг макета — это всего лишь один показатель, на который Google обращает внимание при аудите вашего сайта.

Но какое отношение изображения имеют к сдвигам макета, и как задание им ширины и высоты решает эту проблему?

Пропустить оглавление

Оглавление

Если вы когда-либо запускали свой сайт через Lighthouse, то вы, вероятно, видели это сообщение:

«Установите явную ширину и высоту для элементов изображения, чтобы уменьшить сдвиги макета и улучшить КЛС».

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

width и height и используется разметка, которая выглядит примерно так:

 Alt text
 

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

 Alt text
 

К этому моменту у вас, вероятно, возникло много вопросов:

  • Что такое CLS и почему Lighthouse помечает его как проблему?
  • Как установка ширины и высоты исправит CLS?
  • Как мне изменить размер изображений, если я задаю им фиксированную ширину и высоту?
  • Делать это вручную утомительно. Могу ли я автоматизировать процесс?

На все эти вопросы я отвечу в этой статье.

В сообщении выше упоминалось что-то под названием «CLS» — что с этим делать?

CLS означает кумулятивный сдвиг макета

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

«Совокупная» часть CLS означает, что Lighthouse рассматривает изменения макета в совокупности — многие разные факторы могут вызывать сдвиги макета, и они учитываются в окончательной оценке CLS. В этой статье мы сосредоточимся на конкретном источнике смещения макета: изображениях, у которых нет ширины и высоты.

Безразмерные изображения вызывают сдвиги макета

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

Как только изображение загружено, оно вытеснит своих братьев и сестер и займет свое законное место:

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

Чтобы предотвратить такого рода сдвиги макета, вы должны указать своим изображениям явные размеры, используя HTML-атрибуты width и height . Когда ваш браузер анализирует страницу и создает DOM, он считывает эти атрибуты с изображения и использует их для вычисления соотношения сторон изображения. Это позволяет зарезервировать нужное количество вертикального пространства для изображения при первой отрисовке, задолго до фактической загрузки изображения.

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

Что такое соотношение сторон?

Соотношение сторон описывает соотношение между шириной и высотой элемента. Общие соотношения сторон включают 16:9 , 4:3 и 1:1 . Например, соотношение сторон 1:1 говорит о том, что ширина и высота элемента всегда одинаковы (т. е. это квадрат), тогда как соотношение сторон 16:9 говорит, что элемент имеет 16 единиц ширины на каждые 9 единиц высоты.

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

Резервирование места для изображений с соотношением сторон

Современные браузеры автоматически применяют свойство CSS с соотношением сторон к любому элементу, который имеет явный ширина и высота устанавливаются как атрибуты HTML. Например, если ваше изображение имеет размер 1280x750 , вы должны установить его ширину и высоту в соответствии с этими значениями, например:

 Alt text
 

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

 img {
  соотношение сторон: авто 1280/750;
}
 

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

Фото предоставлено Биллом Стефаном, Unsplash элемент и его соотношение сторон, то вы можете легко вычислить другое измерение. Если я скажу вам, что ширина изображения 1200 пикселей , а его ширина всегда в два раза больше его высоты, то вы знаете, что изображение должно быть
600px
высота.

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

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

Как только изображение загружается, оно просто занимает это пространство-заполнитель, не сдвигая окружающее содержимое:

Маяк счастлив, как и ваши пользователи!

Адаптивные изображения и соотношение сторон

Напомню, эта разметка:

 Alt text
 

Создает этот пользовательский агент CSS:

 img {
  ширина: 1280 пикселей;
  высота: 750 пикселей;
  соотношение сторон: авто 1280/750;
}
 

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

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

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

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

Позволяет изменять ширину изображения в соответствии с изменением ширины устройства. Но высота по-прежнему фиксируется на любом значении, которое вы устанавливаете через HTML. Второй шаг — присвоить изображению высоту auto , что позволит изменять его высоту относительно текущей ширины рендеринга:

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

А вот высота , который вы установите здесь, переопределит высоту, которую браузер применил при установке атрибута HTML. Итак, почему вы хотите это сделать? Разве это не противоречит цели установки HTML-атрибутов ширины и высоты в первую очередь?

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

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

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

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

Однако, если вы используете такие фреймворки, как Gatsby, Next.js, Jekyll, 11ty и многие другие, вам повезло: многие из этих фреймворков и генераторов статических сайтов предлагают плагины изображений, которые автоматически устанавливают ширину и высоту. для вас во время сборки. Пока вы правильно используете плагин изображений вашего фреймворка, вы должны получать адаптивные изображения с установленными шириной и высотой.

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

Понравился этот пост? Вы также можете ознакомиться с другими моими статьями о веб-производительности.

Пока вы этим занимаетесь, я также рекомендую ознакомиться с этими ресурсами:

  • Smashing Magazine: настройка высоты и ширины изображений снова важна
  • Mozilla: сделайте это, чтобы улучшить загрузку изображений на вашем веб-сайте
  • Web.dev: оптимизация совокупного смещения макета
  • Web.dev: изображения отображаются с неправильным соотношением сторон

Превью в социальных сетях: Фото Роланда Зилвинскиса (Unsplash).

Какие атрибуты ширины и высоты следует использовать с адаптивными изображениями?: Чип Каллен

Сейчас лучше всего повторно включить ширину и высоту 9Атрибуты 0016 для изображений, как раньше.

Кто знал? Недавно я узнал, что браузеры поощряют это.

Уменьшает то, что Google назвал Cumulative Layout Shift , что является причудливым способом сказать «мусор». Они измеряют это как показатель производительности.

Если изображение похоже на это:

  
alt text

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

Что вы можете сделать, чтобы помочь браузеру, так это добавить width и height , установленные в два значения, равные соотношению сторон изображения . Соотношение сторон — это отношение ширины изображения к его высоте. Теперь, если это изображение имеет один размер , это довольно просто:

  
alt text

Вы по-прежнему можете заставить это изображение вести себя с тем же CSS, который мы использовали годами:

 изображений { 
ширина: 100%;
высота: авто;
}

Атрибуты адаптивного изображения

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

  


type="image/webp"
size="(max-width: 767px) 100vw,
(max-width: 1023px) calc(33vw - 42px),
596px"
data-srcset="image_218x122.webp 218w,
image_280x157.webp 280w,
image_384x215.webp 384w,
image_442x247.webp 442w,
image_480x270.webp 480w,
image_767x432.webp 767w,
image_960x540.webp 960w,
image_1534x864.webp 1534w">
size="(max-width: 767px) 100vw,
(max-width: 1023px) calc(33vw - 42px),
596px"
srcset="image_218x122.jpg 218w,
image_280x2802w, 1
image_280x28027.jpg image_384x215.jpg 384w,
image_442x247.jpg 442w,
image_480x270.jpg 480w,
image_767x432.jpg 767w,
image_960x540.jpg 960w,
image_1534x864.jpg 1534w"
src="image_448x250.jpg"
alt="Alt text"
/>

Какие атрибуты следует использовать? В руководстве web. dev они говорят:

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

Хорошо, достаточно честно — в приведенном выше примере все изображения имеют одинаковое соотношение сторон — 16:9.

Но до сих пор не ясно, какое из вышеперечисленных разрешений предпочтительнее.

Сначала пробовал так:

  
...
size="..."
srcset="..."
src="image_448x250.jpg"
width="16"
height="9"
alt="Alt text"
/>


Мне это понравилось по следующим причинам:

  • Соотношение сторон стало четким
  • Он отделил эту проблему макета от фактического размера изображения
  • Это указывает на то, что CSS участвует в фактическом макете

В более подробной статье Крейга Баклера он советует не делать этого:

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

Что, отлично, хорошая мысль.

Ах, но что такое

"... разумного размера" ?

Мой первый инстинкт — какой бы размер вы ни использовали для значения по умолчанию src .

Но - это , что лучший размер?

В нашем случае мы обычно устанавливаем src размером чуть меньше среднего. Доступны меньшие разрешения и большие разрешения. Мне это кажется странным.

  
...
size="..."
srcset="..."
src="image_448x250.jpg"
width="448"
height="250"
alt= «Альтернативный текст»
/>

Однако, немного подумав, я думаю, что мой первый инстинкт верен.

Установите для width и height разрешение, соответствующее вашему стандартному src .

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

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