聊一聊 CSS Grid 布局(下)

191 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

继续上一次分享,上一次分享介绍我们如何定义每一个 item 起始轴编号和终止轴编号来定义一个 item 宽度或者高度。

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>Document</title>
</head>
<body>
    <div class="container">
        <div class="header">Header</div>
        <div class="menu">Menu</div>
        <div class="content">Content</div>
        <div class="footer">Footer</div>
    </div>
</body>
</html>

style.css

*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body{
    width: 100vw;
    height: 100vh;
    background-color:lemonchiffon;
}

.container div{
    font-size: 2em;
    color: white;

}

.container :nth-child(1){
    background-color:burlywood;
}

.container :nth-child(2){
    background-color: violet;
}

.container :nth-child(3){
    background-color: tomato;
}

.container :nth-child(4){
    background-color: teal;
}

.container{
    height: 100vh;
    display: grid;
    grid-gap: 5px;
    grid-template-columns:1fr 5fr;
    grid-template-rows: 40px auto 40px;
}

.header{
    grid-column: 1 / 3;
}
.footer{
    grid-column: 1 / 3;
}
.menu{
}
.content{
    grid-column: 2 / 3;
}

grid_system_001.png

之前我们已经介绍过来了,这里有 3 个轴将内容划分为两个区域,如下图,然后我们通过定义起始轴和终止轴来定义 cell 的显示的区域。

grid_system_003.png

grid-template-columns:1fr [content-start] 5fr [content-end];

这里内容之间位置就是假设有一条轴,我们可以个每一个轴起一个名称,轴的名称需要用方括号括上,名字有中划线连接。

.content{
    grid-column: content-start / content-end;
}
    grid-template-columns:[main-start]1fr [content-start] 5fr [content-end main-end];

grid_system_006.png

同理也可以为第一条轴设置为 main-start 然后将第三条轴设置为 main-end。为什么设置为 content-start 中划线连接符的形式,开始用start 终止用 end。接下里大家可以看到为什么要这样处理了。

.content{
    grid-column: content;
}

我们可以为 grid-column 指定值为 content 然后就会自动根据 content 识别为 content-startcontent-end

.container{
    height: 100vh;
    display: grid;
    grid-gap: 5px;
    grid-template-columns:[main-start]1fr [content-start] 5fr [content-end main-end];
    grid-template-rows: [main-start] 40px [content-start] auto [content-end] 40px [main-end];
}

justify-content 和 align-content

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container">
        <div class="box">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
        <div class="box">5</div>
        <div class="box">6</div>
    </div>
</body>
</html>
.container{
    border: 2px solid black;
    display: grid;
    grid-gap: 5px;
    grid-template-columns: repeat(3,100px);
    grid-template-rows: repeat(2,100px);
    height: 100vh;
}

.box{
    line-height: 100px;
    font-size: 1.75em;
    color: white;
    text-align: center;
}

.box:nth-child(1),.box:nth-child(4){
    background-color: aquamarine;
}

.box:nth-child(2),.box:nth-child(5){
    background-color:orchid;
}

.box:nth-child(3),.box:nth-child(6){
    background-color:khaki;
}

grid_system_007.png

justify-content: end;

通过设置 justify-content 可以设置项目 items 整体对齐的效果,是整体靠右侧还是左侧。

grid_system_008.png

justify-content: end;//start or center
justify-content: center;
align-content: end;

grid_system_009.png

justify-content: space-around;

下面通过图解释一下 3 种不同空间间隔,其中可能需要解释的就是 space-evenlyspace-around

屏幕快照 2021-10-04 下午12.11.21.png

justify-items align-items justify-self align-self

<body>
    <div class="container">
        <div class="header">Header</div>
        <div class="menu">Menu</div>
        <div class="content">Content</div>
        <div class="footer">Footer</div>
    </div>
</body>
*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body{
    width: 100vw;
    height: 100vh;
    background-color:lemonchiffon;
}

.container div{
    font-size: 2em;
    color: white;
}

.container :nth-child(1){
    background-color:burlywood;
}

.container :nth-child(2){
    background-color: violet;
}

.container :nth-child(3){
    background-color: tomato;
}

.container :nth-child(4){
    background-color: teal;
}

.container{
    display: grid;
    grid-gap: 5px;
    grid-template-columns: repeat(12,1fr);
    grid-template-rows: 50px 200px 50px;
}

.header{
    grid-column: 1/-1;
}
.footer{
    grid-column: 1/-1;
}
.menu{
    grid-column: 1/3;
}
.content{
    grid-column: 3/-1;
}

grid_system_010.png

justify-items: center;

grid_system_011.png

align-items: center;

grid_system_012.png

可以单独对于 item 进行调整

.content{
    grid-column: 3/-1;
    align-self: center;
    justify-self: center;
}

grid_system_015.png

auto-fit 和 auto-fill