Размер
В HTML размеры элементов или расстояния между ними задаются в пикселах или процентах. Пиксел — это элементарная точка на экране монитора, является относительной единицей измерения, ее величина зависит от установленного экранного разрешения и размера монитора. Возьмем, к примеру, популярное разрешение монитора 1024х768 пикселов. Картинка с такими же размерами будет занимать всю область экрана. Увеличив разрешение монитора до 1280х1024, мы, тем самым, уменьшим размеры изображения на экране.
При использовании пикселов в качестве значений пишется только число без указания единиц, например: width=»380″ . В примере 6.2 приведено добавление изображения с заданными размерами.
Пример 6.2. Размеры изображения в пикселах
Изображение
В данном примере рисунок имеет ширину 100 пикселов ( width=»100″ ), высоту 111 пикселов ( height=»111″ ), горизонтальный и вертикальный отступ по 4 пиксела ( hspace и vspace ) и толщину границы вокруг картинки 2 пиксела ( border=»2″ ).
Процентная запись удачно дополняет пикселы, поскольку позволяет привязаться к размерам определенного элемента, к примеру, окна браузера. Так, если задать у картинки ширину 100%, то рисунок будет заполнять все свободное пространство окна по ширине. Браузер понимает, что речь идет о процентах, если после числа добавляется символ %, например: width=»40%» .
Размеры допустимо задавать только в целых числах. Это правило относится как к пикселам, так и процентам.
Учтите, что размер в процентах вычисляется от размеров родительского элемента, иными словами, контейнера, внутри которого располагается элемент. Если родитель явно не задан, тогда за отсчет принимается окно браузера. В примере 6.3 приведен код веб-страницы, в котором ширина элементов задается в процентах.
Пример 6.3. Размеры изображения в процентах
Изображение 
В данном примере ширина картинки задана как 100%, при этом высота изображения явно не задается, поскольку она вычисляется автоматически. Вид страницы при таких размерах картинки показан на рис. 6.3.

Рис. 6.3. Изображение с шириной 100%
Обратите внимание, что в изображении появляются заметные искажения, это связано с увеличением картинки вопреки ее исходным размерам.
Как вы понимаете, ширина окна принимается за 100%, но ее легко превысить, причем ненароком. В частности, стоит только добавить в примере 6.3 к тегу отступы по горизонтали ( hspace=»10″ ) и ширина изображения станет 100%+20. Это в свою очередь приведет к появлению горизонтальной полосы прокрутки. Учитывайте этот нюанс при установке размеров элементов.
Не выкладывайте свой код напрямую в комментариях, он отображается некорректно. Воспользуйтесь сервисом cssdeck.com или jsfiddle.net, сохраните код и в комментариях дайте на него ссылку. Так и результат сразу увидят.
Популярные рецепты
Как добавить картинку на веб-страницу?
Как добавить иконку сайта в адресную строку браузера?
Как добавить фоновый рисунок на веб-страницу?
Как сделать обтекание картинки текстом?
Как растянуть фон на всю ширину окна?
Как выровнять фотографию по центру веб-страницы?
Как разместить элементы списка горизонтально?
Как убрать подчеркивание у ссылок?
Как убрать маркеры в маркированном списке?
Как изменить расстояние между строками текста?
Как сделать, чтобы картинка менялась при наведении на нее курсора мыши?
Как открыть ссылку в новом окне?
Популярные задачи
- TEX
- Отступы между блоков
- Андроид в тени
- Ссылка как кнопка
- Вложенные списки
- Форма регистрации
- Объединение ячеек таблицы
- Обязательные поля формы
- Цвет и фон в таблице
- Асуанская плотина
- Батарейка
- Заголовки
Задавать Height и Width для изображений снова важно
Сторонники веб-оптимизаций часто советуют добавлять к изображениям атрибуты с размерами, что позволяет при отрисовке страницы оставлять нужное количество пространства ещё до загрузки самого изображения. Это позволяет избежать смещения раскладки страницы по мере загрузки изображений — что с недавних пор начал измерять Chrome в новой метрике Cumulative Layout Shift (CLS).
Секрет, не так хорошо известный разработчикам, не являющимся заядлыми сторонниками веб-производительности, заключается в том, что до недавнего времени, как мы увидим ниже, во многих случаях это фактически не имело особого смысла. Однако, недавние изменения в мире CSS и их быстрое внедрение в браузерах снова делает добавление атрибутов width и height к тегу полезным.
Почему добавление Width и Height было хорошим советом
Your title
Introductory paragraph.

Lorem ipsum dolor sit amet, consectetur adipiscing elit…
Эта страница будет отрисовываться в два этапа: первый — после загрузки HTML, второй — после загрузки изображения. Но это может привести к тому, что после загрузки изображения и вычисления необходимого для его отображения пространства, содержимое, расположенное под ним, «прыгнет» вниз:
Подобные смещения раскладки доставляют существенные неудобства, особенно если пользователь к этому моменту уже начал, например, читать статью. После смещения он будет вынужден снова искать место, на котором остановился. Также это добавляет работы браузеру, вынуждая его пересчитывать всю раскладку страницы по мере загрузки каждого изображения. На страницах с большим количеством изображений это может существенно нагружать устройство.
Традиционным способом избежать этого была установка для тега атрибутов width и height , чтобы ещё на этапе загрузки одного лишь HTML браузер мог выделить для изображений необходимое количество места. Сделаем это в следующем примере:
Your title
Introductory paragraph.

