Flexbox布局基础入门

Flexbox是CSS3的一种布局模式,用于灵活地排列和调整元素。本文介绍了Flexbox的基础概念,包括flex-direction、justify-content、align-items、flex-wrap和align-content属性,以及如何创建Flexbox容器。内容涵盖各种对齐方式和换行策略,帮助开发者理解和应用Flexbox布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是Flexbox

 Flexbox是 flexible box 的简称(灵活的盒子容器),是css3引入的新的布局模式。它决定了元素如何在页面上排列,使它们能在不同的屏幕尺寸和设备下可预测地展现出来。

它之所以被称为 Flexbox ,是因为它能够扩展收缩 flex 容器内的元素,以最大限度地填充可用空间。与以前布局方式(如 table 布局和浮动元素内嵌块元素)相比,Flexbox 是一个更强大的方式:

  • 在不同方向排列元素
  • 重新排列元素的显示顺序
  • 更改元素的对齐方式
  • 动态地将元素装入容器

虽然Flexbox非常适合缩放,对齐和重新排序元素。但对于部分旧版本的浏览器缺乏兼容性,特别对于IE内核的浏览器,IE11及更低版本的浏览器对于Flexbox的渲染效果不是很友好,部分较低版本甚至直接不支持Flexbox。所以如果需要完全支持旧版本浏览器的项目不建议使用Flexbox。

注意: Flexbox布局是最合适的一个应用程序的组件,以及小规模的布局,而网格布局是用于较大规模的布局。 

由于Flexbox是一个整体模块,而不是单一的一个属性,它涉及到了很多东西,包括它的整个属性集。它们之中有一些是在父容器上设置,而有一些则是在子容器上设置。

如图所示:

  1. 主轴(侧轴),Flexbox布局里面将一个可伸缩容器按照水平和垂直方向分为主轴或侧轴,如果你想让这个容器中的可伸缩项目在水平方向上可伸缩展开,那么水平方向上就是主轴,垂直方向上是侧轴,反之亦然;
  2. 主轴(侧轴)长度,当确定了哪个是主轴哪个是侧轴之后,在主轴方向上可伸缩容器的尺寸(宽或高)就被称作主轴长度,侧轴方向上的容器尺寸(宽或高)就被称作侧轴长度;
  3. 伸缩容器:如果要构建一个可伸缩的盒子,这些可伸缩的项目必须要由一个display:flex的属性的盒子包裹起来,这个盒子就叫做伸缩容器;
  4. 伸缩项目:包含在伸缩容器中需要进行伸缩布局的元素被称作伸缩项目;

构建Flexbox容器 

首先我们构建一个Flexbox容器,并放置几个可伸缩项目于容器中。

display:flex代表这个容器是一个可伸缩容器,还可以取值为inline-flex,两者的区别在于前者将这个容器渲染为块级元素,后者将其渲染为内联元素。

HTML代码:

<div class="flex-container">
      <div class="flex-item">box1</div>
      <div class="flex-item">box2</div>
      <div class="flex-item">box3</div>
      <div class="flex-item">box4</div>
</div>

css代码:

.flex-container{
    display:flex;
    width:500px;
    height:230px;
    background-color: #ccc;
}
.flex-item{
	background-color:#E8A651;
	width: 100px;
	margin: 5px;
	color: #fff;
}

效果:

四个可伸缩的盒子在水平方向排成一行,同时向左对齐;

flex-direction属性

flex-direction属性:

取值范围为rowcolumncolumn-reverserow-reverse

默认值是row,表示在水平方向上展开可伸缩项,row-reverse代表反方向展开可伸缩项;

如果取column代表在垂直方向上展开可伸缩项目,column-reverse代表反方向展开可伸缩项;

通俗讲,flex-direction属性就是用来定义主轴侧轴方向的。如下例所示:

HTML代码:

​
<div class="flex-container">
      <div class="flex-item">box1</div>
      <div class="flex-item">box2</div>
      <div class="flex-item">box3</div>
      <div class="flex-item">box4</div>
</div>

​

 CSS代码:

​
.flex-container{
    display:flex;
    flex-direction:column;
    width:500px;
    height:230px;
    background-color: #ccc;
}
.flex-item{
	background-color:#E8A651;
	width: 100px;
	margin: 5px;
	color: #fff;
}

​

效果:

justify-content属性

justify-content属性:

用来表示可伸缩项目在主轴方向上的对齐方式;

取值范围为flex-start,flex-end,center,space-between,space-around

