项目居中布局
实现效果,不管页面大小,项目总是位于页面的中间
<style type="text/css">
.ex-container {
/*允许改变元素的宽高*/
resize: both;
position: relative;
overflow: hidden;
width: 300px;
height: 300px;
z-index: 2;
box-shadow: 0 0 20px -10px #026b79;
display: grid;
align-items: center;
background-color: white;
}
.parent {
height: 100%;
width: 100%;
display: grid;
place-items: center; /*start/end/stretch(左上/右下/拉伸)*/
/*容器内项目居中显示*/
background-color: #a9e2ea;
}
.box {
font-size: 2rem;
padding: 1rem;
/* display: grid;
place-items: end; */
border-radius: 1rem;
border-style: dashed;
background-color: #f7c8ab;
border-color: #feb180;
}
</style>
<!-- 项目居中布局,不管容器的大小,项目总是占据中心点 -->
<div class="ex-container">
<div class="parent blue">
<div class="box coral" contenteditable>
:)
</div>
</div>
</div>
2.并列布局
并列布局,就是多个项目并列,如果宽度不够的话,项目会往下排
<style type="text/css">
.container {
resize: both;
position: relative;
overflow: hidden;
width: 400px;
height: 400px;
z-index: 2;
box-shadow: 0 0 20px -10px #0000FF;
display: grid;
align-items: center;
background-color: #fff;
}
.parent {
display: flex;
flex-wrap: wrap;
justify-content: center;
width: 100%;
height: 100%;
}
/* flex属性是flex-grow、flex-shrink、flex-basis这三个属性的简写形式。 */
/* flex-basis:项目的初始宽度。
flex-grow:指定如果有多余宽度,项目是否可以扩大。
flex-shrink:指定如果宽度不足,项目是否可以缩小 */
.box {
font-size: 2rem;
padding: 1rem;
border-radius: 1rem;
border-style: dashed;
background-color: #d4f2c4;
border: 1px solid #b9dba9;
margin: 5px;
flex: 1 1 150px;
flex: 0 1 150px;
display: grid;
place-items: center;
}
</style>
<div class="container">
<div class="parent">
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
</div>
</div>
3.两栏布局
两栏布局,一个边栏,一个主栏,边栏宽度不变,主栏宽度会随着页面宽度而改变
<style type="text/css">
.container {
resize: both;
position: relative;
overflow: hidden;
width: 400px;
height: 400px;
z-index: 2;
box-shadow: 0 0 20px -10px #0000FF;
display: grid;
align-items: center;
background-color: #fff;
}
.parent {
width: 100%;
height: 100%;
display: grid;
/*边栏宽度范围为150px~25%,第而列为剩下宽度*/
grid-template-columns: minmax(150px, 25%) 1fr ;
}
.section{
font-size: 1.5rem;
padding: 1rem;
border-style: dashed;
}
.yellow {
background-color: #fee8b4;
border: 1px solid #fee8b4;
}
.purple {
background-color: #dfd3e4;
border: 1px solid #dfd3e4;
}
</style>
<div class="container">
<div class="parent">
<div class="section yellow">
边栏
</div>
<div class="section purple">
主栏
</div>
</div>
</div>
4.三明治布局
即将页面分为页头,主体,尾部
<style type="text/css">
.container{
width: 400px;
height: 400px;
overflow: hidden;
resize: both;
position: relative;
z-index: 2;
box-shadow: 0 0 20px -10px #00FF00;
display: grid;
align-items: center;
background-color: #eee;
}
.parent {
width: 100%;
height: 100%;
display: grid;
grid-template-rows: auto 1fr auto;
}
.section {
font-size: 1.5rem;
padding: 1rem;
border-style: solid;
}
.blue {
border: 1px solid #81cfd9;
background-color: #a9e2ea;
}
.coral {
border: 1px solid #f7c8ab;
background-color: #feb180;
}
.purple {
border: 1px solid #dfd3e4;
background-color: #dfd3e4;
}
</style>
<!-- 三明治布局,页面在垂直方向分成三部分:页眉,内容去,页脚 -->
<div class="container">
<div class="parent">
<div class="section blue">Header</div>
<div class="section coral">Main</div>
<div class="section purple">Footer</div>
</div>
</div>
5.圣杯布局
和三明治布局类似,不过主体部分又区分了三栏
如下图,将容器分成9个单元格,头和尾部占据了3个单元格,主体的三栏每一栏占据一个单元格
<style type="text/css">
.container {
width: 400px;
height: 400px;
resize: both;
overflow: hidden;
display: grid;
align-items: center;
box-shadow: 0 0 20px -10px #0000FF;
}
.parent {
display: grid;
/*设置行高*/
grid-template-rows: auto 1fr auto/ auto 1fr auto;
width: 400px;
height: 400px;
}
.section {
font-size: 1.5rem;
padding: 1rem;
}
.pink {
/*grid-column:设置列的开始的网格线和结束的网格线*/
grid-column: 1/4;
background-color: #f5e0e9;
border: 1px solid #f9bed6;
}
.left-side {
grid-column: 1/2;
background-color: #a9e2ea;
border: 1px solid #81cfd9;
}
.coral {
grid-column: 2/3;
background-color: #f7c8ab;
border 1px solid #feb180;
}
.right-side {
/* grid-column:grid-column-start和grid-column-end的合并简写表示开始和结束网格线 */
grid-column: 3/4;
background-color: #fee8b4;
border: 1px solid #fee8b4;
}
.green {
grid-column: 1/4;
background-color: #d4f2c4;
border: 1px solid #b9dba9;
}
</style>
<div class="container">
<div class="parent">
<div class="section pink">Header</div>
<div class="section left-side blue">left sideBar</div>
<div class="section coral">main content</div>
<div class="right-side yellow section">right sidebar</div>
<div class="green section">footer</div>
</div>
</div>
6. 12跨越网格
12网格布局,如下图,将网格分为12列,每个项目跨越不同的网格,第一个项目跨越12列,
<style type="text/css">
.container {
/* both:允许用户控制元素的宽和高 */
resize: both;
width: 400px;
height: 400px;
overflow: hidden;
display: grid;
align-items: center;
box-shadow: 0 0 20px -10px #0000FF;
}
.parent {
width: 100%;
height: 100%;
display: grid;
grid-template-columns: repeat(12, 1fr);
}
.section {
display: grid;
place-items: center;
text-align: center;
}
.span12 {
/*span:左右边框跨域的网格*/
grid-column: 1/span 12;
background-color: #d4f2c4;
}
.span6 {
grid-column: 1/ span 6;
background-color: #f7c8ab;
}
.span4 {
grid-column: 4/span 4;
background-color: #a9e2ea;
}
.span2 {
grid-column: 3/ span 2;
background-color: #fee8b4;
}
</style>
<div class="container">
<div class="parent">
<div class="section span12">span12</div>
<div class="section span6">span6</div>
<div class="section span4">span4</div>
<div class="section span2">span2</div>
</div>
</div>
7.设置间距
项目之间设置间距
<style type="text/css">
.container {
resize: both;
width: 400px;
height: 400px;
overflow: hidden;
display: grid;
align-items: center;
box-shadow: 0 0 20px -10px #000000;
}
.parent {
width: 100%;
height: 100%;
display: grid;
/* 行间距和列间距的合并简写 grid-gap: <grid-row-gap> <grid-column-gap> */
grid-gap: 1rem;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
}
.box {
border-radius: 1rem;
font-size: 2rem;
padding: 1rem;
display: grid;
place-items: center;
}
.box1 {
background-color: #f5e0e9;
}
.box2 {
background-color: #dfd3e4;
}
.box3 {
background-color: #a9e2ea;
}
.box4 {
background-color: #d4f2c4;
}
</style>
<div class="container">
<div class="parent">
<div class="box box1">1</div>
<div class="box box2">2</div>
<div class="box box3">3</div>
<div class="box box4">4</div>
</div>
</div>