适当的边距填充器,用于更宽宽度的响应式网格设计
Appropriate margin filler for responsive grid design at wider widths
我已经"working with one of the many frameworks or grid systems laying out sites on a 12-column flexible grid" and since after months of using Bootstrap I have become neither a journeyman nor an apprentice, I'm experimenting with using just grids and media queries for laying out a site. The following code is a simplification of design offered through the nice tutorial at the URL just referenced, also using hints from Rachel Andrew's inspiring https://gridbyexample.com。
.box {
background-color: #ddd; color: #000; padding: 20px;
}
.main-head { grid-area: hd; }
.content { grid-area: ct; }
.main-nav { grid-area: nv; }
.wrapper {
display: grid;
grid-gap: 2px;
grid-template-areas:
"nv"
"ct";
}
@media (min-width: 600px) {
.wrapper {
grid-template-columns: 1fr 3fr;
grid-template-areas:
"nv nv"
"ct ct";
}
nav ul {
display: flex;
justify-content: space-between;
}
}
@media (min-width: 1000px) {
.wrapper {
grid-template-columns: 1fr 4fr 1fr;
grid-template-areas:
"nv ct ct"
"nv ct ct";
}
nav ul {
flex-direction: column;
}
}
@media (min-width: 1200px) {
.wrapper {
grid-template-columns: 1fr 1fr 4fr 1fr 1fr;
grid-template-areas:
". nv ct ct ."
". nv ct ct .";
}
nav ul {
flex-direction: column;
}
}
<div class="wrapper">
<nav class="box main-nav">
<ul>
<li><a href="">Nav 1</a></li>
<li><a href="">Nav 2</a></li>
<li><a href="">Nav 3</a></li>
</ul>
</nav>
<article class="box content">
<h1>Main</h1>
</article>
</div>
上面的代码试图在 window 超过某个 (1200) 宽度时模拟插入两个边距,但是使用句点填充 grid-template-area
似乎是作弊。有没有更自然的方式来插入这些边距?
您可以像在其他任何地方一样使用 margin
,不是吗?当然,如果您希望两侧的 space 恰好是 1fr,那么使用带有 .
的空单元格方法是有意义的
.box {
background-color: #ddd; color: #000; padding: 20px;
}
.main-head { grid-area: hd; }
.content { grid-area: ct; }
.main-nav { grid-area: nv; }
.wrapper {
display: grid;
grid-gap: 2px;
grid-template-areas:
"nv"
"ct";
transition: margin 0.5s ease-in-out;
}
@media (min-width: 600px) {
.wrapper {
grid-template-columns: 1fr 3fr;
grid-template-areas:
"nv nv"
"ct ct";
}
nav ul {
display: flex;
justify-content: space-between;
}
}
@media (min-width: 1000px) {
.wrapper {
grid-template-columns: 1fr 4fr 1fr;
grid-template-areas:
"nv ct ct"
"nv ct ct";
}
nav ul {
flex-direction: column;
}
}
@media (min-width: 1200px) {
.wrapper {
grid-template-columns: 1fr 4fr 1fr;
grid-template-areas:
"nv ct ct"
"nv ct ct";
margin: 0 5%;
}
nav ul {
flex-direction: column;
}
}
<div class="wrapper">
<nav class="box main-nav">
<ul>
<li><a href="">Nav 1</a></li>
<li><a href="">Nav 2</a></li>
<li><a href="">Nav 3</a></li>
</ul>
</nav>
<article class="box content">
<h1>Main</h1>
</article>
</div>
我已经"working with one of the many frameworks or grid systems laying out sites on a 12-column flexible grid" and since after months of using Bootstrap I have become neither a journeyman nor an apprentice, I'm experimenting with using just grids and media queries for laying out a site. The following code is a simplification of design offered through the nice tutorial at the URL just referenced, also using hints from Rachel Andrew's inspiring https://gridbyexample.com。
.box {
background-color: #ddd; color: #000; padding: 20px;
}
.main-head { grid-area: hd; }
.content { grid-area: ct; }
.main-nav { grid-area: nv; }
.wrapper {
display: grid;
grid-gap: 2px;
grid-template-areas:
"nv"
"ct";
}
@media (min-width: 600px) {
.wrapper {
grid-template-columns: 1fr 3fr;
grid-template-areas:
"nv nv"
"ct ct";
}
nav ul {
display: flex;
justify-content: space-between;
}
}
@media (min-width: 1000px) {
.wrapper {
grid-template-columns: 1fr 4fr 1fr;
grid-template-areas:
"nv ct ct"
"nv ct ct";
}
nav ul {
flex-direction: column;
}
}
@media (min-width: 1200px) {
.wrapper {
grid-template-columns: 1fr 1fr 4fr 1fr 1fr;
grid-template-areas:
". nv ct ct ."
". nv ct ct .";
}
nav ul {
flex-direction: column;
}
}
<div class="wrapper">
<nav class="box main-nav">
<ul>
<li><a href="">Nav 1</a></li>
<li><a href="">Nav 2</a></li>
<li><a href="">Nav 3</a></li>
</ul>
</nav>
<article class="box content">
<h1>Main</h1>
</article>
</div>
上面的代码试图在 window 超过某个 (1200) 宽度时模拟插入两个边距,但是使用句点填充 grid-template-area
似乎是作弊。有没有更自然的方式来插入这些边距?
您可以像在其他任何地方一样使用 margin
,不是吗?当然,如果您希望两侧的 space 恰好是 1fr,那么使用带有 .
.box {
background-color: #ddd; color: #000; padding: 20px;
}
.main-head { grid-area: hd; }
.content { grid-area: ct; }
.main-nav { grid-area: nv; }
.wrapper {
display: grid;
grid-gap: 2px;
grid-template-areas:
"nv"
"ct";
transition: margin 0.5s ease-in-out;
}
@media (min-width: 600px) {
.wrapper {
grid-template-columns: 1fr 3fr;
grid-template-areas:
"nv nv"
"ct ct";
}
nav ul {
display: flex;
justify-content: space-between;
}
}
@media (min-width: 1000px) {
.wrapper {
grid-template-columns: 1fr 4fr 1fr;
grid-template-areas:
"nv ct ct"
"nv ct ct";
}
nav ul {
flex-direction: column;
}
}
@media (min-width: 1200px) {
.wrapper {
grid-template-columns: 1fr 4fr 1fr;
grid-template-areas:
"nv ct ct"
"nv ct ct";
margin: 0 5%;
}
nav ul {
flex-direction: column;
}
}
<div class="wrapper">
<nav class="box main-nav">
<ul>
<li><a href="">Nav 1</a></li>
<li><a href="">Nav 2</a></li>
<li><a href="">Nav 3</a></li>
</ul>
</nav>
<article class="box content">
<h1>Main</h1>
</article>
</div>