学习过前端的人以及正在学前端的人都晓得,CSS布局两大核心:盒子模型 + Flex布局。前者决定元素的形态与占位,后者实现灵活的页面排布。搞懂行内、块级元素如何自由转换,再掌握Flex的对齐、排序、自适应技巧,布局效率直接翻倍。话不多说,进入正题。

行内元素与块级元素的特点,前面的表单的基础知识(新手小白)这篇文章讲过,所有现在讲一讲行内元素与块级元素之间如何转换的。核心就是靠display属性相互转换。

行内→块级:display:block;

效果:①独占一行;②支持设置宽、高、内外边距

 b {
            display: block;
            width: 200px;
            height: 80px;
        }

块级←行内:display:inline;

效果:①同行排列;②宽高不能自行设置,其宽高仅由内容撑起

#div2 {
            width: 200px;
            height: 80px;
            display: inline;
        }

行内块:display:inline-block;

效果:①同行并排;②宽高可以自行设置

 b {
    display: inline-block;
   }

补充!!!

隐藏元素:display:none;   作用:元素完全消失,不占页面空间。

接下来,就是知识的更深一步了。

弹性Flex布局,具体是说什么的?它是啥东西?

【Flex 布局核心概念与机制】

    Flexbox 是 CSS3 引入的一种一维布局模型,旨在提供更高效的方式来布局、对齐和分配容器内项目的空间。

    其核心概念包括:

  ①  容器与项目:采用 Flex 布局的元素称为 Flex 容器,其内部的子元素称为 Flex 项目。

 ② 主轴与交叉轴:Flex 容器有两根轴,主轴由flex-direction定义,交叉轴垂直于主轴。

③对齐方式:justify-content 控制主轴对齐,align-items 和 align-content 控制交叉轴对齐。

 ④ 空间分配:通过 flex-basis、flex-grow 和 flex-shrink 控制项目在主轴上的初始大小、放大和缩小比例。

再进一步深入讲解

1、容器:设置display:flex的元素;项目:容器里的元素。

容器常用属性:

display:flex:开启弹性布局 flex-direction:主轴方向 justify-content:主轴对齐 align-items:交叉轴对齐 flex-wrap:wrap:自动换行 (内容超出不挤压)
row(默认):水平排列 center:居中 center:垂直居中(水平排列时最常用)
colum:垂直排列 space-around:两侧留白均分
space-between:两端对齐、中间均分

项目常用属性:

flex:1:平分剩余空间(多元素等分宽度/高度) align-self:center:单独控制某个子元素对齐

