Использование соотношений сторон изображения для избежания скачкообразной загрузки страниц — Tempertemper
В обзоре самых интересных функций, анонсированных на WWDC 2020 на прошлой неделе, я упомянул, что Safari теперь будет поддерживать соотношения сторон изображения, но что это значит?
Помните атрибуты размера изображения?
Позвольте мне начать с еще одного путешествия по воспоминаниям. Я помню, когда лучше всего было добавлять атрибуты размера изображения к каждому изображению. Я думаю, что было даже преимущество SEO в указании ширина
и высота
. Но затем появился адаптивный веб-дизайн и экраны высокой четкости, и эти атрибуты стали излишними.
Поскольку отзывчивый веб сжимает и растягивает объекты в зависимости от размера экрана, изображения не собирались соответствовать тому, что мы указали в атрибутах width
и height
, за исключением очень специфической ширины экрана . Поэтому мы перестали добавлять размеры изображения в наш HTML и даже удалили их из существующего кода.
Оказывается, они снова полезны, так что мы можем начать их добавлять!
Размеры изображения снова полезны
Прежде чем я расскажу, почему размеры изображения снова полезны и как их использовать, стоит проиллюстрировать распространенную в Интернете раздражающую проблему: «дерганье».
Дерьмовые веб-страницы
Есть только одна вещь, которая раздражает больше, чем медленный веб-сайт, и это медленный веб-сайт, на котором вам приходится бегать по странице, пока изображения загружаются сверху.
Проблема в том, что браузер знает ширину изображения, так как обычно установлено значение 100%
, но высота должна быть определена после того, как само изображение получено с сервера и браузер вычислит его размеры. До тех пор браузер понятия не имеет, поэтому он использует 0
, пока не узнает. Таким образом, высота 0
внезапно переходит к высоте изображения по отношению к его ширине после загрузки изображения, перемещая содержимое под ним вниз по странице.
Браузеры читают веб-страницу сверху вниз, отображая все, что могут, по мере продвижения. Пока они извлекают изображение, они будут продолжать выводить остальную часть страницы, поэтому вы часто видите, как пара абзацев текста внезапно отделяется, когда наконец появляется изображение между ними, и это заставляет второй абзац прыгать вниз. страница.
Что, если бы вы читали второй абзац? Или собирается щелкнуть чок в нем? Теперь это движущаяся цель!
Остановка загрузки с помощью CSS
Загрузку всегда можно остановить с помощью CSS и обертки .image-wrapper img { Взлом возможен, потому что вертикальный отступ вычисляется на основе ширины элемента, а не высоты, как можно было ожидать. Проблемы здесь: Более того, если CSS говорит, что изображение имеет ширину Таким образом, вы можете продолжать читать этот абзац под изображением — или даже щелкнуть эту ссылку! — не беспокоясь о том, что содержимое выпрыгнет вниз. Итак, теперь мы знаем, что делать, как мы это делаем? Начнем с разметки. Все, что вам нужно сделать, это добавить Прежде всего, обратите внимание, что нет единиц измерения ( Без единиц измерения браузер все равно будет вычислять размеры, используя пиксели (независимо от того, что означают пиксели), поэтому, если CSS не работает, эти изображения сетчатки остаются в разумном размере и не занимают всю ширину экрана вашего ноутбука, поэтому содержимое по-прежнему хорошо читается. Можно сразу уменьшить размеры, зная, что CSS вмешается и сделает их полноразмерными, например: Но не делайте этого . в сценарии, когда CSS не загружается, ваше изображение будет крошечным (16 пикселей × 9 пикселей в этом примере), поэтому я рекомендую вам использовать более разумные размеры, такие как Минимальный CSS. Вы устанавливаете ширину и высоту, которые переопределяют значения в HTML: Если это слишком широко, вы можете ограничить это, например, изображениями в статьях: Итак, мы говорим браузеру: Не нужно предугадывать соотношение сторон в CSS! Следует отметить, что Markdown не может добавлять атрибуты изображения, поэтому, если вы добавляете изображения в запись блога, написанную в Markdown, вместо Я не возражаю против этого, отчасти потому, что я не большой поклонник нотации Firefox, Chrome (следовательно, Edge и Opera) сегодня поддерживают пропорции, основанные на атрибутах Это прогрессивное усовершенствование, так что старые браузеры получат то же, что и раньше. HTML 将 宽度 和 高度 分别 设置 200 像素 : 亲自 试 一试 : : 图像 指定 指定 和 和 是 好。 习惯 : : 为 指定 指定 和 设置。 习惯 : : : :了 这些 , 就 可以 在 页面 加载 时 为 图像 预留。 如果 没有 这些 属性 , 浏览器 就 无法 图像 的 尺寸 , 就 无法 为 保留 合适 的 空间 , 当 图像 加载 时 的 布局 就 的 空间 因此 图像 时 页面 布局 就会 发生 变化 ((的 篇幅 详细 解释 了 这个 观点))。 提示 : 请 不 要 通过 和 和 属性 来 缩放 图像 如果 通过 通过 和 和 属性 属性 缩小 图像 , 那么 就 下载 容量 容量 (((((用户 必须 图像 ((((((即使 图像 页面 上 看上去 很 小))。 的 的 是 , 在 网页 上 使用 图像 之前 应该 通过 软件 把 图像 为 合适 尺寸。 延伸 阅读 : 详解 Высота 和 Ширина 属性 Высота 和 属性 一 种 种 隐藏 隐藏 , 大小 的 大小 大小 大小 大小 大小 大小 大小 大小 大小 大小 也就 也就 也就 也就 也就 也就 也就两 个 可以 比 实际 的 尺寸 大 一些 或 小。 浏览器 会 自动 图像 图像 , 使 其 适应 预留 空间 的。 使用 这 方法 就 可以 很 容易 为 大 图像 创建 其 以及 放大 可以 很 地 大 图像 其 缩略图 放大 放大 放大 放大 放大 放大很 小 图像。 但 需要 注意 的 : : 浏览器 必须 要 下载 整 文件 文件 , 不管 它 最终 的 尺寸 是 多 大 , , 不管 它 最终 显示 尺寸 到底 多 大 , 而且 , 没有 没有 保持 其 的 宽度 和 高度 比例 会 扭曲 没有 保持 保持 其 的 宽度 高度 比例 发生 扭曲 没有 保持 保持 其 原来 宽度 比例 会。.
.image-wrapper {
padding-bottom: 56,25%;
позиция: относительная;
}
ширина: 100%;
высота: 100%;
позиция: абсолютная;
слева: 0;
верх: 0;
} Значение
%
основано на соотношении сторон 16:9: 9 ÷ 16 = 0,5625, что соответствует 56,25 при выражении в процентах. Высота составляет 56,25% от ширины.
Надлежащее исправление
width
и height
атрибуты в нашей разметке теперь снова имеют смысл. Браузер использует их для расчета соотношение сторон изображения в то же время, когда он запрашивает изображение, поэтому он может гарантировать, что правильный объем пространства остается перед изображением, поступающим с сервера.
: 100%;
или максимальная ширина: 100%;
, он знает ширину, что позволяет ему установить высоту, используя соотношение сторон, полученное из ширины
и высоты
в разметке. Как должен выглядеть наш код
HTML
ширины
и высоты
к вашим изображениям!
width="800"
, а не ширина = "800 пикселей"
). Как и в случае с SVG, пропуск единиц измерения является наименее специфичным (самым слабым) способом сделать это, что означает, что его легче всего переопределить.
800
× 450
. CSS
img {
width: 100%;
высота: авто;
} article img {
ширина: 100%;
высота: авто;
}
Ограничения Markdown

. Это нормально, так как Markdown позволяет смешивать HTML.
![]()
для изображений (слишком близкой к []()
, используемой для ссылок), но в основном как это означает, что я могу добавить тактический атрибут loading="lazy"
к определенным изображениям. Поддержка браузера
width
и height
. Apple объявила, что Safari будет поддерживать их, когда следующие версии Safari будут выпущены (вероятно) в сентябре, но чтобы получить предварительный просмотр, Safari Technology Preview поддерживает его сейчас. Не большой, но не худший опыт, чем они уже получали.
HTML 标签 的 Высота 和 Ширина 属性
标签
实例
/>
定义 用法 用法
标签 的 Высота 和 Ширина 属性 图像 的 尺寸。
更 实例 实例
改变 图像 大小 制作 填充 图像