#html #css #sass #css-grid
Вопрос:
У меня есть следующие HTML и CSS:
.grid {
display: grid;
grid-template-areas:
'. b b b b b b . p p p .'
'. b b b b b b . s s s .';
amp;__item {
align-self: start;
background-color: #999;
amp;--body {
grid-area: b;
height: 20rem;
}
amp;--primarySidebar {
grid-area: p;
}
amp;--secondarySidebar {
grid-area: s;
}
}
}
<div class="grid">
<div class="grid__item grid__item--body">
Body
</div>
<div class="grid__item grid__item--primarySidebar">
Primary sidebar
</div>
<div class="grid__item grid__item--secondarySidebar">
Secondary sidebar
</div>
</div>
Результат выглядит следующим образом:
Кодовый код здесь: https://codepen.io/CaribouCode/pen/RwgRPvb
Похоже primarySidebar
, он растянулся, чтобы заполнить 50% общей высоты. Как мне предотвратить это и, следовательно, удалить пробел между primarySidebar
и secondarySidebar
?
Примечание: Важно, чтобы я использовал сетку и эту структуру DOM по другим причинам, поэтому я ищу здесь некоторые свойства CSS, которые я могу добавить, чтобы избежать нежелательного вертикального пространства.
Ответ №1:
Один из вариантов состоит в том , чтобы изменить поток на column
и указать первые две строки как auto
, а затем указать, чтобы основная область охватывала 3 строки…вот так.
.grid {
display: grid;
width:100%;
gap: 0.5em;
grid-template-columns: repeat(12, 1fr);
grid-template-rows: auto auto 1fr;
grid-auto-flow: column;
}
.grid__item {
background-color: #999;
}
.grid__item--body {
grid-column: span 8;
grid-row: span 3;
height: 20rem;
}
.grid__item--primarySidebar {
grid-column: span 4;
}
.grid__item--secondarySidebar {
grid-column: span 4;
}
<div class="grid">
<div class="grid__item grid__item--body">
Body
</div>
<div class="grid__item grid__item--primarySidebar">
Primary sidebar Lorem ipsum dolor sit amet consectetur adipisicing elit. Sequi sint recusandae non ipsum vitae in vel labore quia corporis magni.
</div>
<div class="grid__item grid__item--secondarySidebar">
Secondary sidebar Lorem ipsum dolor sit amet consectetur adipisicing elit. Sequi sint recusandae non ipsum vitae in vel labore quia corporis magni
</div>
</div>
Комментарии:
1. Это выглядит так, как будто он меняет дизайн с определенного макета из 12 столбцов (который требуется, когда я добавляю медиа-запросы позже) на макет из 2 столбцов равной ширины.
2. @CaribouCode Обновление ответа, но принцип тот же.
Ответ №2:
.grid {
display: grid;
gap: 2px;
/* define the number of grid columns */
grid-template-columns: repeat( 12, minmax(250px, 1fr) );
grid-template-rows: auto auto 1fr;
grid-auto-flow: column;
}
.grid__item {
background-color: #999;
}
.grid__item--body {
grid-column: 1;
grid-row: span 3;
height: 20rem;
}
.grid__item--primarySidebar {
grid-column: 2;
white-space: break-spaces;
}
.grid__item--secondarySidebar {
grid-column: 2;
white-space: break-spaces;
}
<div class="grid">
<div class="grid__item grid__item--body">
Body
</div>
<div class="grid__item grid__item--primarySidebar">
Primary sidebar
</div>
<div class="grid__item grid__item--secondarySidebar">
Secondary sidebar
</div>
</div>
Комментарии:
1. Это, кажется, удаляет мой макет сетки из 12 столбцов, который мне нужен при расширении этого дизайна
2. Пожалуйста, ознакомьтесь с скорректированным CSS. Эта ссылка: » css-tricks.com/… » будет полезно внести коррективы при расширении вашего дизайна.
Ответ №3:
Я думаю, что это не проблема с сеткой — вы добавили высоту 20 метров в теле, но не в боковых панелях — вы можете попробовать добавить по 10 метров на каждую или 100%