Intereting Posts
каковы атрибуты data- * HTML? Вставка Java-апплета в .html-файл Добавьте разделитель труб после элементов в неупорядоченном списке, если этот элемент не является последним в строке Таблица CSS с одним столбцом, занимающим оставшееся пространство Переполнение текста с эллипсией слева Могу ли я поместить тег … в тело HTML-файла для отправки по электронной почте? Как я могу избежать элементов символа HTML при использовании функции ColdFusion XMLFormat ()? Форма подписки не работает (PHP) Как отправить форму с Javascript, когда входное имя «submit»? Как отображать данные из базы данных динамически загружать шрифты html jquery HTML Canvas: Как нарисовать перевернутое / зеркальное изображение? Подсчитать количество выбранных флажков без перезагрузки страницы? PHP / mysql – Как передать переменные из classа в отдельный index.php? Страницы профиля? Предоставление границы для строки таблицы HTML,

Сетка ответных квадратов

Мне интересно, как я собираюсь создать макет с отзывчивыми квадратами . Каждый квадрат имеет вертикальное и горизонтальное выравнивание содержимого. Конкретный пример показан ниже …

реагирующие квадраты с контентом

Вы можете создавать гибкую сетку квадратов с вертикальным и горизонтальным центрированным контентом только с помощью CSS . Я объясню, как в пошаговом процессе, но сначала здесь есть 2 демонстрации того, что вы можете достичь:

  • Сетка квадратных изображений
  • Сетка квадратов с контентом

Реагирующая квадратная сетка 3x3 Ответчивые квадратные изображения в сетке 3x3

Теперь давайте посмотрим, как сделать эти фантастические ответные квадраты!


1. Создание ответных квадратов:

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

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

HTML :

  

CSS

 div { width: 30%; padding-bottom: 30%; /* = width for a square aspect ratio */ } 

Вот простой пример компоновки сетки 3 * 3 квадратов, используя приведенный выше код.

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

  Aspect ratio | padding-bottom | for 30% width ------------------------------------------------ 1:1 | = width | 30% 1:2 | width x 2 | 60% 2:1 | width x 0.5 | 15% 4:3 | width x 0.75 | 22.5% 16:9 | width x 0.5625 | 16.875% 


2. Добавление содержимого внутри квадратов

Поскольку вы не можете добавлять контент непосредственно внутри квадратов (он увеличивал бы их высоту, а квадраты больше не были бы квадратами), вам нужно создать дочерние элементы (для этого примера я – position:abolute; ) внутри них с position:abolute; и помещаем содержимое внутри них. Это выведет содержимое из streamа и сохранит размер квадрата.

Не забудьте добавить position:relative; на родительских div, поэтому абсолютные дети располагаются / имеют размер относительно их родителя.

Позволяет добавить некоторый контент в нашу квадратную сетку 3×3:

HTML :

 
.. CONTENT HERE ..
... and so on 9 times for 9 squares ...

CSS :

 .square { float:left; position: relative; width: 30%; padding-bottom: 30%; /* = width for a 1:1 aspect ratio */ margin:1.66%; overflow:hidden; } .content { position:absolute; height:80%; /* = 100% - 2*10% padding */ width:90%; /* = 100% - 2*5% padding */ padding: 10% 5%; } 

РЕЗУЛЬТАТ < - с некоторым форматированием, чтобы сделать его красивым!


3.Создание содержимого

Горизонтальный:

Это довольно просто, вам просто нужно добавить text-align:center в .content .
РЕЗУЛЬТАТ

Вертикальное выравнивание

Это становится серьезным! Фокус в том, чтобы использовать

 display:table; /* and */ display:table-cell; vertical-align:middle; 

но мы не можем использовать display:table; на .square или .content потому что он конфликтует с position:absolute; поэтому нам нужно создать двух детей внутри .content . Наш код будет обновлен следующим образом:

HTML :

 
... CONTENT HERE ...
... and so on 9 times for 9 squares ...

CSS:

 .square { float:left; position: relative; width: 30%; padding-bottom : 30%; /* = width for a 1:1 aspect ratio */ margin:1.66%; overflow:hidden; } .content { position:absolute; height:80%; /* = 100% - 2*10% padding */ width:90%; /* = 100% - 2*5% padding */ padding: 10% 5%; } .table{ display:table; height:100%; width:100%; } .table-cell{ display:table-cell; vertical-align:middle; height:100%; width:100%; } 