其中flex-start,flex-end,表示相对于主轴起点和终点对齐,center表示居中对齐,space-between表示两端对齐并将剩余空间在主轴方向上进行平均分配,space-around表示居中对齐然后在主轴方向上将剩余空间平均分配。如下例所示:

HTML代码:

​
<div class="flex-container">
      <div class="flex-item">box1</div>
      <div class="flex-item">box2</div>
      <div class="flex-item">box3</div>
      <div class="flex-item">box4</div>
</div>

CSS代码:

.flex-container{
    display:flex;
    width:500px;
    height:230px;
    background-color: #ccc;
    justify-content: space-between;
}
.flex-item{
    background-color:#E8A651;
    width: 100px;
    margin: 5px;
    color: #fff;
}

效果:

align-items属性

align-items属性:

该属性是用来表示可伸缩项目在侧轴方向上的对齐方式;

取值范围有flex-start,flex-end,center,baseline,stretch

默认值是stretch表示元素被拉伸以适应容器,center表示元素位于容器的中心,flex-start表示元素位于容器的开头,flex-end则相反位于结尾;

需要注意的是baseline值,它让伸缩项目按照一个计算出来的基准线对齐,基准线的计算取决于可伸缩项目的尺寸及内容,如下例所示。

HTML代码:

 <div class="flex-container">
        <div class="flex-item a">box1</div>
        <div class="flex-item b">box2</div>
        <div class="flex-item c">box3</div>
        <div class="flex-item a">box4</div>
    </div>

css代码:

 .flex-container {
            display: flex;
            flex-direction: row;
            width: 500px;
            height: 230px;
            background-color: #ccc;
            justify-content: space-around;
            align-items: baseline;
        }

        .flex-item {
            background-color: #E8A651;
            width: 100px;
            margin: 5px;
            color: #fff;
        }

        .a {
            margin-top: 10px;
            height: 100px;
        }

        .b {
            margin-top: 20px;
            height: 150px;
        }

        .c {
            margin-top: 30px;
            height: 80px;
        }

效果:

可以看到四个盒子在垂直方向高度不同,外间距也不同,但是最后都在同一条水平基准线上; 

flex-wrap属性

flex-wrap属性:

表示是否支持换行或者换列;

取值范围为nowrap,wrap,wrap-reverse

默认值是nowrap,表示不换行或者不换列,wrap表示换行或者换列,wrap-reverse表示支持换行或者换列,但是会沿着相反方向进行排列(如主轴是垂直方向换行后就按照先下后上的顺序来排列伸缩项)

 HTML代码:

 <div class="flex-container">
        <div class="flex-item ">box1</div>
        <div class="flex-item ">box2</div>
        <div class="flex-item ">box3</div>
        <div class="flex-item ">box4</div>
        <div class="flex-item ">box5</div>
        <div class="flex-item ">box6</div>
        <div class="flex-item ">box7</div>
        <div class="flex-item ">box8</div>
 </div>

css代码:

.flex-container {
            display: flex;
            flex-direction: row;
            width: 600px;
            height: 230px;
            background-color: #ccc;
            justify-content: space-around;
            align-items: baseline;
            flex-wrap: wrap;
        }

        .flex-item {
            background-color: #E8A651;
            width: 100px;
            height: 70px;
            margin: 5px;
            color: #fff;
        }

效果:

align-content属性

align-content属性:

用来表示换行之后各个伸缩项的对齐方式;

取值范围为 stretch,flex-start,flex-end,center,space-between,space-around

stretch默认值,表示元素被拉伸以适应容器、center表示元素位于容器的中心、flex-start表示元素位于容器的开头、flex-end表示元素位于容器的结尾、space-between表示元素位于各行之间留有空白的容器内、space-around表示元素位于各行之前、之间、之后都留有空白的容器内。

css代码:

.flex-container{
    display:flex;
    flex-direction: row;
    width:600px;
    height:230px;
    background-color: #ccc;
    justify-content: space-around;
    align-items:baseline;
    flex-wrap: wrap;
    align-content: space-between;
}
.flex-item{
    background-color:#E8A651;
    width: 100px;
    height: 70px;
    margin: 5px;
    color: #fff;
}

效果:

【知识点】flex-flow属性

flex-flow属性属于复属性,它是flex-direction和flex-wrap的复合属性;

用于设置或检索弹性盒模型对象的子元素排列方式。

 flex-direction:row; flex-wrap:wrap就等同于flex-flow:row wrap

 注意:如果元素不是弹性盒对象的元素,则 flex-flow 属性不起作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值