Zastanawiam się, jak zabrałbym się do stworzenia układu z responsywnymi kwadratami . Każdy kwadrat miałby zawartość wyrównaną w pionie i poziomie . Konkretny przykład przedstawiono poniżej ...
html
css
responsive-design
grid-layout
aspect-ratio
garethdn
źródło
źródło
Odpowiedzi:
Elastyczną siatkę kwadratów z zawartością wyśrodkowaną w pionie i poziomie można utworzyć tylko za pomocą CSS . Wyjaśnię, jak krok po kroku, ale najpierw przedstawiam 2 dema tego, co możesz osiągnąć:
Zobaczmy teraz, jak stworzyć te fantazyjne, responsywne kwadraty!
1. Tworzenie responsywnych kwadratów:
Sztuczka polegająca na utrzymywaniu kwadratowych elementów (lub jakichkolwiek innych proporcjach) polega na użyciu procentów
padding-bottom
.Uwaga dodatkowa: możesz również użyć dopełnienia górnego lub marginesu górnego / dolnego, ale tło elementu nie będzie wyświetlane.
Ponieważ dopełnienie od góry jest obliczane zgodnie z szerokością elementu nadrzędnego ( patrz MDN ), wysokość elementu będzie się zmieniać zgodnie z jego szerokością. Możesz teraz zachować proporcje zgodnie z jego szerokością.
W tym momencie możesz zakodować:
HTML :
CSS
Oto prosty przykład układu siatki 3 * 3 kwadratów przy użyciu powyższego kodu.
Dzięki tej technice możesz wykonać dowolny inny współczynnik proporcji, oto tabela podająca wartości wypełnienia dolnego zgodnie ze współczynnikiem proporcji i 30% szerokości.
2. Dodanie zawartości wewnątrz kwadratów
Ponieważ nie możesz dodawać treści bezpośrednio do kwadratów (zwiększyłoby to ich wysokość, a kwadraty nie byłyby już kwadratami), musisz utworzyć elementy potomne (w tym przykładzie używam elementów div) wewnątrz nich z
position: absolute;
i umieścić zawartość w nich . Spowoduje to usunięcie zawartości z przepływu i zachowanie rozmiaru kwadratu.Nie zapomnij o dodaniu
position:relative;
nadrzędnych elementów DIV, aby bezwzględne elementy podrzędne były ustawione / dopasowane do ich rozmiaru nadrzędnego.Dodajmy trochę treści do naszej siatki kwadratów 3x3:
HTML :
CSS :
WYNIK <- z pewnym formatowaniem, aby było ładnie!
3.Centrowanie treści
Poziomo:
Jest to dość proste, wystarczy dodać
text-align:center
do.content
.WYNIK
Wyrównanie w pionie
To staje się poważne! Sztuczka polega na użyciu
ale nie możemy używać
display:table;
on.square
ani.content
div, ponieważ jest to sprzeczne z,position:absolute;
więc musimy utworzyć dwoje dzieci w.content
elementach div. Nasz kod zostanie zaktualizowany w następujący sposób:HTML :
CSS:
Skończyliśmy i możemy spojrzeć na wynik tutaj:
WYNIK NA ŻYWO NA PEŁNYM EKRANIE
edytowalne skrzypce tutaj
źródło
* { box-sizing: border-box; }
Uwaga dla innych: jeśli używasz , musisz ustawić wysokość i szerokość w elemencie div .content na 100%. :)justify-content: center; align-items: center; flex-flow: column nowrap;
Możesz użyć jednostek vw (szerokość widoku), które sprawią, że kwadraty będą reagować zgodnie z szerokością ekranu.
Szybka makieta tego byłaby:
źródło
margin-left: -4px;
używajmargin-right:-4px
. Raczej nie zadzieraj z niespójnością w mincharspace, ale ustaw rozmiar czcionki nadrzędnej opakowania na 0, a następnie dla elementów potomnych zresetuj do1rem
(względne-em)Przyjęta odpowiedź jest świetna, ale można to zrobić
flexbox
.Oto system siatki napisany ze składnią BEM, który umożliwia wyświetlenie od 1 do 10 kolumn w każdym wierszu.
Jeśli ostatni wiersz jest niekompletny (na przykład zdecydujesz się pokazać 5 komórek w każdym wierszu i jest 7 elementów), końcowe elementy zostaną wyśrodkowane w poziomie. Aby kontrolować poziome wyrównanie końcowych elementów, po prostu zmień
justify-content
właściwość pod.square-grid
klasą.Pokaż fragment kodu
Skrzypce: https://jsfiddle.net/patrickberkeley/noLm1r45/3/
Jest to testowane w FF i Chrome.
źródło
Używam tego rozwiązania do responsywnych pudełek o różnych porcjach:
HTML:
CSS:
Zobacz demo na JSfiddle.net
źródło