CSS 弹性布局

Posted 一朵花花

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSS 弹性布局相关的知识,希望对你有一定的参考价值。

基本概念

flexflexible box 的缩写,意思为 “弹性盒子”
任何一个 html 元素,都可以指定为 display:flex 完成弹性布局

  • 容器和项目

容器 (flex container): 需要添加弹性布局的父元素,被设置为 display:flex 属性的元素
项目 ( flex item): 弹性布局容器中的每一个子元素

  • 两个基本方向

主轴 (flex direction): flex item 可以纵向排列,也可以横向排列 (主轴默认水平)
交叉轴: 与主轴垂直的另一方向,称为交叉轴

flex 布局的本质是给父盒子添加 display:flex 属性,来控制子盒子的位置和排列方式

注意: 当父元素设置为 display: flex 之后,子元素的 float,clear,vertical-align 都会失效

常用属性

justify-content

设置主轴上的子元素排列方式 (使用之前一定要确定好主轴是哪个方向)

属性取值

取值描述
flex-start默认值,项目位于容器的开头
flex-end项目位于容器的结尾
center项目位于容器中央
space-between项目在行与行之间留有间隔
space-around项目在行之前、行之间、行之后留有间隔

举例:

<body>
    <div id="d1">
        <span>1.花花</span>
        <span>2.大大</span>
        <span>3.小小</span>
    </div>
</body>
  • 未指定 justify-content 时
    (默认按照从左到右的方向布局)
<style>
    #d1 
        width: 100%;
        height: 200px;
        background-color: thistle;
        display: flex;
    
    #d1>span 
        background-color: yellow;
        width: 60px;
        height: 100px;
    
</style>

  • 设置 justify-content: flex-end
    (此时元素都排列到右侧了)
<style>
    #d1 
        width: 100%;
        height: 200px;
        background-color: thistle;
        display: flex;
        justify-content: flex-end;
    
    #d1>span 
        background-color: yellow;
        width: 60px;
        height: 100px;
    
</style>

  • 设置 jutify-content: center
    (此时元素居中排列)
<style>
    #d1 
        width: 100%;
        height: 200px;
        background-color: thistle;
        /* 父级元素设置弹性布局 */
        display: flex;
        justify-content: center;
    
    #d1>span 
        background-color: yellow;
        width: 60px;
        height: 100px;
    
</style>

  • 设置 justify-content: space-between
    (先两边元素贴近边缘, 再平分剩余空间)
<style>
    #d1 
        width: 100%;
        height: 200px;
        background-color: thistle;
        /* 父级元素设置弹性布局 */
        display: flex;
        justify-content: space-between;
    
    #d1>span 
        background-color: yellow;
        width: 60px;
        height: 100px;
    
</style>

  • 设置 justify-content: space-around
    (平分剩余空间)
<style>
    #d1 
        width: 100%;
        height: 200px;
        background-color: thistle;
        /* 父级元素设置弹性布局 */
        display: flex;
        justify-content: space-around;
    
    #d1>span 
        background-color: yellow;
        width: 60px;
        height: 100px;
    
</style>

align-items

设置侧轴上的元素排列方式
在 justify-content: 中,我们是让元素按照主轴的方向排列,我们也可以指定元素按照侧轴方向排列

属性取值

取值描述
stretch默认值,行拉伸以占据剩余空间
center朝着弹性容器中央对行打包
flex-start朝着弹性容器开头对行打包
flex-end朝着弹性容器结尾对行打包
space-between行均匀分布在弹性容器中
space-around行均匀分布在弹性容器中,两端各占一半

align-items 只能针对单行元素来实现,如果有多行元素,就需要使用 item-contents

  • stretch

这个是 align-content 的默认值,意思是如果子元素没有被显式指定高度,那么就会填充满父元素的
高度

举例:

<div id="d1">
    <span>1.花花</span>
    <span>2.大大</span>
    <span>3.小小</span>
</div>
  • center
<style>
     #d1 
        width: 100%;
        height: 200px;
        background-color: thistle;
        /* 父级元素设置弹性布局 */
        display: flex;
        align-items: center;
    
    #d1>span 
        background-color: yellow;
        width: 60px;
        height: 100px;
    
</style>

  • flex-start
<style>
     #d1 
        width: 100%;
        height: 200px;
        background-color: thistle;
        /* 父级元素设置弹性布局 */
        display: flex;
        align-items: flex-start;
    
    #d1>span 
        background-color: yellow;
        width: 60px;
        height: 100px;
    
</style>

  • flex-end
<style>
     #d1 
        width: 100%;
        height: 200px;
        background-color: thistle;
        /* 父级元素设置弹性布局 */
        display: flex;
        align-items: flex-end;
    
    #d1>span 
        background-color: yellow;
        width: 60px;
        height: 100px;
    
</style>

  • space-between

举例:

<style>
     #d1 
        width: 100%;
        height: 200px;
        background-color: thistle;
        /* 父级元素设置弹性布局 */
        display: flex;
        align-items: flex-end;
    
    #d1>span 
        background-color: yellow;
        width: 60px;
        height: 100px;
    
</style>
  • space-around

举例:

<style>
     #d1 
        width: 100%;
        height: 200px;
        background-color: thistle;
        /* 父级元素设置弹性布局 */
        display: flex;
        align-items: flex-end;
    
    #d1>span 
        background-color: yellow;
        width: 60px;
        height: 100px;
    
</style>

总结

  • ① 给父容器添加display: flex/inline-flex 属性,使容器内容采用弹性布局显示,而不遵循常规文档流的显示方式;
  • ② 容器添加弹性布局后,仅仅是容器内容采用弹性布局,而容器自身在文档流中的定位方式依然遵循常规文档流;
  • ③ display:flex; 容器添加弹性布局后,显示为块级元素;
    display:inline-flex; 容器添加弹性布局后,显示为行级元素;
  • ④ 设为 flex布局后,子元素的float、clear和vertical-align属性将失效;但是position属性,依然生效

参考资料: W3School

以上是关于CSS 弹性布局的主要内容,如果未能解决你的问题,请参考以下文章

CSS3--Flex弹性盒子布局:弹性布局和传统布局响应对比

CSS 弹性盒子布局详解

CSS: Flex 弹性布局

在css中如何声明弹性

CSS3弹性盒模型的布局理解

CSS3 flex弹性布局重点