css页面布局flex和grid布局

flex布局

flex布局又称为弹性布局,flex弹性盒子,flex盒子

其中的基础概念包含:

主轴和交叉轴 弹性容器和弹性子元素

主轴和交叉轴

元素在网页中横向排列的方向即可看做是主轴,元素在网页找你纵向排列的方向即可以看做是交叉轴。

代表了元素横向排列方向即为主轴,一个页面中有无数个主轴

代表了元素纵向排列方向的即为交叉轴,一个页面中有无数个交叉轴

默认情况下,主轴上的元素排列从左往右,交叉轴上的元素默认会从上到下排列

image.png

弹性容器和弹性子元素

要想要使用flex弹性盒子,需要给父容器设置属性:display: flex或者display:inline-flex

如果给父容器设置了上述的两个属性之一,那么父容器就可以称之为弹性容器,子元素(儿子不包括其他级别的后代元素)就可以称为叫做弹性子元素。

当元素设置为display:flex时,弹性容器相当于是变成了一个块元素,那么这个弹性容器将不能和其他的块并排显示。

当元素设置为display:inline-flex时,弹性容器相当于变成了一个行内块元素,可以和其他的行内元素或者行内块元素并排显示。(当设置成diaplay-inline-flex时 文本中的margin属性将会失效,想要将元素水平居中 需要给父元素设置 text-align: center;)

弹性容器属性

1.flex-direction设置主轴的方向

默认情况下,主轴方向从左向右,我们可以通过flex-direction来调整主轴方向

属性值:

  • row(默认值)主轴为水平方向,项目排列起点在左端
  • row-reverse 主轴为水平方向,起点在右端
  • column 主轴方向为垂直方向,起点在上沿
  • column-reverse 主轴方向为垂直方向,起点在下沿

2.flex-warp换行

属性值:

  • nowarp (默认值)不换行
  • warp 换行,第一行在上方
  • warp-reverse 换行,第一行在下方

3.flex-flow

这个属性是flex-direction 和flex-warp属性的简写

4.justify-content设置元素在主轴上的排列方式(这个属性很常用)

该属性可以设置元素在主轴上的排列方式

属性值:

  • flex-star(默认值)表示元素在主轴上默认左对齐
  • flex-end 元素右对齐,需要注意,主轴方向没有发生改变,还是从左往右
  • center 元素左右居中排列
  • space-between: 两端对齐,子元素之间的间隔相等
  • space-around: 子元素之间的间隔相等。两端间隔相等。两端的元素距离边界的距离是元素与元素之间间隔的一半
  • space-evenly 子元素在容器中平局分配空间,两端的元素距离边界的距离和元素与元素之间的间隔是完全相等的。

5.align-items元素在交叉轴排列方式(这个属性很常用)

该元素可以设置元素交叉轴的对其排列方式

属性值:

  • flex-start 元素在交叉轴的起点对齐
  • flex-end 元素在交叉轴的终点对齐
  • center 元素在交叉轴的中点对齐
  • baseline 基线对齐
  • stretch(默认值) ,如果子元素未设置高度或者设为auto,将占满整个容器的高度。

6.align-content 多行元素在交叉轴的排列方式

该元素能够设置多行元素在交叉轴如何排列,如果子元素只有一行,则该属性失效,建议使用align-items

属性值:

  • flex-start 多行元素在交叉轴的起始位置排列,多行元素之间没有空隙
  • flex-end 多行元素在交叉轴的终点位置排课,多行元素之间没有空隙
  • center 多行元素在交叉轴的中点位置排列,多行元素之间没有空隙
  • space-between 多行元素在交叉轴上平均分配空间排列,最前面和最后面的元素结贴边界
  • space-around多行元素在交叉轴上平均分配空间排列,最前面和最后面的元素距离边界有元素与元素之间间隔一半的距离
  • space-evenly 多行元素在交叉轴上平均分配空间排列,间距相同。

弹性容器属性

1.order属性 调整元素配列顺序

order 属性能够在不改变代码结构的前提下,可以修改元素的渲染位置
给弹性子元素设置order属性,值越小,元素排列越靠前

2.flex-grow定义元素的放大比例

这里有一个新的概念,剩余空间

什么是剩余空间:主轴方向上没有被占用的宽度即为剩余空间,而flex-grow设置的即为元素占据剩余空间的比例。

例如:

<!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>
  <style>
    .box {
      width: 500px;
      height: 300px;
      border: 1px solid red;
      display: flex;
    }

    .box div {
      width: 100px;
      height: 100px;
      /* border-radius: ; */
    }

    div.d1 {
      background-color: pink;
      flex-grow: 2;
    }

    .d2 {
      /* border-radius: 50%; */
      background-color: lightblue;
      flex-grow: 1;
    } 

    /* 200 / 4 = 50   */
    div.d3 {
      background-color: orange;
      flex-grow: 1;
    }
  </style>
</head>
<body>
  <div class="box">
    <div class="d1"></div>
    <div class="d2"></div>
    <div class="d3"></div>
  </div>
