弹性布局和Grid布局

发布于:2022-07-26 ⋅ 阅读:(517) ⋅ 点赞:(0)

Grid

初了解

在学习弹性布局之前首先就要明白其概念
flex 就是flexible box的缩写,意为弹性布局,用来为盒装模型提供最大的灵活性
任何一个容器都可以指定为flex布局

.box{
  display: flex;
}

行内元素当然也可以使用flex布局 

.box{
  display: inline-flex;
}

 Webkit 内核的浏览器,必须加上-webkit前缀。

.box{
  display: -webkit-flex; /* Safari */
  display: flex;
}

 注意:设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。

基本概念

采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。

 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。
项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。

容器属性

  • flex-direction
  • justify-content
  • align-items
  • flex-wrap
  • align-content
  • flex-flow

1        flex-direction:row | row-reverse | column | column-reverse 项目的排列方向
2        flex-wrap:nowrap | wrap | wrap-reverse 是否换行
3        flex-flow:<flex-direction> || <flex-wrap> flex-direction 和 flex-wrap 的简写
4        justify-content:flex-start | flex-end | center | space-between | space-around 在水平
方向上的对齐方式
5        align-items: flex-start | flex-end | center | baseline | stretch 定义在垂直方向上的对齐
方式
6        align-content: flex-start | flex-end | center | space-between | space-around | stretch
定义了多根轴线的对齐方式,如果项目只有一根轴线,那么该属性将不起作用(item 有多行
时)

 flex 项目属性(item属性)

  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • align-self
  • flex
1) order:<number> 定义项目在容器中的排列顺序,数值越小,排列越靠前,默认值为 0
2) flex-basis:<length> | auto 定义了在分配多余空间之前,项目占据的主轴空间,浏览器
根据这个属性,计算主轴是否有多余空间
3) flex-grow: <number> 定义项目的放大比例。默认值为 0,即如果存在剩余空间,也不放
4) flex-shrink: <number> 定义项目的缩小比例。默认值: 1,即如果空间不足,该项目将缩
小,负值对该属性无效。
5) flex:none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]flex-grow, flex-shrink
和 flex-basis 的简写 默认值:0 1 auto, 即不放大,可缩小,大小就是项目本身的大
小。
6) align-self:auto | flex-start | flex-end | center | baseline | stretch 允许单个项目有与其
他项目不一样的对齐方式

 

Grid 布局是什么?

Grid 布局即网格布局,是一种新的 CSS 布局模型,比较擅长将一个页面划分为几个主要区域,以及定义这些区域的大小、位置、层次等关系。号称是最强大的的 CSS 布局方案,是目前唯一一种 CSS 二维布局。

Grid 布局和 flex 布局
讲到布局,我们就会想到 flex 布局,甚至有人认为竟然有 flex 布局了,似乎没有必要去了解 Grid 布局。但 flex 布局和 Grid 布局有实质的区别,那就是 flex 布局是一维布局,Grid 布局是二维布局。flex 布局一次只能处理一个维度上的元素布局,一行或者一列。Grid 布局是将容器划分成了“行”和“列”,产生了一个个的网格,我们可以将网格元素放在与这些行和列相关的位置上,从而达到我们布局的目的。

Grid 布局远比 flex 布局强大!

flex布局示例:

Grid 布局示例:

fr单位:

轨道可以使用任何长度单位进行定义。

网格引入了fr单位来帮助我们创建灵活的网格轨道。一个fr单位代表网格容器中可用空间的一等份。以下实例定义了一个网格定义将创建三个相等宽度的轨道,这些轨道会随着可用空间增长和收缩。

网格单元:

一个网格单元是在一个网格元素中最小的单位,从概念上来讲其实它和表格的一个单元格很像。

网格线: 

划分网格的线,称为""网格线"。应该注意的是,当我们定义网格时,我们定义的是网格轨道,而不是网格线。Grid 会为我们创建编号的网格线来让我们来定位每一个网格元素。m列有m +1根垂直的网格线,n行有n +1跟水平网格线

<style>
        main{
            width: 700px;
            height: 700px;
            display: grid;
            border: 1px solid rgb(0, 183, 255);
            grid-template-columns: 1fr 2fr 1fr;
            grid-template-rows: 100px auto 50px;
        }
        .col-1{
            background-color: aqua;
            grid-column-start: 1;
            grid-column-end: 6;
        }
        .col-2{
            background-color: rgb(51, 75, 180);
            grid-column-start: 1;
            grid-column-end: 2;
        }
        .col-3{
            background-color: rgb(15, 53, 53);
            grid-column-start: 3;
            grid-column-end: 4;
        }
        .col-4{
            background-color: rgb(113, 17, 158);
            grid-column-start: 1;
            grid-column-end: 4;
        }
    </style>
<body>
    <main>
        <div class="col-1"></div>
        <div class="col-2"></div>
        <div class="col-3"></div>
        <div class="col-4"></div>
    </main>    
</body>

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到