7.1 display属性的两层含义

7.1.1 单值写法的双值含义

问题。display属性表示什么含义?示例代码如下。

<body>
    <div style="display: inline;">div1 小步教程</div>
    <div style="display: inline;">div2 xiaobuteach.com</div>
    
    <div style="display: block;">div3 小步教程</div>
    <div style="display: block;">div4 xiaobuteach.com</div>

    <div style="display: flex;"> <!-- div5 -->
        <div style="width: 100px;">
            <div>第1列</div>
            <div>小步教程</div>
        </div>
        <div>
            <div>第2列</div>
            <div>xiaobuteach.com</div>
        </div>
    </div>
</body>

运行效果

img

div1与div2的display: inline表示自己属于不换行(行内),div3与div4的display: block表示自身独占一行,flex容器div5的display: flex表示自己的子元素按列显示。

问题。display究竟是设置“自己”还是“自己的子元素”?display究竟是表示当前元素的显示类型还是子元素的显示类型?display同时包含两层含义,既表示当前元素在父元素的显示类型,同时也表示子元素的显示类型。display表面只设置一个值,但相当于两个值的含义。


7.1.2 双值写法

display属性包含单值与双值两种写法,上述代码的双值等价写法如下。

<body>
    <div style="display: inline flow;">div1 小步教程</div>
    <div style="display: inline flow;">div2 xiaobuteach.com</div>
    
    <div style="display: block flow;">div3 小步教程</div>
    <div style="display: block flow;">div4 xiaobuteach.com</div>

    <div style="display: block flex;"> <!-- div5 -->
        <div style="width: 100px;">     <!-- div5-1 -->
            <div>第1列</div>
            <div>小步教程</div>
        </div>
        <div>                             <!-- div5-2 -->
            <div>第2列</div>
            <div>xiaobuteach.com</div>
        </div>
    </div>
</body>

display: inline与display: block省略了第2个值flow,display: flex则是省略了第1个值block,所以造成开始的理解困惑。


display双值语法

display: <display-outside> <display-inside> ;

display-outside表示当前元素作为子元素,它在父元素的显示类型,称为外部显示类型。

display-inside表示当前元素作为父元素,它内部子元素的布局类型,称为内部显示类型。

上述示例的div5

<div style="display: block flex;"> <!-- div5 -->

block对应<display-outside>,flow对应<display-inside>。block表示div5在父元素body内的显示类型是block独占一行,flex表示内部的两个子元素div5-1、div5-2作为两列显示。


注意事项1。不存在真实属性display-outside与display-inside,不能为元素设置这两个属性。可理解为display-outside与display-inside是内部特性。

注意事项2。实际项目使用display单值写法,讲解双值写法为了完全理解display模型。

注意事项3。display-outside可选值与display-inside可选值不能混用。下列属于错误用法。

display: flex block;