伙计们,我正在尝试开发以下布局。 CSS网格有可能吗?我添加了我尝试过的所有内容,并且仍然尝试通过跨行并更改列的顺序来实现所需的结果。任何帮助将不胜感激。
注意:我希望item-content能够与第二列中的所有行一起显示。基本上,它在台式机中可用作选项卡,在移动屏幕中可用作手风琴。
.container {
display: grid;
grid-template-columns: 30% 70%;
}
.item {
min-height: 50px;
border: solid 1px #333;
}
<div class="container">
<div class="item item-1">item-1</div>
<div class="item item-2">item-2</div>
<div class="item item-3">item-3</div>
<div class="item item-4">item-4</div>
<div class="item item-content-1">item-content-1</div>
<div class="item item-content-2">item-content-2</div>
<div class="item item-content-3">item-content-3</div>
<div class="item item-content-4">item-content-4</div>
</div>
答案 0 :(得分:1)
修订后的答案:Revised fiddle 我认为它对您有用。
HTML:
<div class="container">
<div class="item item-1 order1">item-1</div>
<div class="item item-2 order2">item-2</div>
<div class="item item-3 order3">item-3</div>
<div class="item item-4 order4">item-4</div>
<div class="item item-content-1 order1 active">item-content-1</div>
<div class="item item-content-2 order2 ">item-content-2</div>
<div class="item item-content-3 order3">item-content-3</div>
<div class="item item-content-4 order4">item-content-4</div>
</div>
CSS:
html,
body {
height: 100%;
padding: 0;
}
.container {
display: grid;
grid-template-columns: 30% auto;
height: 100%;
}
.item {
min-height: 50px;
border: solid 1px #333;
}
.item[class*="item-content-"] {
display: none;
height: auto;
background-color: gray;
overflow: auto;
}
.item[class*="item-content-"].active {
grid-column-start: 2;
grid-column-end: 3;
grid-row-start: 1;
grid-row-end: 5;
display: block;
}
@media (max-width:767px) {
.order1 {
order: 1;
}
.order2 {
order: 2;
}
.order3 {
order: 3;
}
.order4 {
order: 4;
}
.container {
display: flex;
flex-direction: column;
height: 100%;
justify-content: stretch;
}
.item[class*="item-content-"] {
background-color: goldenrod;
}
.item {
height: 50px;
}
.item[class*="item-content-"].active {
display: flex;
flex-grow: 1;
}
}
-------------------------------------------- ------------------------
您可以使用CSS order
属性。尝试一下
fiddle
The order CSS property sets the order to lay out an item in a flex or grid container.
<div class="container">
<div class="item item-1 order1">item-1</div>
<div class="item item-2 order2">item-2</div>
<div class="item item-3 order3">item-3</div>
<div class="item item-4 order4">item-4</div>
<div class="item item-content-1 order1">item-content-1</div>
<div class="item item-content-2 order2">item-content-2</div>
<div class="item item-content-3 order3">item-content-3</div>
<div class="item item-content-4 order4">item-content-4</div>
</div>
CSS:
.container {
display: grid;
grid-template-columns: 30% 70%;
}
.order1 {
order: 1;
}
.order2 {
order: 2;
}
.order3 {
order: 3;
}
.order4 {
order: 4;
}
.item {
min-height: 50px;
border: solid 1px #333;
}
@media (max-width:767px) {
.container {
grid-template-columns: 1fr;
}
}
答案 1 :(得分:1)
是的,使用媒体查询和列流完全可以做到这一点。
.container {
display: grid;
grid-template-columns: 30% 70%;
grid-auto-flow: column;
}
.item {
min-height: 50px;
border: solid 1px #333;
grid-column: 1;
}
.item[class*="item-content-"] {
grid-column: 2;
background: lightblue;
}
@media screen and (max-width:700px) {
.container {
grid-template-columns: 1fr;
}
.item[class*="item-content-"] {
grid-column: 1;
}
.item-2 {
grid-row-start: 6;
}
.item-3 {
grid-row-start: 7;
}
.item-4 {
grid-row-start: 8;
}
}
<div class="container">
<div class="item item-1">item-1</div>
<div class="item item-2">item-2</div>
<div class="item item-3">item-3</div>
<div class="item item-4">item-4</div>
<div class="item item-content-1">item-content-1</div>
<div class="item item-content-2">item-content-2</div>
<div class="item item-content-3">item-content-3</div>
<div class="item item-content-4">item-content-4</div>
</div>
每次更新(假设只有一个.item-content
div
.container {
display: grid;
grid-template-columns: 30% 70%;
grid-auto-flow: column;
}
.item {
min-height: 50px;
border: solid 1px #333;
grid-column: 1;
}
.item-content-1 {
grid-column: 2;
grid-row: 1 / span 4;
background: lightblue;
}
@media screen and (max-width:700px) {
.container {
grid-template-columns: 1fr;
}
.item-content-1 {
grid-column: 1;
grid-row: 2;
}
}
<div class="container">
<div class="item item-1">item-1</div>
<div class="item item-2">item-2</div>
<div class="item item-3">item-3</div>
<div class="item item-4">item-4</div>
<div class="item item-content-1">item-content-1</div>
</div>