Java, UX, HTML, CSS, WEB-design

Проектирование единицы соотношения сторон для CSS

Краткое описание по статье Проектирование единицы соотношения сторон для CSS

Название: Проектирование единицы соотношения сторон для CSS . Краткое описание: ⭐ Рэйчел Энд . Дата публикации: 25.01.2022 . Автор: Алишер Валеев .

Для чего создан сайт Novosti-Nedeli.ru

Данный сайт посвящен новостям мира и мира технологий . Также тут вы найдете руководства по различным девайсам.

Сколько лет сайту?

Возраст составляет 3 года


  • Рэйчел Эндрю

  • 0 Комментарии

Проектирование единицы соотношения сторон для CSS

  • 9 минут чтения

  • CSS, браузеры

Краткое резюме ↬

Рабочая группа CSS разработала единицу соотношения сторон для CSS. Хотя этого еще нет в браузерах, в этой статье рассматривается процесс разработки нового метода изменения размера и объясняется, как он будет работать.

Одна из вещей, которая снова и снова всплывает в CSS, — это тот факт, что нет способа изменить размер объектов на основе их соотношения сторон. В частности, при работе с адаптивным дизайном часто требуется установить ширину в процентах, а высоту — в соответствии с некоторым соотношением сторон. Это то, что недавно обсуждали люди, ответственные за разработку CSS (т.е. Рабочая группа CSS), и предложенное решение было согласовано на недавней встрече CSSWG в Сан-Франциско.

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

Какую проблему мы пытаемся решить?

Проблема в отношении незаменяемых элементов, у которых нет внутреннего соотношения сторон. Заменяемые элементы — это такие вещи, как изображения или видео, размещенные с <video> элемент. Они отличаются от других блоков в CSS тем, что имеют заданные размеры и собственное поведение. Говорят, что эти замененные элементы имеют внутреннее соотношение сторон из-за того, что они имеют размеры.

Div или какой-либо другой элемент HTML, который может содержать ваш контент, не имеет соотношения сторон, вы должны задать ему ширину и высоту. Нельзя сказать, что вы хотите сохранить соотношение сторон 16/9, и что какой бы ни была ширина, высота должна быть рассчитана с использованием заданного соотношения сторон.

Еще после прыжка! Продолжить чтение ниже ↓

Очень распространена ситуация, когда вы хотите встроить iframe для отображения видео с сайта обмена видео, такого как YouTube. Если вы используете <video> элемент, то видео имеет соотношение сторон, как и изображение. Это не тот случай, если видео находится в другом месте и вы используете вставку. Вам нужно, чтобы ваше видео было адаптивным, но при этом сохраняло правильное соотношение сторон видео. Однако, если вы установите ширину на 100%, вы получите необходимость затем установить высоту. Ваше видео растягивается или сжимается.

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

См. Пример 1 соотношения сторон пера от Рэйчел Эндрю.

См. Пример 1 соотношения сторон пера от Рэйчел Эндрю.

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

См. Пример 2 соотношения сторон пера от Рэйчел Эндрю.

См. Пример 2 соотношения сторон пера от Рэйчел Эндрю.

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

Текущие решения соотношения сторон

Веб-разработчики справляются с отсутствием какого-либо соотношения сторон в CSS различными способами, основным из которых является «заполнение». В этом решении используется тот факт, что % заполнения в направлении блока (то есть заполнение сверху и снизу в горизонтальном языке сверху вниз) рассчитывается на основе встроенного размера (ширины).

В статье «Боксы с соотношением сторон» на CSS-Tricks есть хорошее изложение текущих методов создания блоков с соотношением сторон. Хак с отступами работает во многих случаях, но для того, чтобы заставить его работать хорошо, нужно пройти через кучу обручей. Это также ни в малейшей степени не интуитивно понятно — даже если вы знаете, почему и как это работает. Это те вещи, которые мы хотим попытаться решить в Рабочей группе CSS. Лично я чувствую, что чем больше мы получаем элегантных решений для макета в CSS, тем больше выделяются беспорядочные хаки, которые мы должны исправить.

Для ситуации с видео вы можете использовать JavaScript. Очень популярным решением является использование FitVids, как это также описано в статье CSS-Tricks. Использование JavaScript — разумное решение, но нужно загрузить больше скриптов, а также кое-что еще, что нужно помнить. Вы не можете просто вставить видео в свой контент, и оно просто работает.

Предлагаемое решение

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

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

Новое свойство, введенное в спецификацию Sizing, — это aspect-ratio имущество. Это свойство будет принимать значение, которое представляет собой соотношение сторон, такое как 16/9. Например, если вам нужен квадратный блок с одинаковой шириной и высотой, вы должны использовать следующее:

.box {
  width: 400px;
  height: auto;
  aspect-ratio: 1/1;
}

Для коробки 16/9 (например, для видео):

.box {
  width: 100%;
  height: auto;
  aspect-ratio: 16/9;
}

Для примера с квадратными элементами в макете сетки мы оставляем наши дорожки сетки с автоматическим размером, что означает, что они будут брать свой размер из элементов; Затем мы делаем наши элементы размером с aspect-ratio Блок.

.grid {
    display: grid;
    grid-template-columns: repeat(autofill, minmax(200px, 1fr));
}

.item {
    aspect-ratio: 1/1;
}

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

Что произойдет, если вы укажете поле соотношения сторон, но затем добавите в него слишком много содержимого? Эта же проблема поднимается в статье CSS-Tricks о хаке с отступами — для ее исправления требуются столь же неинтуитивные решения.

Работа с переполнением

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

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

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

См. Пример 3 соотношения сторон пера от Рэйчел Эндрю.

См. Пример 3 соотношения сторон пера от Рэйчел Эндрю.

Исправление для этого в макете сетки заключается в использовании minmax() для вашего размера трека и сделайте максимальное значение auto. В таком случае, auto можно рассматривать как «достаточно большой, чтобы соответствовать содержанию». Затем вы получаете набор аккуратно выглядящих блоков, которые, если поступает больше контента, чем ожидалось, увеличиваются, чтобы принять этот контент. (Бесконечно лучше, чем беспорядочное переполнение или обрезанный контент.)

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

См. Пример 4 соотношения сторон пера, автор Рэйчел Эндрю.

См. Пример 4 соотношения сторон пера, автор Рэйчел Эндрю.

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

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

Комментирование предложений в процессе

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

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

Сокрушительная редакция
(иль)




Source: https://smashingmagazine.com

Заключение

Вы ознакомились с статьей — Проектирование единицы соотношения сторон для CSS

Пожалуйста оцените статью, и напишите комментарий.

Похожие статьи

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

Ваш адрес email не будет опубликован.

Кнопка «Наверх»