Html img height width: Setting Height And Width On Images Is Important Again — Smashing Magazine

Использование соотношений сторон изображения для избежания скачкообразной загрузки страниц — Tempertemper

В обзоре самых интересных функций, анонсированных на WWDC 2020 на прошлой неделе, я упомянул, что Safari теперь будет поддерживать соотношения сторон изображения, но что это значит?

Помните атрибуты размера изображения?

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

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

Оказывается, они снова полезны, так что мы можем начать их добавлять!

Размеры изображения снова полезны

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

Дерьмовые веб-страницы

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

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

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

Что, если бы вы читали второй абзац? Или собирается щелкнуть чок в нем? Теперь это движущаяся цель!

Остановка загрузки с помощью CSS

Загрузку всегда можно остановить с помощью CSS и обертки

, но только если бы мы знали соотношение сторон изображения (скажем, 16:9). Затем мы использовали бы CSS и хак заполнения:

 .image-wrapper { 
padding-bottom: 56,25%;
позиция: относительная;
}

.image-wrapper img {
ширина: 100%;
высота: 100%;
позиция: абсолютная;
слева: 0;
верх: 0;
}

Взлом возможен, потому что вертикальный отступ вычисляется на основе ширины элемента, а не высоты, как можно было ожидать. Значение % основано на соотношении сторон 16:9: 9 ÷ 16 = 0,5625, что соответствует 56,25 при выражении в процентах. Высота составляет 56,25% от ширины.

Проблемы здесь:

  • лишняя разметка — вам понадобится
    около каждое изображение на вашем сайте
  • дополнительный стиль — CSS выше
  • все изображения застряли бы с одинаковым соотношением сторон (16:9 в приведенном выше примере)
  • для любых изображений с другим соотношением сторон (скажем, 4:3) потребуется:
    • выделенный класс в HTML
    • еще немного CSS для оформления этого класса

Надлежащее исправление

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

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

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

Как должен выглядеть наш код

Итак, теперь мы знаем, что делать, как мы это делаем?

HTML

Начнем с разметки. Все, что вам нужно сделать, это добавить ширины и высоты к вашим изображениям!

 Мой альтернативный текст 

Прежде всего, обратите внимание, что нет единиц измерения ( width="800" , а не ширина = "800 пикселей" ). Как и в случае с SVG, пропуск единиц измерения является наименее специфичным (самым слабым) способом сделать это, что означает, что его легче всего переопределить.

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

Можно сразу уменьшить размеры, зная, что CSS вмешается и сделает их полноразмерными, например:

 My alt= 

Но не делайте этого . в сценарии, когда CSS не загружается, ваше изображение будет крошечным (16 пикселей × 9 пикселей в этом примере), поэтому я рекомендую вам использовать более разумные размеры, такие как 800 × 450 .

CSS

Минимальный CSS. Вы устанавливаете ширину и высоту, которые переопределяют значения в HTML:

 img { 
width: 100%;
высота: авто;
}

Если это слишком широко, вы можете ограничить это, например, изображениями в статьях:

 article img { 
ширина: 100%;
высота: авто;
}

Итак, мы говорим браузеру:

  • сделать изображения той же ширины, что и их контейнер
  • для высоты изображения должны рассчитываться автоматически на основе
    • ширина контейнера
    • соотношение сторон самого изображения

Не нужно предугадывать соотношение сторон в CSS!

Ограничения Markdown

Следует отметить, что Markdown не может добавлять атрибуты изображения, поэтому, если вы добавляете изображения в запись блога, написанную в Markdown, вместо ![Мой альтернативный текст](/my-great-image. jpg) вам придется использовать HTML: Мой альтернативный текст . Это нормально, так как Markdown позволяет смешивать HTML.

Я не возражаю против этого, отчасти потому, что я не большой поклонник нотации ![]() для изображений (слишком близкой к []() , используемой для ссылок), но в основном как это означает, что я могу добавить тактический атрибут loading="lazy" к определенным изображениям.

Поддержка браузера

Firefox, Chrome (следовательно, Edge и Opera) сегодня поддерживают пропорции, основанные на атрибутах width и height . Apple объявила, что Safari будет поддерживать их, когда следующие версии Safari будут выпущены (вероятно) в сентябре, но чтобы получить предварительный просмотр, Safari Technology Preview поддерживает его сейчас.

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

HTML 标签 的 Высота 和 Ширина 属性

HTML 标签

实例

将 宽度 和 高度 分别 设置 200 像素 :

  /> 

亲自 试 一试

定义 用法 用法

标签 的 Высота 和 Ширина 属性 图像 的 尺寸。

: : 图像 指定 指定 和 和 是 好。 习惯 : : 为 指定 指定 和 设置。 习惯 : : : :了 这些 , 就 可以 在 页面 加载 时 为 图像 预留。 如果 没有 这些 属性 , 浏览器 就 无法 图像 的 尺寸 , 就 无法 为 保留 合适 的 空间 , 当 图像 加载 时 的 布局 就 的 空间 因此 图像 时 页面 布局 就会 发生 变化 ((的 篇幅 详细 解释 了 这个 观点))。

提示 : 请 不 要 通过 和 和 属性 来 缩放 图像 如果 通过 通过 和 和 属性 属性 缩小 图像 , 那么 就 下载 容量 容量 (((((用户 必须 图像 ((((((即使 图像 页面 上 看上去 很 小))。 的 的 是 , 在 网页 上 使用 图像 之前 应该 通过 软件 把 图像 为 合适 尺寸。

延伸 阅读 : 详解 Высота 和 Ширина 属性

更 实例 实例

改变 图像 大小 制作 填充 图像

Высота 和 属性 一 种 种 隐藏 隐藏 , 大小 的 大小 大小 大小 大小 大小 大小 大小 大小 大小 大小 也就 也就 也就 也就 也就 也就 也就两 个 可以 比 实际 的 尺寸 大 一些 或 小。 浏览器 会 自动 图像 图像 , 使 其 适应 预留 空间 的。 使用 这 方法 就 可以 很 容易 为 大 图像 创建 其 以及 放大 可以 很 地 大 图像 其 缩略图 放大 放大 放大 放大 放大 放大很 小 图像。 但 需要 注意 的 : : 浏览器 必须 要 下载 整 文件 文件 , 不管 它 最终 的 尺寸 是 多 大 , , 不管 它 最终 显示 尺寸 到底 多 大 , 而且 , 没有 没有 保持 其 的 宽度 和 高度 比例 会 扭曲 没有 保持 保持 其 的 宽度 高度 比例 发生 扭曲 没有 保持 保持 其 原来 宽度 比例 会。.

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

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