Мы закончили, и мы можем посмотреть на результат здесь:

РЕЗУЛЬТАТЫ ЖИЗНИ FULLSCREEN

редактируемая скрипка здесь


Вы можете использовать блоки vw (view-width), которые позволят квадратам реагировать в соответствии с шириной экрана.

Быстрый макет этого:

 html, body { margin: 0; padding: 0; } div { height: 25vw; width: 25vw; background: tomato; display: inline-block; text-align: center; line-height: 25vw; font-size: 20vw; margin-right: -4px; position: relative; } /*demo only*/ div:before { content: ""; position: absolute; top: 0; left: 0; height: inherit; width: inherit; background: rgba(200, 200, 200, 0.6); transition: all 0.4s; } div:hover:before { background: rgba(200, 200, 200, 0); } 
 
1
2
3
4
5
6
7
8

Принятый ответ велик, однако это можно сделать с помощью flexbox .

Вот grid, написанная синтаксисом BEM, которая позволяет отображать 1-10 столбцов для каждой строки.

Если последняя строка неполна (например, вы выбираете показать 5 ячеек в строке и 7 элементов), конечные элементы будут центрироваться по горизонтали. Чтобы контролировать горизонтальное выравнивание конечных элементов, просто измените свойство justify-content в .square-grid .

 .square-grid { display: flex; flex-wrap: wrap; justify-content: center; } .square-grid__cell { background-color: rgba(0, 0, 0, 0.03); box-shadow: 0 0 0 1px black; overflow: hidden; position: relative; } .square-grid__content { left: 0; position: absolute; top: 0; } .square-grid__cell:after { content: ''; display: block; padding-bottom: 100%; } // Sizes – Number of cells per row .square-grid__cell--10 { flex-basis: 10%; } .square-grid__cell--9 { flex-basis: 11.1111111%; } .square-grid__cell--8 { flex-basis: 12.5%; } .square-grid__cell--7 { flex-basis: 14.2857143%; } .square-grid__cell--6 { flex-basis: 16.6666667%; } .square-grid__cell--5 { flex-basis: 20%; } .square-grid__cell--4 { flex-basis: 25%; } .square-grid__cell--3 { flex-basis: 33.333%; } .square-grid__cell--2 { flex-basis: 50%; } .square-grid__cell--1 { flex-basis: 100%; } 
 .square-grid { display: flex; flex-wrap: wrap; justify-content: center; } .square-grid__cell { background-color: rgba(0, 0, 0, 0.03); box-shadow: 0 0 0 1px black; overflow: hidden; position: relative; } .square-grid__content { left: 0; position: absolute; top: 0; } .square-grid__cell:after { content: ''; display: block; padding-bottom: 100%; } // Sizes – Number of cells per row .square-grid__cell--10 { flex-basis: 10%; } .square-grid__cell--9 { flex-basis: 11.1111111%; } .square-grid__cell--8 { flex-basis: 12.5%; } .square-grid__cell--7 { flex-basis: 14.2857143%; } .square-grid__cell--6 { flex-basis: 16.6666667%; } .square-grid__cell--5 { flex-basis: 20%; } .square-grid__cell--4 { flex-basis: 25%; } .square-grid__cell--3 { flex-basis: 33.333%; } .square-grid__cell--2 { flex-basis: 50%; } .square-grid__cell--1 { flex-basis: 100%; } 
 
Some content
Some content
Some content
Some content
Some content
Some content
Some content
Some content

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

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

Я использую это решение для чувствительных ящиков разных рационов:

HTML:

 
... CONTENT HERE ...

CSS:

 .box-content { width: 100%; height: 100%; top: 0;right: 0;bottom: 0;left: 0; position: absolute; } .box { position: relative; width: 100%; } .box::before { content: ""; display: block; padding-top: 100%; /*square for no ratio*/ } .ratio1_1::before { padding-top: 100%; } .ratio1_2::before { padding-top: 200%; } .ratio2_1::before { padding-top: 50%; } .ratio4_3::before { padding-top: 75%; } .ratio16_9::before { padding-top: 56.25%; } 

Просмотреть демо на JSfiddle.net