网格布局是现代CSS中最强大的功能之一。使用网格布局可以帮助我们在没有任何外部 UI 框架的情况下构建复杂的、快速响的布局。在这篇文章中,将会介绍所有我们需要了解的 CSS 网格知识 。
![]() (推荐教程:CSS教程) 网格布局是现代CSS中最强大的功能之一。使用网格布局可以帮助我们在没有任何外部 UI 框架的情况下构建复杂的、快速响的布局。在这篇文章中,将会介绍所有我们需要了解的 CSS 网格知识 。 CSS 网格的基础知识我们直接进入代码,如下所示,先写些标签,源码在这个链接里面:https://codepen.io/Shadid/pen/zYqNvgv <p class="container"> <header>Header</header> <aside>Aside 1</aside> <section>Section</section> <aside>Aside 2</aside> <footer>Footer</footer> </p> 在上面,我们创建了一个 .container > * {
background: aquamarine;
font-size: 30px;
}运行的网页如下:
现在我们添加一些网格属性: .container {
display: grid;
grid-gap: 5px;
grid-template-areas:
"header"
"aside-1"
"aside-2"
"section"
"footer"
}
/* Assign grid areas to elements */
header {
grid-area: header;
}
aside:nth-of-type(1) {
grid-area: aside-1;
}
aside:nth-of-type(2) {
grid-area: aside-2;
}
section {
grid-area: section;
}
footer {
grid-area: footer;
}首先,我们定义了 接下来,我们为每个html元素分配了一个网格区域名称。在 grid-template-areas:
"header"
"aside-1"
"aside-2"
"section"
"footer"元素的顺序与 dom 结构不同。但是,最终按我们网络区域的顺序来展示。
下一步是使我们的页面具有响应性。我们希望在更大的屏幕上使用不同的布局。CSS网格使得处理媒体查询和创建响应式布局变得非常容易。看下面代码: @media (min-width: 670px) {
.container {
grid-template-areas:
"header header header"
"aside-1 section aside-2"
"footer footer footer"
}
}我们所要做的就是在媒体查询中重新排序网格模板区域。
网格列和行如何使用 CSS 网格来组织列和? 先从下面的代码开始: <p class="container"> <p class="item">One</p> <p class="item">Two</p> <p class="item">Three</p> <p class="item">Four</p> <p class="item">Five</p> <p class="item">Six</p> </p> 添加一些基本的 css .container {
display: grid;
height: 100vh;
grid-gap: 10px;
}
.item {
background: lightcoral;
}我们为上面的 dom 结构使用了网格布局,并使用 .container {
display: grid;
height: 100vh;
grid-gap: 10px;
grid-template-columns: 100px 200px auto auto;
}就像这样,我们使用了列。 我们指定第一列为
可以看到现在页面中有一个空白。 如果我想将 .item:nth-of-type(6) {
grid-column-start: 3;
grid-column-end: 5;
}注意,我们使用 如果你觉得网格线的值让人困惑,你也可以使用 .item:nth-of-type(6) {
grid-column-start: 3;
grid-column-end: span 2;
}对于 .item:nth-of-type(2) {
grid-row-start: span 2;
}我们使用
如上所见,我们已经能够使用少量的CSS网格属性来构建非常复杂的布局。 有效地使用 grid-templates现在来看看 首先,还是先来一段 dom 结构: <p class="container"> <header>header</header> <aside>Left</aside> <section>Section</section> <aside>Right</aside> <footer>Footer</footer> </p> 接着,添加一些样式: ``
.container {
display: grid;
height: 100vh;
grid-gap: 10px;
}
.container > * {
background: coral;
display: flex;
justify-content: center;
align-items: center;
}`
``我们给元素添加了背景色。从上面的代码中可以看到,我们也使用了
对于移动端,我们希望 .container {
display: grid;
height: 100vh;
grid-gap: 10px;
grid-template-areas:
"header"
"section"
"right"
"left"
"footer"
}
aside:nth-of-type(1) {
grid-area: left;
}
aside:nth-of-type(2) {
grid-area: right;
}
section {
grid-area: section;
}
footer {
grid-area: footer;
}
header {
grid-area: header;
}在 .container {
display: grid;
height: 100vh;
grid-gap: 10px;
grid-template-areas:
"header"
"section"
"right"
"left"
"footer";
grid-template-rows: 1fr 6fr 2fr 2fr 1fr;
}
我们可以根据需要设置移动端的视图,接下我们使用媒体查询来适配一下大屏幕: @media (min-width: 500px) {
.container {
grid-template-areas:
"header header header"
"left section right"
"footer footer right";
grid-template-rows: 1fr 6fr 1fr;
grid-template-columns: 1fr 6fr 1fr;
}
}如何使用 |
