flex一把梭

学习链接

css — 让人上头的flex
grid布局看这一篇就够了

flex布局看这一篇就够了

flex

使用display:flex,可以让一个元素变成弹性容器(flex容器),该元素中的直接子元素成为弹性项(flex项)

flex-direction

使用flex-direction可以控制flex容器的主轴的方向:垂直(从上至下,或从下至上) 或 水平(从左至右,或从右至左)在这里插入图片描述

flex元素的自动宽度

未使用flex布局

/* flex.css */
body {
    margin: 0;
}
.container {
    border: 1px dashed black;
}
.item {
    background-color: #46b0e0;
    border: 2px solid #000;
    border-radius: 4px;
}
<!-- flex.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>
    <link rel="stylesheet" href="./css/flex.css">
</head>

<body>

    <div class="container">
        <div class="item">item 1111111</div>
        <div class="item">item 2</div>
        <div class="item">item 3</div>
        <div class="item">
            item 4 <br />
            item 4 <br />
            item 4 <br />
        </div>
        <div class="item">item 5</div>
        <div class="item">item 5</div>
    </div>

</body>

</html>

在这里插入图片描述

宽度设置为max-content

子元素的宽度,会一直不换行,即使超出了父元素的宽度
在这里插入图片描述

宽度设置为min-content

min-content的宽度是这段文字中最长的单词的宽度
在这里插入图片描述

使用flex布局

使用display:flex,开启flex布局后,原本每个子元素都独占一行,现在每一个元素都有一个默认的宽度,水平的排布到flex容器中。这里的默认宽度width就是max-content
在这里插入图片描述

当元素宽度远远超过flex容器的宽度时,元素的宽度就会默认变成min-content(min-content的宽度是这段文字中最长的单词的宽度)
在这里插入图片描述

flex元素宽度增大逻辑

flex-grow

指定flex元素的宽度

一般情况下,也可以直接使用width,如果定义了width,flex-basis:auto会直接拿width的值来用。
在这里插入图片描述

占满剩余宽度

使用flex-grow,指定flex元素的可获得的剩余宽度占比,设置该值后,当flex容器中还有剩余宽度时,将会把剩余宽度按照占比分配给各个flex元素。flex-grow默认值为0,即不占用剩余宽度。
在这里插入图片描述

设置flex元素宽度占比

将第一个元素的宽度设置为后面元素宽度的3倍,可以将flex-basis:0;然后使用flex-grow指定占比
在这里插入图片描述
但是,上面设置的占比有前提:默认的话,需要保证flex元素中的内容可读,width最小宽度是min-content(这样就会导致第一个元素并不是后面元素宽度的100倍)
在这里插入图片描述

但是如果一定要按照指定的占比的话,可以指定width,如下所示
在这里插入图片描述

flex元素宽度缩小逻辑

flex-shrink

默认收缩

在这里插入图片描述

收缩,但保证最小宽度

收缩也是有一个限制的,不能超过它的min-content
在这里插入图片描述

不收缩

在这里插入图片描述

flex简写属性

flex: grow shrink basis; ,默认是:flex:0 1 auto;

如果不写全,默认会不全,如下:

flex: 1;       => flex:1 1 auto;

flex: 1 1;     => flex:1 1 auto;

flex: 1 100px; => flex:1 1 100px;

flex: initial; => flex:0 1 auto;

flex: auto;    => flex:1 1 auto;

flex: none;    => flex:0 0 auto;

flex: 1 0px;   /* 子元素等分父元素宽度,因为这里指定了flex-basis:0px; */

flex容器的交叉轴对齐

align-items

注意到,当我们未设置display:flex时,每个div独占一行,但是它们的行高不一致;当设置了display:flex时,div都排在一行,并且高度相等。

这是因为align-items默认为stretch,它决定元素在交叉轴上的对齐方式。

stretch

stretch的含义是:把所有的元素都拉成统一的行高,如果flex容器没有设置高度,则由其中行高最大的元素来定义,如果flex容器设置了高度,则每个元素会撑满整个高度。
在这里插入图片描述

flext-start

在交叉轴的起点对齐
在这里插入图片描述

flext-end

在交叉轴的终点对齐
在这里插入图片描述

center

a

baseline

不管字体大小基线是什么,它们统一由文字的基线来对齐
在这里插入图片描述

flex容器的主轴对齐

justify-content

该属性决定主轴的对齐方式,默认值为flex-start;

flex-start

主轴的起点对齐
在这里插入图片描述

flex-end

主轴的终点对齐
在这里插入图片描述

center

在这里插入图片描述

space-between

两边边缘对齐,中间间隔相等

space-around

每个元素左右两边间隔相等,两边不贴着边缘
在这里插入图片描述

space-evenly

元素与元素、元素与边缘之间间隔相等,两边不贴着边缘
在这里插入图片描述

flex元素的换行

flex-wrap

nowrap

默认值:flex-wrap:nowrap;即默认不换行

在这里插入图片描述

wrap

换行,保证每个子元素都是200px,当父元素宽度不够容纳子元素时,子元素会换行

在这里插入图片描述

wrap-reverse

不常用在这里插入图片描述

flex多轴之间的对齐

align-content

normal

align-content的默认值是normal,效果默认与上面相同。

注意,多行子元素会把父元素指定的高度给占满(父容器的剩余高度,平分给子元素)。
在这里插入图片描述

flex-start

每行的高度,由最高的子元素决定
在这里插入图片描述

space-around

这个就让多行的交叉轴,多行的排布,有点类似主轴的那味了
在这里插入图片描述

space-between

这个就让多行的交叉轴,多行的排布,有点类似主轴的那味了
在这里插入图片描述

space-evenly

这个就让多行的交叉轴,多行的排布,有点类似主轴的那味了
在这里插入图片描述

center

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值