Lorem ipsum dolor sit amet, consectetur…
В результате отрисовка страницы будет происходить так, как указано ниже. Пространство, необходимое изображению, выделяется ещё до его загрузки, а когда это происходит, раскладка страницы не смещается.
Кроме раздражающих пользователя скачков, необходимость многократно перерисовывать страницу также может приводить к существенному увеличению нагрузки на процессор. На приведённом ниже скриншоте отображены расчёты производительности, выполненные в браузере Chrome на сайте с галереей, содержащей около 100 изображений. Показатели слева были достигнуты при наличии атрибутов width и height , справа — при их отсутствии.
Как вы могли заметить, влияние существенное — это будет особенно заметно на маломощных устройствах и при низкой скорости подключения. Время загрузки страницы будет существенно увеличено.
Как CSS работает с шириной и высотой элемента
При попытке менять ширину и высоту изображения с помощью CSS, могут возникать неожиданные проблемы. Например, если нужно ограничить ширину, может использоваться следующий код:
Когда в этом возникает потребность, значение width переопределяется и ширина изображения ограничивается. Но если для тега через атрибут height также задана и высота, она не будет переопределена и изображение в итоге получится вытянутым по высоте и сжатым по ширине, поскольку соотношение сторон картинки больше не сохраняется.

На самом деле, это очень легко исправить, добавив в CSS свойство height: auto , чтобы также переопределить значение заданного в HTML атрибута height .
Однако, не для всех этот факт является очевидным и думаю, что порой именно из-за такого поведения разработчики избегают задания размеров через HTML. Если в атрибутах изображения размеры не заданы, в CSS можно просто указать max-width: 200px , при этом явно не указывая height: auto , и браузер сам рассчитает нужную высоту, как только изображение загрузится.
Следовательно, если мы добавляем размеры через HTML-атрибуты и при этом используем трюк height: auto , то получаем лучшее из обоих миров, так? Раскладка страницы не смещается, но остаётся возможность менять размер через CSS. Что ж, возможно вы будете удивлены (я был удивлён, поэтому и решил написать эту статью), но до недавнего времени это было не так.
Для примера, рассмотрим код ниже:
img Your title
Introductory paragraph.

