css页面布局flex和grid布局

flex布局

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

其中的基础概念包含:

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

主轴和交叉轴

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

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

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

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

弹性容器和弹性子元素

要想要使用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设置的即为元素占据剩余空间的比例。

例如:

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">
  <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. 元素在网页中上下左右据居中
css 复制代码
html, body {
  height: 100%;
}

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

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

grid布局(待更新)

相关推荐
Redstone Monstrosity7 分钟前
字节二面
前端·面试
东方翱翔14 分钟前
CSS的三种基本选择器
前端·css
Fan_web37 分钟前
JavaScript高级——闭包应用-自定义js模块
开发语言·前端·javascript·css·html
yanglamei19621 小时前
基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue
前端·数据库·flask
千穹凌帝1 小时前
SpinalHDL之结构(二)
开发语言·前端·fpga开发
dot.Net安全矩阵1 小时前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net
Hellc0071 小时前
MacOS升级ruby版本
前端·macos·ruby
前端西瓜哥1 小时前
贝塞尔曲线算法:求贝塞尔曲线和直线的交点
前端·算法
又写了一天BUG1 小时前
npm install安装缓慢及npm更换源
前端·npm·node.js
cc蒲公英2 小时前
Vue2+vue-office/excel 实现在线加载Excel文件预览
前端·vue.js·excel