</body>
</html>

比如上面的代码中 d1 flex-grow 为2 ,d2 和d3 的flex-grow 为1 就相当于把剩余空间分成4份,d1 占2份,d2和d3各占一份

3.flex-shrink定义元素的缩小比例

弹性子元素默认情况下,在父容器宽度不够的时候,会进行自动缩小,缩小比例就由flex-shrink属性来进行控制(默认值为1)

如果将某个属性的缩小比例值设置为0,那么当容器宽度不够的时候,该元素就不会发生缩小的现象。

4.flex-basis属性

该属性设置的是元素在主轴上占据的宽度,会默认我换掉元素宽度,如果元素不在是弹性子元素,那么将会变回原来本身的宽度

5.aligin-self属性

该属性用来设置子元素在交叉轴上的对齐方式

属性值如下:

  • auto表示继承父容器的align-items属性
  • flex-start 元素在交叉轴的起点对齐
  • flex-end 元素在交叉轴的终点对齐
  • center 元素在交叉轴的中点对齐
  • baseline 基线对齐
  • stretch 沿着交叉轴方向自动进行拉伸到最大

flex简写

flex属性是flex-grow、flex-shrink和flex-basis的简写,默认值为0 1 auto。后两个属性可选。

  • flex: 1
    • flex-grow: 1;
    • flex-shrink: 1;
    • flex-basis: 0%;
  • flex: 2
    • flex-grow: 2;
    • flex-shrink: 1;
    • flex-basis: 0%;
  • flex: 100px
    • flex-grow: 1;
    • flex-shrink: 1;
    • flex-basis: 100px;
  • flex: 200px
    • flex-grow:1;
    • flex-shrink: 1;
    • flex-basis: 200px
  • flex: 1 2;
    • flex-grow:1;
    • flex-shrink: 2;
    • flex-basis:0%;
  • flex: 2 3;
    • flex-grow: 2;
    • flex-shrink: 3;
    • flex-basis: 0%;
  • flex: 1 200px;
    • flex-grow: 1;
    • flex-shrink: 1;
    • flex-basis: 200px;
  • flex: 2 200px;
    • flex-grow: 2;
    • flex-shrink: 1;
    • flex-basis: 200px;

flex布局的一些小应用

  1. 元素在网页中上下左右据居中
html, body {
  height: 100%;
}

body {
  display: flex;
  /* 元素在主轴居中 */
  justify-content: center;
  /* 元素在交叉轴居中 */
  align-items: center; 
}
  1. 移动端网页必须要设置的样式
html,body{
  height:100%;
}

body{
  display: flex;
  flex-direction: column;
}
main{
  flex: 1
  
}

grid布局(待更新)

(因为grid布局还有好多兼容性问题,所以前面会有很多前缀)
在这里插入图片描述

grid布局,也称之为网格布局,是将页面的父元素划分成一个个小的格子,然后通过这些小格子进行合并制作出各种不同的网站效果

开启gird布局:

display:gird;
display:inline-grid;
  • gird 表示块状网格,默认独占一行。
  • inline-grid 表示行内网格,与行内元素类似
    gird布局与flex布局的相同点和不同点:
    相同点:
  • 都有容器和项目之分
    不同点:
  • flex被称之为一维布局,也叫做轴线布局
  • grid被称为二维布局,有行列之分

gird布局的基本概念

一个m行n列的网格,需要使用m+1条横向,n+1条纵向网格线组成

gird中的容器属性

  1. 开启gird布局:
display:gird;
display:inline-grid;
  1. 行属性
grid-template-rows:100px 100px 100px;
  1. 列属性
grid-template-columns:100px 100px 100px; 

行列属性的取值

  1. 取值为纯数字
grid-template-rows:100px 100px 100px; 
grid-template-columns:100px 100px 100px;

在这里插入图片描述
2. 取值为百分比

grid-template-rows:20% 30% 50%; 
grid-template-columns:100px 100px 100px;

在这里插入图片描述
3. 取值为重复函数
repeate(num1,num2)函数

  • num1重复的次数
  • num2需要重复的数值
    在这里插入图片描述
  1. 取值为自动填充
    auto-fill,应用在重复函数中,代表的是根据需要重复的数值,进行自动填充数量
    在这里插入图片描述
    在这里插入图片描述

  2. 取值为aoto自动
    auto自动代表的是,占剩余宽度和剩余高度的所有
    在这里插入图片描述

  3. 取值为fr片段划分
    片段划分:为了方便表示比例关系,网格布局提供了fr关键字(fraction的缩写,意为“片段”)。如果两列的宽度分别为1fr和2fr,就表示后者是前者的两倍。
    在这里插入图片描述

  4. 取值为minmax()
    minmax(num1,num2)函数,可以理解成最小最大值函数,函数中两个参数;参数1代表的是最小值,参数2代表的是最大值;
    如果条件允许,则一直使用最大值,如果条件不满足则使用中间值,如果剩下的距离不足以显示距离大小,则使用最小值
    在这里插入图片描述
    在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值