Lorem ipsum dolor sit amet, consectetur…
В данной ситуации загрузка будет происходить следующим образом:
Погодите-ка, что здесь происходит? Мы вернулись к первой проблеме. Я же говорил, что указывая размеры изображения в HTML, можно избежать проблем со смещением элементов страницы. Становится интересно. Мы переходим к основной части данной статьи.
Проблема в том, что если в CSS в свойствах width и height задаётся не фиксированное значение (а в наше время адаптивности фиксированные значения и не используются), при рендеринге страницы возникает потребность получить размеры изображения из самого файла, прежде чем размеры сторон смогут быть посчитаны. При этом атрибуты width и height , заданные в HTML, игнорируются.
Следствием всего этого является то, что на деле задавать атрибуты для изображений нередко оказывается не настолько важным. Да, когда изображение показывается в полный размер без изменения его размеров с помощью CSS, полезно решить проблему смещения раскладки. Однако, когда используется CSS-код, целью которого является, например, предотвращение переполнения изображением доступного пространства, вы столкнётесь с проблемами.
Это влияет на любую страницу, на которой мы ограничиваем размер изображения адаптивным образом — например, устройства с маленьким экраном. Именно эти пользователи больше всего пострадают от смещения раскладки, поскольку используют менее мощные устройства и интернет с низкой скоростью. Конечно, в идеале мы должны для экрана каждого размера предоставить соответствующее изображение, но охватить все варианты не получится, поэтому изображения будут нуждаться в изменении размера браузером, в особенности для мобильных устройств.
На многих веб-сайтах атрибуты width и height для тегов не указываются. Это может происходить из-за того, что разработчики не знают об их пользе, или наоборот знали о том, что в большинстве случае в этом мало смысла. Какова бы не была причина, это встречается. Но как мы можем агитировать за это, если даже популярный инструмент аудита Lighthouse не считает данный момент ошибкой (хотя в свете некоторых моментов, о которых мы поговорим, уже обсуждается добавление данной оценки).
Решение проблемы
Ограничения для адаптивных изображений давно известны и были найдены способы решения этой проблемы, в том числе хак с использованием padding-bottom. В нём используется тот факт, что значение для свойства padding , заданное в процентах, всегда высчитывается из ширины родительского контейнера. Следовательно, это можно использовать для создания контейнера, высота которого будет пропорциональна его ширине. Например, у нас есть изображение с соотношением сторон 16:9, тогда следующий код создаст для этого изображения контейнер соответствующего размера.
.img-container < position: relative; padding-bottom: 56.25%; /* соотношение 16:9 */ height: 0; overflow: hidden; >.img-container img
У данной техники есть три основных проблемы:
- Она требует ручного расчёта и перевода в проценты значения (например, для соотношения 16/9 нужно 9÷16*100 = 56.25% ), что потенциально требует отдельного CSS-правила для каждого соотношения сторон.
- Запомнить набор всех необходимых свойств непросто — если забыть добавить или случайно удалить какую-то строку кода из примера выше, всё сломается. Не говоря уже о том, что эта техника требует, чтобы все изображения были обёрнуты в дополнительный элемент-контейнер.
- Данный подход известен и используется не всеми веб-разработчиками.
И давайте будем честны — это хак. И нам следовало бы писать код без его использования.
Проблема фиксированного соотношения сторон
Описанная выше проблема рассматривалась несколькими организациями по стандартизации.
Рабочая группа CSS (CSS Working Group) предложила свойство aspect-ratio , о котором писала Rachel Andrew. Как только браузеры начнут поддерживать его, будет решена проблема сложности кода и пример выше будет упрощён до следующего вида:
Намного лучше! Это особенно полезно для видео, где нам обычно доступен набор часто используемых соотношений сторон, позволяя создать несколько классов для каждого размера. Возможно, это менее полезно для изображений, где размеры менее стандартизированы, из-за чего остаются нерешёнными ни проблема №1 с необходимостью отдельного CSS-правила для каждого изображения, ни проблема №3 с необходимостью разработчикам не забывать применять этот код. Следовательно, это шаг вперёд, но пока что не решение всех проблем.
Помимо этого, Web Incubator Community Group (WICG) — группа разработчиков браузеров и других заинтересованных сторон, способных экспериментировать с технологиями ещё до формальной стандартизации — также предложили свой вариант решения. Речь об атрибуте intrinsicsize , который в коде выглядит следующим образом:
Так как это HTML-атрибут, он может быть установлен для каждого изображения (решая проблему №1 с необходимостью отдельного CSS-правила для каждого изображения) и относительно легко задаётся (решая проблему №2 с необходимостью запоминать большой объем кода), но всё ещё остаётся актуальной проблема с популярностью, если только сообщество не станет активно его продвигать.
У нас уже есть распространённый, хорошо известный метод установки width и height для элементов (даже если он не используется так часто, как хотелось бы), поэтому другие подобные решения неизбежно будут испытывать проблемы с принятием. И вот тут сам собой появляется ответ (теперь кажущийся очевидным).
Вместо введения фиксированного значения свойства aspect-ratio , здесь используется CSS-функция attr , чтобы задать соотношение сторон, соответствующее атрибутам width и height , заданным в HTML. Функция attr уже некоторое время существует, но имеет очень ограниченную область применения — все браузеры поддерживают её при использовании в свойстве «content», например, content: attr(width) . Но для других свойств это ещё не реализовано.
Если бы функция attr работала и в других свойствах, с её помощью можно было получать значение атрибутов width и height и использовать для расчёта значения свойства aspect-ratio , как в примере выше. Это решило бы проблему №1 (не требовалось бы вручную задавать соотношение сторон ни в HTML, ни в CSS), проблему №2 (небольшой объем кода для запоминания) и, как мы увидим дальше, это очень простое решение проблемы №3 (принятие разработчиками).
По сути, это решение значит, что если следующие четыре условия соблюдены, то правильные размеры изображения могут быть вычислены без необходимости ждать загрузки изображения, а значит и без риска смещения раскладки:
- для элемента задан HTML-атрибут height
- для элемента задан HTML-атрибут width
- height (или width ) задаётся в CSS — в том числе, с использованием процентных значений вида max-width: 100%
- width (или height ) устанавливается на auto в CSS
Если какое-то из них не было задано, вычислить значение будет невозможно, а следовательно, будет проигнорировано с дальнейшим ожиданием загрузки изображения.
Как только браузеры смогут использовать width и height для определения соотношения сторон изображения, мы сможем решить проблему, практически не меняя HTML и с помощью одной строки CSS-кода. Как упоминалось выше, возможно, некоторые разработчики считают, что это происходит уже сейчас.
Стимулирование использования этого решения
Поскольку предложенное решение — это просто работа CSS-стилей, в итоге пришли к тому, что его можно было просто добавить в таблицу стилей браузера, что не требовало бы от разработчиков никаких усилий для получения преимуществ.
Таблица стилей браузера — место, где заданы CSS-стили по умолчанию (например, какой font-size у элемента h1 ). При необходимости, их можно переопределить собственными правилами оформления. Добавляя вышеупомянутое свойство aspect-ratio , нам не нужно стимулировать использование этого решения разработчиками — мы, по сути, автоматически включаем его для всех сайтов, которые соответствуют четырём указанным выше условиям.
Однако, это зависит от функции attr , имеющей доступ к HTML-атрибутам width и height , и от свойства aspect-ratio — ни то, ни другое ещё полностью браузерами не поддерживается. Поэтому вместо этого, в качестве более простого решения, браузеры могут заложить такое поведение в коде рендеринга страницы, а не раскрывать его в таблицах стилей браузера, но эффект будет тот же. Такой альтернативный способ реализации даже был частью основного предложения.
Firefox первым реализовал этот принцип в виде эксперимента, после чего включил его по умолчанию в Firefox 71. Как только это было сделано, ваш сайт мог стать немного быстрее и удобнее. Возможно, в будущем это будет реализовано через таблицы стилей браузера, но пока что спасибо и на этом.
Обратная совместимость
При внесении изменений в поведение, всегда возникает беспокойство по поводу обратной совместимости, и эта функция не является исключением. В теории, если все четыре атрибута заданы правильно, проблем быть не должно.
Тем не менее, когда Firefox начали экспериментировать, обнаружились проблемы там, где width и height были заданы неправильно. Если раньше эти некорректные значения при переопределении CSS-стилями игнорировались бы, то теперь при установке значения auto они продолжали использоваться, что приводило к искажению пропорций изображения. Вы можете возразить, что разработчикам просто следует задавать правильные значения, а в некоторых случаях проблемы могут возникать и сейчас (как в приведённом выше примере, где не установили height: auto ). Но и повышать риск сломать разметку из-за небольшой ошибки — идея плохая. Это то, чего в вебе очень стараются избегать.
Решение этой проблемы относительно простое: пусть фактическое соотношение сторон изображения переопределяет значение, вычисленное в CSS. Таким образом, неправильно рассчитанное соотношение сторон будет использоваться для первоначально отрисованной страницы, но потом может быть пересчитано, когда изображение всё же загрузится. Это действительно может приводить к смещению макета (поскольку изначально выделенное может оказаться неправильным), но ведь так было и раньше. А в конечном счёте это ещё и лучше, поскольку неправильное соотношение сторон часто будет ближе к истине, чем нулевая начальная высота.
Внедрение в других браузерах
После успешного эксперимента Firefox, в Chrome также решили это реализовать (снова-таки, пока что с помощью изменения метода рендеринга, а не таблиц стилей браузера) и запустили по умолчанию в Chrome 79. Недавно, в январе 2020, Apple добавила данный функционал в Tech Preview версию Safari, так что вскоре он может появиться и в стабильной версии. Это будет значить, что последний из основных браузеров реализует это и веб станет лучше при использовании огромного количества сайтов.
Ограничения
При использовании данного функционала следует помнить о некоторых ограничениях, включая проблемы с:
- Art Direction
- Ленивой загрузкой
- Не изображениями
Art Direction
Фикс отлично работает для расчёта соотношения сторон, основанном на фиксированных width и height , но что если они меняются? Это называю art direction — ниже показан пример:
В этом случае мы используем широкое изображение для десктопов, а для мобильных — обрезанное квадратное. Адаптивность изображений может быть реализована с помощью атрибутов srcset элемента :
или с помощью элемента :
В настоящее время оба эти элемента позволяют задавать в теге атрибуты width и height только один раз. Также, их нельзя задавать в . Уже было предложено добавить возможность делать это, но пока что использование адаптивных изображений разных размеров всё равно будет приводить к смещению раскладки.
Ленивая загрузка
Данный функционал отлично сочетается с ленивой загрузкой. В идеале, при ленивой загрузке все изображения должны загружаться при прокрутке страницы по мере приближения к области видимости, но всё же за её пределами. Но порой это не происходит, если пользователь, например, очень быстро прокручивает страницу или скорость соединения слишком мала. Наличие правильно заданного пространства, по крайней мере, поможет избежать смещения раскладки после загрузки изображения. Кроме того, даже когда загрузка происходит за пределами области видимости, смещение раскладки может быть дорогостоящим с точки зрения затрат ресурсов процессора. Это было показано выше.
Некоторые техники ленивой загрузки могут включать отсутствие элемента или, по крайней мере, атрибута src (для предотвращения загрузки изображения браузером по умолчанию). Следовательно, в предложенных нововведениях может и не быть существенной пользы, в зависимости от того, как браузер обрабатывает элемент
, с атрибутом src или без него. Хотя, если данное CSS-решение станет доступным, разработчики получат больше контроля над соотношением сторон.
Недавно командой Chrome была внедрена встроенная ленивая загрузка, после чего она была добавлена в спецификацию HTML. Вскоре эта функция появится и в Firefox а затем, надеюсь, и в Safari. В этом случае используется элемент с атрибутом src с примерно следующим синтаксисом:
Отлично. Что ж, к сожалению, я обнаружил, что это решение с высотой и шириной несовместимо с ранее добавленным встроенным функционалом ленивой загрузки, в чём можно убедиться на этой тестовой странице. Я сообщил об этой ошибке и надеюсь, что команда Chrome исправит её (Update: было исправлено в Chrome 83).
Не изображения
В данный момент браузеры, которые реализовали данный функционал, сделали это только для элемента , но это также было бы полезно и для элементов , и и этот вопрос обсуждается. Снова-таки, если данное CSS-решение станет доступным через функцию attr и свойство aspect-ratio , разработчики смогут реализовать его для любых необходимых элементов.
Заключение
Мне нравятся улучшения, которые работают без каких-либо усилий со стороны владельцев веб-сайтов. Конечно, я не говорю, что всю работу должны делать разработчики браузеров и команды, занимающиеся стандартизацией, но часто наиболее сдерживающим фактором является необходимость начать массовое использование новых решений в коде. Чем меньше будет барьеров, тем больше вероятность, что новые решения будут приняты. Устранение сдвигов раскладки при использовании адаптивных изображений кажется одним из таких улучшений.
Единственное что потребуется от веб-разработчиков, — задавать атрибуты width и height в разметке. Нам не следует отказываться от этой привычки, а многие CMS лишь помогают в этом. Согласно данным HTTPArchive, 62% тегов имеют ширину или высоту, что намного выше, чем я ожидал, если честно. Но давайте попробуем увеличить эту статистику еще больше, теперь у нас снова есть причина для этого. Итак, я призываю вас делать это при разработке сайтов. Это улучшит удобство ваших пользователей и, в конечном итоге, сделает их счастливее, а не к этому ли мы все стремимся?
От переводчика:
Мне написал @Alexandr_Mi, указав на ещё один вариант решения данной проблемы с помощью «data: image / svg + xml + lazyload».
Подробнее в заметке на Reddit
Мобильный стиль. Корректирование и доработка
Не пришло в голову куда написать, решил, что это все таки коллективная работа. Ребята, а это что за приколы в мобильном стиле:
@media screen and (max-width: 540px)
mobile.5.css:22
img max-width: 100% !important ;
height: auto;
>
Нафига такие приоритеты на все картинки на всем форуме? Это с расчетом, что перебивать даже не пытайтесь? Итак импортантов хватает. Я не видел мобильный вариант, но. Посмотрел, хватило части (лучше бы не видел):
@media screen and (max-width: 540px) html, body, #pun, .punbb width: 100% !important ;
height: 100% !important ;
margin: 0;
padding: 0;
background-size: contain;
-moz-text-size-adjust: none;
-webkit-text-size-adjust: none;
-ms-text-size-adjust: none;
overflow-wrap: break-word;
float: none;
>
body position: relative;
background-position: center 0;
overflow-x: hidden !important ;
-webkit-overflow-scrolling: touch !important ;
overflow-y: scroll !important ;
z-index: 1;
>
Я даже не хочу смотреть дальше код, и это под одно разрешение. Это надо отключать — это не мобильный вариант, более того люди, которые хотят адаптировать свои форумы под мобильные устройства будут об эти импортанты постоянно спотыкаться. Это на уровне сервиса внедрять было нельзя.
Не удержался глянул дальше:
#pun width: 100% !important;
border-width: 0 !important;
overflow-x: hidden !important;
margin: 0 !important;
padding: 0 !important;
>
Этот файл сервиса: http://forum4.ru/style/mobile.5.css ? — Посмотрел, это файл сервиса. Это надо отключать, и так сложно что-то адаптировать, а с такими раскладами еще и просчитывать импортанты для мобильных стилей..
Отредактировано kolobdur74 (Вс, 19 Фев 2017 23:37:20)
Поделиться2Пн, 20 Фев 2017 05:44:16
- Автор: Alex_63
- Администратор
- Зарегистрирован : Чт, 11 Дек 2014
- Сообщений: 10525
- Уважение: +6926
- Позитив: +5173
- Пол: Мужской
- Последний визит:
Пн, 22 Янв 2024 20:49:00
kolobdur74
Ну импортанты легко перебиваются более подробным указанием селектора(собсно ты где-то про это и писал в теме)
К примеру
Без !important многие правки для мобилок просто не срабатывают, особенно с учетом того, что юзеры любят пихать кучу кодов -правок в HTML верх, ниже мобильного стиля, тады без !important их не перекрыть(если поменяем — наверняка будут жалобы от юзеров, что форум съехал и т.п)
С другой стороны кнешн согласен, что много импортантов — не Айс, но и без них тут вряд ли обойтись
Автор правок под мобильный стиль — Reysler, он не первый год с css знаком, мон сказать профессионал в этой области(а ты и мну дилетанты, так что мож не оч правильная точка зрения у нас)
Ксать есть тема про мобильный стиль Вопросы по мобильному стилю
Поделиться3Пн, 20 Фев 2017 05:45:21
- Автор: Reysler
- LastMan
- Зарегистрирован : Вт, 9 Дек 2008
- Сообщений: 3380
- Уважение: +2032
- Позитив: +639
- Пол: Мужской
- Последний визит:
Вчера 17:08:14
Наверное надо было мне дописать тему по сборке собственного мобильного стиля (для этого я её и создавал). Может добить её на основе существующего от сервиса, но с рядом доработок, убрав лишние important’s и меню на выбор пользователя: иконками или текстом.
Поделиться4Пн, 20 Фев 2017 13:20:54
- Автор: kolobdur74
- .
- Зарегистрирован : Пн, 6 Сен 2010
- Сообщений: 7337
- Уважение: +5796
- Позитив: +6428
- Пол: Мужской
- Последний визит:
Вчера 21:57:49
Alex_63, Reysler
Ну, вот я убрал в стандартном все импортанты и посмотрел как работает:




