Мне интересно, как бы я мог создать макет с адаптивными квадратами . Каждый квадрат будет иметь вертикально и горизонтально выровненный контент. Конкретный пример показан ниже ...
html
css
responsive-design
grid-layout
aspect-ratio
garethdn
источник
источник
Ответы:
Вы можете создать адаптивную сетку квадратов с содержимым по вертикали и по центру только с помощью CSS . Я объясню, как в пошаговом процессе, но сначала приведем 2 демонстрации того, чего вы можете достичь:
Теперь давайте посмотрим, как сделать эти модные адаптивные квадраты!
1. Создание адаптивных квадратов:
Хитрость в том, что элементы должны быть квадратными (или с любым другим соотношением сторон) - использовать процент
padding-bottom
.Примечание: вы можете использовать верхнее заполнение или верхнее / нижнее поле, но фон элемента не будет отображаться.
Поскольку верхний отступ рассчитывается в соответствии с шириной родительского элемента ( см. MDN для справки ), высота элемента будет меняться в зависимости от его ширины. Теперь вы можете сохранить его соотношение сторон в соответствии с его шириной.
На данный момент вы можете код:
HTML :
CSS
Вот простой пример компоновки сетки 3 * 3 квадратов с использованием приведенного выше кода.
С помощью этой техники вы можете сделать любое другое соотношение сторон, вот таблица, в которой приведены значения нижнего отступа в соответствии с соотношением сторон и шириной 30%.
2. Добавление контента внутри квадратов
Поскольку вы не можете добавлять контент непосредственно внутри квадратов (это увеличило бы их высоту и квадраты больше не были бы квадратами), вам необходимо создать дочерние элементы (для этого примера я использую div) внутри них
position: absolute;
и поместить контент внутри них. , Это позволит вывести содержимое из потока и сохранить размер квадрата.Не забудьте добавить
position:relative;
родительские элементы div, чтобы абсолютные дочерние элементы располагались / измерялись относительно своих родителей.Давайте добавим некоторый контент в нашу сетку квадратов 3х3:
HTML :
CSS :
РЕЗУЛЬТАТ <- с некоторым форматированием, чтобы сделать его красивым!
3. Центрирование контента
Горизонтально :
Это довольно просто, вам просто нужно добавить
text-align:center
в.content
.РЕЗУЛЬТАТ
Вертикальное выравнивание
Это становится серьезным! Хитрость заключается в использовании
но мы не можем использовать
display:table;
на.square
или.content
дивы , потому что это противоречитposition:absolute;
так что нам нужно создать два ребенка внутри.content
дивы. Наш код будет обновлен следующим образом:HTML :
CSS:
Теперь мы закончили, и мы можем посмотреть на результат здесь:
LIVE FULLSCREEN RESULT
редактируемая скрипка здесь
источник
* { box-sizing: border-box; }
наперед для других: если вы используете, вам нужно отрегулировать высоту и ширину в .content div до 100%. :)justify-content: center; align-items: center; flex-flow: column nowrap;
Вы можете использовать единицы измерения vw (view-width), которые сделают квадраты отзывчивыми в соответствии с шириной экрана.
Быстрый макет этого будет:
источник
margin-left: -4px;
использованиеmargin-right:-4px
. Скорее, не связывайтесь с несогласованностью в mincharspace, но установите для родительского элемента размера шрифта обертку значение 0, а не для дочерних элементов, сбрасываемых в1rem
(относительный-em)Принятый ответ великолепен, однако это можно сделать с помощью
flexbox
.Вот сеточная система, написанная с синтаксисом БЭМ, который позволяет отображать 1-10 столбцов на строку.
Если последняя строка является неполной (например, вы хотите отобразить 5 ячеек в строке и 7 элементов), конечные элементы будут центрированы по горизонтали. Чтобы управлять горизонтальным выравниванием конечных элементов, просто измените
justify-content
свойство в.square-grid
классе.Показать фрагмент кода
Скрипка: https://jsfiddle.net/patrickberkeley/noLm1r45/3/
Это проверено в FF и Chrome.
источник
Я использую это решение для адаптивных коробок разных рационов:
HTML:
CSS:
Посмотреть демо на JSfiddle.net
источник