2、Flex 容器默认规则(不写属性时的默认值

1. flex-direction: row

  a.主轴方向:水平从左到右

  b.项目会水平排列成一排

2. flex-wrap: nowrap  

   a. 不换行(默认)

   b.项目会被压缩以适应容器宽度(除非设置 flex-shrink: 0)

   c.如果想换行,需要设置: flex-wrap: wrap;

3. justify-content: flex-start

     a.主轴对齐方式:项目靠主轴起点(左)对齐

    b.其他值: flex-end(右) | center(居中) | space-between | space-around

4. align-items: stretch

     a.交叉轴对齐方式:项目会拉伸填满整个交叉轴方向

     b.前提:项目没有设置 height(或者 height 为 auto)

    c. 其他值: flex-start | flex-end | center | baseline

5. align-content: normal (在单行时无效)

        a.多行项目在交叉轴方向的对齐方式

6. flex-grow: 0

    a.默认不自动放大(当容器有剩余空间时)

     b.如果想自动放大: flex-grow: 1;

 7. flex-shrink: 1

      a.默认会自动收缩(当项目总宽度超过容器时)

      b. 注意:只有 width/flex-basis 参与收缩,margin/padding/border 不会收缩!

      c.如果不想收缩: flex-shrink: 0;

8. flex-basis: auto

   a.项目的基础尺寸,默认取 width 值

  c.也可以设置为具体像素: flex-basis: 100px;

代码解释:

 .container {
            /* 通过 display:flex 将此元素强制转换为 Flex 容器 */
            display: flex;
            /* 下面是可自行配置的灵活规则 */
            /* flex-direction: row;
            flex-wrap: nowrap;
            justify-content: flex-start; */

            border: 2px solid #aaa;
            width: 600px;
            height: 300px;
            padding: 10px;
        }

3、主轴对齐方式(justify-content)

justify-content属性的作用:作用:控制所有项目在主轴(水平方向)上的对齐方式和间距分布(前提:只有在主轴方向有剩余空间时才会生效)

可选值:

        1. flex-start :项目靠主轴起点(左边)对齐(默认值)

        2. flex-end :项目靠主轴终点(右边)对齐

        3. center:项目在主轴方向居中对齐

        4. space-evenly :项目之间以及项目与容器边缘的间距完全相等

        5. space-between : 项目之间间距相等,但首尾项目紧贴容器边缘

        6. space-around:项目两侧的外边距相等(项目之间间距是边缘间距的2倍)

代码示例解释:

.container {
            display: flex;
            border: 2px solid #a00;
            padding: 10px;
            height: 100px;
        }
        
        /* 
        ====== 项目样式 ======
        简单设置项目的尺寸和外观
        */
        .item {
            background-color: #4CAF50;
            border: 3px solid red;
            width: 80px;
            height: 40px;
            color: white;
            /* margin: 5px;
            padding: 20px; */
            text-align: center;
        }

运行结果截图:

4、多行项目在容器交叉轴方向的对齐方式(含换行控制

align-content属性作用:控制多行项目在交叉轴(垂直方向)上的对齐方式

重要前提:

      1. 必须先使用 flex-wrap: wrap 换行(产生多行)

      2. 只有一行时,align-content 无效

      3. 只有在交叉轴方向有剩余空间时才会生效

可选值:

      1. flex-start :所有行靠交叉轴起点(顶部)对齐

      2. flex-end:所有行靠交叉轴终点(底部)对齐

      3. center :所有行在交叉轴方向居中对齐

      4. space-between: 行之间间距相等,首行靠顶,末行靠底

      5. space-around : 行上下间距相等,整体与容器边缘也有间距

      6. stretch :默认值,行拉伸填满剩余空间(行内项目也会被拉伸)

flex-wrap 属性

可选值:

      1. nowrap (默认) :不换行,项目会被压缩以适应容器

      2. wrap:换行,项目超出容器时自动换到下一行

      3. wrap-reverse :换行,但反向显示(第一行在底部)

代码示例解释:

  /* 定义flex容器的基础样式 */
    .container {
      /* 将容器设置为flex布局 */
      display: flex; 
      /* 容器宽度固定,控制换行效果 */
      width: 500px; 
       /* 容器高度固定,为交叉轴留出空间 */
      height: 250px;
      /* 容器边框,方便观察整体范围 */
      border: 2px solid #333; 
      /* 容器之间的外边距,避免拥挤 */
      margin: 10px; 
      /* 强制换行:当项目总宽度超过容器时自动换行,产生多行 */
      flex-wrap: wrap;      
    }

    /* 
    ====== 项目样式 ======
    
    注意:本示例中项目没有 margin,所以 flex-shrink 可以正常压缩
    如果项目有 margin,margin 不会参与压缩,可能导致溢出
    */
    .item {
      /* 项目宽度 */
      width: 160px; 
      /* 项目高度 */
      height: 40px; 
      /* 项目边框 */
      border: green solid 1px; 
      /* 文字颜色 */
      color: red; 
      /* 文字水平居中 */
      text-align: center; 
      /* 项目外边距(注释掉,为了让 flex-shrink 正常压缩)*/
      /* margin: 5px;  */
    }

    /* 标题样式 */
    p { 
      margin: 20px 0 5px 10px;
    }

运行结果截图:

最后,我们的学习之旅在这里就结束了!慢慢都是干货,快来学习吧!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