Ну, и картина мной ожидаемая — всё работает, кроме части правок под браузерные движки, вот на них, если есть необходимость импортанты можно оставить, а со всего остального надо убрать.. Ведь на самом деле уже задано приоритетное правило для данного разрешения: @media screen and (max-width: 540px) — то есть уже задано, что при данном разрешении работает дизайн под этими скобками, а основной работает, если не противоречит заданным правилам для этого разрешения.
Код:
Можно потестить, особенно хорошо бы глянуть с реального устройства.
Alex_63 написал(а):
Ксать есть тема про мобильный стиль Вопросы по мобильному стилю
Не увидел эту тему
Reysler написал(а):
Наверное надо было мне дописать тему по сборке собственного мобильного стиля (для этого я её и создавал). Может добить её на основе существующего от сервиса, но с рядом доработок, убрав лишние important’s и меню на выбор пользователя: иконками или текстом.
Alex_63, Reysler просьба — поменяйте название темы к примеру на: Мобильный стиль. Разработка. Или что нибудь подобное..
Отредактировано kolobdur74 (Пн, 20 Фев 2017 13:50:58)
Поделиться5Вт, 21 Фев 2017 11:12:46
- Автор: Alex_63
- Администратор
- Зарегистрирован : Чт, 11 Дек 2014
- Сообщений: 10525
- Уважение: +6926
- Позитив: +5173
- Пол: Мужской
- Последний визит:
Пн, 22 Янв 2024 20:49:00
kolobdur74 написал(а):
Ну, и картина мной ожидаемая — всё работает,
Alex_63 написал(а):
юзеры любят пихать кучу кодов -правок в HTML верх, ниже мобильного стиля, тады без !important их не перекрыть
Но в принципе согласен, что нун по возможности минимализировать количество импортантов, я тож попробую — потещу(проверить мобильный стиль сейчас есть с чего, правда там мобильный Msie 10, но в целом понятно будет)
kolobdur74 написал(а):
Alex_63, Reysler просьба — поменяйте название темы к примеру на: Мобильный стиль. Разработка. Или что нибудь подобное..
Назвал Мобильный стиль. Корректирование и доработка — так норм?
Поделиться6Вт, 21 Фев 2017 12:54:06
- Автор: kolobdur74
- .
- Зарегистрирован : Пн, 6 Сен 2010
- Сообщений: 7337
- Уважение: +5796
- Позитив: +6428
- Пол: Мужской
- Последний визит:
Вчера 21:57:49
Alex_63 написал(а):
юзеры любят пихать кучу кодов -правок в HTML верх, ниже мобильного стиля, тады без !important их не перекрыть
Дык, в теории если те правки не вставлены в @media screen and, то работают только для обычного стиля..
Alex_63 написал(а):
Назвал Мобильный стиль. Корректирование и доработка — так норм?
Поделиться7Вт, 21 Фев 2017 21:20:10
- Автор: Alex_63
- Администратор
- Зарегистрирован : Чт, 11 Дек 2014
- Сообщений: 10525
- Уважение: +6926
- Позитив: +5173
- Пол: Мужской
- Последний визит:
Пн, 22 Янв 2024 20:49:00
kolobdur74 написал(а):
Дык, в теории если те правки не вставлены в @media screen and, то работают только для обычного стиля..
Ну на мобильном-то они тож срабатывают, и скорее всего перекроют то, что прописано в mobile.5.css(если там не будет импортантов). Хотя не уверен, это тестить нун
Поделиться8Вт, 21 Фев 2017 22:52:18
- Автор: kolobdur74
- .
- Зарегистрирован : Пн, 6 Сен 2010
- Сообщений: 7337
- Уважение: +5796
- Позитив: +6428
- Пол: Мужской
- Последний визит:
Вчера 21:57:49
Alex_63 написал(а):
Ну на мобильном-то они тож срабатывают, и скорее всего перекроют то, что прописано в mobile.5.css(если там не будет импортантов). Хотя не уверен, это тестить нун
С чего они должны перекрыть? Ты задал правило для данного разрешения — оно имеет выше приоритет без правила для данного разрешения, и пофиг где это прописано. А вот с импортантами система приоритетов уже начинает меняться, бо импортант уже можно перкрыть только импортантом у которого селекторов прописано больше и так до пока селекторы не закончились. Исключения — это хаки для браузера, ну на подобии, что мы с тобой недавно сталкивались — перебить цвет импунта — вот такие хаки, да должны быть с импортантами всегда, но в данном файле я их не заметил.. Остальные обычные правила работают, если не противоречат специальным правилам, прописанным под данные разрешения. Вот с таблицами сложнее — систему приоритетов в таблицах, по моему, точно не знают сами разработчики CSS правил. Но протестить на реальных аппаратах тем не менее стоит.
И да, если кто-то делает стиль для мобильного — они могут перекрыть, но это уже проблемы того кто делает отличный дизайн от оригинала. Ты же видишь, что в оригинале импортантов фактически нет и это для сервиса нормально, хотя тоже, по моему, Герда ругалась, что везде .punbb указывается, что тоже не очень универсально..
Отредактировано kolobdur74 (Вт, 21 Фев 2017 23:19:47)
Проверь что ты задал стиль для img
HTML-элемент встраивает изображение в документ. Это замещаемый элемент.
Интерактивный пример
Приведённый выше пример показывает очень простое использование элемента . Атрибут src обязателен и содержит путь к изображению, которое вы хотите встроить в документ. Атрибут alt содержит текстовое описание изображения, которое не обязательно, но невероятно полезно для доступности — программы чтения с экрана читают это описание своим пользователям, так они знают какое изображение показано, и так же оно отображается на странице, если изображение не может быть загружено по какой-либо причине.
Есть много других атрибутов, которые могут быть указаны для достижения различных целей, например:
- управление Referrer/CORS в целях безопасности. Смотрите ниже атрибуты crossorigin и referrerpolicy ;
- настройка внутреннего размера (en-US) с использованием width и height , которые полезны, когда вы хотите задать пространство занимаемое изображением, чтобы обеспечить стабильность макета страницы перед его загрузкой;
- адаптивные изображения рекомендуется использовать с атрибутами sizes и srcset (смотрите также элемент и наше руководство «Адаптивные изображения»).
| Категории контента | Потоковый контент, фразовый контент, встроенный контент, явный контент. Если элемент имеет атрибут usemap , он так же принадлежит к категории интерактивного контента. |
|---|---|
| Допустимое содержимое | Никакое, так как это пустой элемент. |
| Пропуск тегов | Должен иметь открывающий тег и не должен иметь закрывающий. |
| Допустимые родители | Любой элемент, который разрешает встроенный контент в качестве содержимого. |
| Допустимые ARIA-роли | Любые |
| DOM-интерфейс | HTMLImageElement |
Поддерживаемые форматы изображений
Стандарт HTML не содержит списка форматов изображений, которые должны поддерживаться. Поэтому разные пользовательские агенты поддерживают разные наборы форматов.
Firefox
Форматы изображений, поддерживаемые Firefox:
Ошибки загрузки изображения
Если ошибка происходит во время загрузки или отрисовки изображения и обработчик события onerror был настроен на обработку события error (en-US) , тогда этот обработчик события будет вызван. Это может произойти в ряде ситуаций, в том числе когда:
- атрибут src пустой или null;
- указанный URL в атрибуте src совпадает с URL страницы, на которой в данный момент находится пользователь;
- указанное изображение каким-то образом повреждено, что препятствует его загрузке;
- метаданные указанного изображения повреждены таким образом, что невозможно получить его размеры, и в атрибутах элемента
не было указано никаких размеров;
- указанное изображение имеет формат, который не поддерживается пользовательским агентом.
Атрибуты
К этому элементу применимы глобальные атрибуты.
Этим атрибутом задаётся альтернативное текстовое описание изображения.
Примечание: Браузеры не всегда отображают изображение на которое ссылается элемент. Это относится к неграфическим браузерам (включая те, которые используются людьми с нарушениями зрения), если пользователь решает не отображать изображения, или если браузер не может отобразить изображение, потому что оно имеет неверный или неподдерживаемый тип. В этих случаях браузер может заменить изображение текстом записанным в атрибуте alt элемента. По этим и другим причинам вы должны по возможности предоставлять полезное описание в атрибуте alt . Примечание: Пропуск этого атрибута в целом указывает, что изображение является ключевой частью контента и текстовый эквивалент не доступен. Установка этого атрибута в значение пустой строки ( alt=»» ) указывает, что это изображение не является ключевой частью контента (декоративное), и что невизуальные браузеры могут пропустить его при рендеринге (en-US).
Этот атрибут указывает, следует ли использовать CORS при загрузке изображения или нет. Изображения с включённой поддержкой CORS могут быть повторно использованы в элементе не будучи «испорченными». Допустимые значения:
- anonymous : Запрос cross-origin (т.е. с HTTP-заголовком Origin ) выполняется, но параметры доступа не передаются (т.е. нет cookie, не используется стандарт X.509 или базовая HTTP-аутентификация). Если сервер не предоставляет параметры доступа исходному сайту (не устанавливая HTTP-заголовок Access-Control-Allow-Origin ), изображение будет «испорчено» и его использование будет ограничено;
- use-credentials : Запрос cross-origin (т.е. с HTTP-заголовком Origin ) выполняется вместе с передачей параметров доступа (т.е. есть cookie, используется стандарт X.509 или базовая HTTP-аутентификация). Если сервер не предоставляет параметры доступа исходному сайту (посредством HTTP-заголовка Access-Control-Allow-Origin ), изображение будет «испорчено» и его использование будет ограничено.Если этот атрибут не задан, то CORS при загрузке изображения не используется (т.е. без отправки HTTP-заголовка Origin ), ограничивая его использование в элементе . Если задан неправильно, то он обрабатывается так, как если бы использовалось значение anonymous . Для получения дополнительной информации смотрите «Настройки атрибутов CORS».
Предоставляет рекомендации браузеру по декодированию изображения. Допустимые значения:
- sync : Декодировать изображение синхронно для одновременного отображения с другим контентом;
- async : Декодировать изображение асинхронно, чтобы уменьшить задержку отображения другого контента;
- auto : Режим по умолчанию, который указывает на отсутствие предпочтений к режиму декодирования. Браузер решает, что лучше для пользователя.
Внутренняя высота (см. Внутренний размер (en-US)) изображения в пикселях.
Указывает сравнительную важность ресурса. Приоритет выбирается с помощью значений:
- auto : Указывает на отсутствие предпочтений. Браузер может использовать собственную эвристику для определения приоритета изображения;
- high : Указывает браузеру, что изображение имеет высокий приоритет;
- low : Указывает браузеру, что изображение имеет низкий приоритет.
Этот атрибут говорит браузеру игнорировать действительный внутренний размер (en-US) изображения и делать вид, что это размер, указанный в атрибуте. В частности, изображение будет растровым в этих измерениях, а narutalWidth / naturalHeight изображения будут возвращать значения, указанные в этом атрибуте. Объяснение, примеры.
Это атрибут логического типа, указывающий, что изображение является частью серверной карты ссылок. Если это так, то точные координаты клика отправляются на сервер.
Примечание: Этот атрибут разрешён, только если элемент является потомком элемента с валидным (соответствующий требованиям) атрибутом href .
loading Экспериментальная возможность
Указывает на то, как браузер должен загрузить изображение:
- eager : Загружает изображение немедленно независимо от того, находится оно в области просмотра или нет (является значением по умолчанию).
- lazy : Откладывает загрузку изображения до того момента, пока оно не достигнет подсчитанного расстояния области просмотра, определяемого браузером. Данное значение помогает избежать использования ресурсов сети и хранилища, необходимых для обработки изображения, пока это действительно не понадобится. В большинстве случаев использование этого аргумента улучшает производительность.
Примечание: Загрузка откладывается только тогда, когда включён JavaScript. Это анти-трэкинг мера. Если бы пользовательский клиент поддерживал опцию отложенной загрузки изображения при отключённом JavaScript, то сайт имел бы возможность отслеживать приблизительную позицию области просмотра в течение сессии пользователя, размещая изображения на странице таким образом, чтобы сервер мог отслеживать, сколько изображений загружено и когда.
Строка, указывающая, какой реферер (referrer) использовать при выборке ресурсов:
- no-referrer : Заголовок Referer не будет отправлен;
- no-referrer-when-downgrade : Заголовок Referer не отправляется, когда происходит переход к источнику без TLS (HTTPS). Это поведение по умолчанию для пользовательских агентов, если не указано иное;
- origin : Заголовок Referer будет содержать схему адресации ресурса (HTTP, HTTPS, FTP и т.д), хост и порт;
- origin-when-cross-origin : Переход на другие источники ограничит включённые реферальные данные схемой адресации ресурса, хостом и портом, в то время как переход из того же источника будет включать полный путь реферала;
- unsafe-url : Заголовок Referer будет включать источник и путь, но не фрагмент URL, пароль или имя пользователя. Этот метод небезопасен, потому что будет утечка источников и путей от ресурсов, защищённых TLS, к незащищённым источникам.
Список из одного или нескольких строк, разделённых запятыми, указывающих набор размеров источника. Каждый размер источника состоит из:1. Условия медиа-запроса. Должно быть пропущено для последнего элемента. 2. Значения размера источника.Значения размера источника устанавливаются исходя из предполагаемых размеров изображения. Пользовательские агенты используют текущий размер источника, чтобы выбрать один из источников, предоставленных атрибутом srcset , если эти источники описываются с помощью дескриптора ширины ‘ w ‘ (сокращение от width). Выбранный размер источника влияет на внутренний размер (en-US) изображения (отображаемый размер изображения, если не применены стили CSS). Если атрибут srcset отсутствует или не содержит значений с дескриптором ‘ w ‘, то атрибут sizes не будет иметь никакого эффекта.
URL изображения. Этот атрибут является обязательным для элемента . В браузерах, поддерживающих srcset , src обрабатывается как изображение-кандидат с дескриптором плотности пикселей 1x , если только изображение с этим дескриптором уже не определено в srcset или если srcset не содержит дескрипторы ‘ w ‘.
Список из одной или нескольких строк, разделённых запятыми, указывающих набор возможным источников изображения для использования пользовательскими агентами. Каждая строка состоит из:1. URL изображения. 2. Необязательного, пробела, сопровождаемого:
- дескриптором ширины или положительным целым числом, за которым сразу же следует ‘ w ‘. Дескриптор ширины делится на размер источника, полученный из атрибута sizes , для расчёта эффективной плотности пикселей;
- дескриптором плотности пикселей, который является положительным числом с плавающей точкой за которым сразу же следует ‘ x ‘.Если не указано ни одного дескриптора, то источнику присваивается дескриптор по умолчанию: 1x .Нельзя смешивать дескрипторы ширины с дескрипторами плотности пикселей в одном атрибуте srcset . Повторение дескрипторов (например, два источника в одном srcset с одинаковым дескриптором ‘ 2x ‘) так же является недопустимым.Пользовательские агенты выбирают любой из доступных источников на своё усмотрение. Это предоставляет им значительную свободу действий для адаптации их выбора на основе таких вещей, как предпочтения пользователя или пропускная способность. Смотрите наше руководство «Адаптивные изображения» для примера.
Внутренняя ширина (см. Внутренний размер (en-US)) изображения в пикселях.
Неполный URL (начиная с ‘ # ‘) карты-изображения, связанной с элементом.
Примечание: вы не можете использовать этот атрибут, если элемент является потомком элемента или .
Устаревшие атрибуты
Выравнивание изображения относительно окружающему его контексту. Этот атрибут больше не должен быть использован — вместо этого используйте CSS-свойства float и/или vertical-align . Вы можете так же использовать CSS-свойство object-position для позиционирования изображения внутри границ элемента . Допустимые значения:
- top : Аналог vertical-align: top или vertical-align: text-top ;
- middle : Аналог vertical-align: -moz-middle-with-baseline ;
- bottom : Отсутствует значение по умолчанию, аналог vertical-align: unset или vertical-align: initial ;
- left : Аналог float: left ;
- right : Аналог float: right .
Ширина рамки вокруг изображения. Вы должны использовать CSS-свойство border вместо этого атрибута.
Отступ слева и справа от изображения в пикселях. Вы должны использовать CSS-свойство margin вместо этого атрибута.
Ссылка на более подробное описание изображения. Возможными значениями являются URL или id элемента.
Примечание: Этот атрибут упомянут в последней версии от W3C, HTML 5.2, но был удалён из живого стандарта HTML от WHATWG. У него неопределённое будущее; авторы должны использовать альтернативы WAI-ARIA, такие как aria-describedby или aria-details.
Имя для элемента. Вы должны использовать атрибут id вместо этого атрибута.
Отступ сверху и снизу от изображения в пикселях. Вы должны использовать CSS-свойство margin вместо этого атрибута.
Взаимодействие с CSS
является замещаемым элементом; по умолчанию он имеет значение свойства display равное inline , но его размеры по умолчанию определяются внутренними значениями (см. внутренний размер (en-US)) встроенного изображения. Вы можете установить на изображение такие свойства, как border / border-radius , padding / margin , width / height и так далее.
Однако, часто бывает полезно установить для изображений свойство display в значение block , так что вы имеете максимальный контроль над стилизацией (например, margin: 0 auto не работает на изображениях с display: inline , легче размещать изображения в контексте с окружающими элементами, когда они являются блочными).
У нет базовой линии, когда изображения используются в ситуации со строчным форматированием ( display: inline ) вместе с vertical-align : baseline , нижняя граница изображения будет размещена на базовой линии контейнера.
Вы можете использовать свойство object-position для позиционирования изображения внутри границ элемента и свойством object-fit регулировать размеры изображения внутри этих границ (например, должно ли изображение помещаться в границы элемента или заполнить элемент полностью, даже если потребуется обрезка).
В зависимости от типа, изображение может иметь собственную (внутреннюю) ширину и высоту. Для некоторых типов изображений тем не менее внутренние размеры (en-US) не обязательны. SVG-изображения, например, могут не иметь внутренних размеров, если для корня их элемента не заданы width и height .
Примеры
Альтернативный текст
Следующий простой пример встраивает изображение с альтернативным текстом в страницу для улучшения доступности.
img src="https://developer.mozilla.org/static/img/web-docs-sprite.22a6a085cf14.svg" alt="Логотип MDN - изображение динозавра с текстом MDN web docs" />
Изображение-ссылка
Этот пример основан на предыдущем и показывает как превратить изображение в ссылку. Это очень просто сделать так — вы вставляете тег внутрь элемента . Также вы должны изменить альтернативный текст, чтобы он описывал назначение ссылки.
a href="https://developer.mozilla.org"> img src="https://developer.mozilla.org/static/img/web-docs-sprite.22a6a085cf14.svg" alt="Посетить сайт MDN" /> a>
Использование атрибута srcset
В этом примере мы добавляем атрибут srcset , содержащий ссылку на версию логотипа в высоком разрешении; оно будет загружено вместо изображения в src на устройствах с высоким разрешением. Изображение указанное в атрибуте src , считается 1x кандидатом в пользовательских агентах, которые поддерживают srcset .
img src="mdn-logo-sm.png" alt="MDN" srcset="mdn-logo-HD.png 2x" />
Использование атрибутов srcset и sizes
Атрибут src игнорируется в пользовательских агентах, которые поддерживают srcset , когда добавлены дескрипторы ‘ w ‘. Когда условие медиавыражения (max-width: 600px) совпадает с состоянием устройства, будет загружено изображение шириной 200px (оно то самое, которое наиболее близко соответствует 200px, указанным в медиавыражении), иначе будет загружено другое изображение.
img src="clock-demo-thumb-200.png" alt="Часы" srcset="clock-demo-thumb-200.png 200w, clock-demo-thumb-400.png 400w" sizes="(max-width: 600px) 200px, 50vw" />
Проблемы безопасности и приватности
Хотя у элементов есть множество безобидных применений, они могут иметь нежелательные последствия для безопасности и приватности пользователя. Смотрите «Заголовок Referer: проблемы приватности и безопасности (en-US) » для получения дополнительной информации.
Проблемы доступности
Создание значимых альтернативных описаний
Значение атрибута alt должно чётко и кратко описывать содержимое изображения. Он не должен описывать наличие самого изображения или название файла изображения. Если атрибут alt намеренно пропущен, потому что изображение не имеет текстового эквивалента, рассмотрите альтернативные способы представления содержимого, которое изображение пытается передать.
Плохо
img alt="image" src="penguin.jpg" />
Хорошо
img alt="Пингвин на пляже." src="penguin.jpg" />
Когда у изображения отсутствует атрибут alt , некоторые программы чтения с экрана могут объявить вместо него имя файла изображения. Это может привести к путанице, если имя файла не соответствует содержимому изображения.
- Дерево решений атрибута alt • Изображения • Веб-руководство WAI по доступности.
- Альтернативные тексты: максимальное руководство — Axess Lab.
- Как создать отличный альтернативный текст: введение | Deque.
- MDN Понимание WCAG, Руководство 1.1. объяснения (en-US).
- Понимание критерия успешного исхода 1.1.1 | W3C Понимание WCAG 2.0.
Атрибут title
Атрибут title не является приемлемой заменой атрибута alt . Кроме того, избегайте повторения значения атрибута alt в атрибуте title , объявленном на том же изображении.
Атрибут title также не должен использоваться в качестве подписи, сопровождающей альтернативное описание изображения. Если изображению нужна подпись, используйте элемент вместе с элементом .
Спецификации
| Specification |
|---|
| HTML Standard # the-img-element |
Совместимость с браузерами
BCD tables only load in the browser
Смотрите также
- Изображения в HTML.
- Адаптивные изображения.
- Элементы , (en-US) и .
- Связанные с изображениями CSS-свойства: object-fit , object-position , image-orientation (en-US), image-rendering (en-US), и image-resolution (en-US).
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 6 янв. 2024 г. by MDN contributors.
Your blueprint for a better internet.