HTML——css--盒子模型与布局

盒子:

 html中任何一个元素如div、span等都可以看作盒子,每个元素本质属性都会存在一些区别

 而这种现象则被称为盒子模型

盒子模型种类

 1.块级盒子(标签、元素):div ul li h1~h6

        独占一行,对宽度高度支持

    2.内联级盒子:span a

        不独占一行,对宽度高度不支持

    3.内联块级盒子:img input

        不独占一行,对宽度高度支持

    4.弹性盒子:

        不论父级能不能放下子元素,子元素始终横向布局

盒子模型分区

内容区:

    width:200px;

    height:100px;

填充区:

    padding:50px;

    padding:50px,20px;上下,左右

    padding:50px,20px,10px;上,左右,下

    padding:50px,20px,10px,100px;上,左,右,下

    单独一边设置:

    padding-top: 10px;

    padding-left: 10px;

    padding-right: 10px;

    padding-bottom: 10px;

边框区:

    组成:

        border-style:边框样式

        border-color:边框的颜色

        border-width:边框宽度

    例:

    1.分开写

        border-color: black;

        border-style: dashed;

        border-width: 5px;

    2.合着写

        border:solid 10px blue;//不用区分顺序,也可以加 -方向 来设置一条边

外边距://调整元素和元素之间的间距

    margin: 50px;

    margin:50px,20px;上下,左右

    margin:50px,20px,10px;上,左右,下

    margin:50px,20px,10px,100px;上,左,右,下

    水平方向上可以用 auto 来居中

注意:如果两个相邻元素都设置了间距,不是累加计算,而是按照大的走

例子:

.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="css/盒子模型.css">
</head>
<body>
    <div>
        <p id="x">aaa</p>
        <p id="y">bbb</p>
    </div>
</body>
</html>

.css

p{
    background: yellow;
    width: 200px;
    height: 100px;
    padding: 50px;
    border: solid 10px blue;
    margin: 100px auto;
}

 运行结果:

为了更好的直观理解其分区,我们可以右键单击,选中检查用于查询 

盒子模型布局

1.传统布局 float

    需要向横向布局的元素添加float属性:

        float: right;右浮动

        float: left;左浮动

如在刚才的.css的p标签的样式中添加

    float: right;

    存在的问题:

        使用float之后,所在的父级元素无高度,会导致下方元素向上移动

例子:

.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="css/盒子模型.css">
</head>
<body>
    <div>
        这是第一个div
        <p id="x">aaa</p>
        <p id="y">bbb</p>
    </div>
    <div>
        这是第二个div
    </div>
</body>
</html>

.css

div{
    background: gray;
}
div p{
    background: yellow;
    width: 200px;
    height: 100px;
    padding: 50px;
    border: solid 10px blue;
    margin: 100px auto;
    float: right;
    
}


运行:

    解决办法:

        1.给父级元素设置高度(需要根据子级元素的大小设置,并不推荐)

        2.父级不设高度,添加,使得父级高度随着自己高度变化而变化

div{
    background: gray;
    overflow:hidden
}

 

    无法解决:

        1.元素之间的均匀分布计算,而且不一定能均匀分布(有除不开的情况)

        2.或均匀父级也需要计算,而且不一定均分

        3.书写繁琐代码冗余

2.传统布局 display:inline-block 内联块级元素

    向需要横着布局的元素添加 display:inline-block 变为内联块级元素,内联块级元素不独占一行,对宽高支持

    存在的问题:

        使用之后产生莫名其妙的空隙,对整体的布局有影响

<!DOCTYPE html>
<html lang="en"> 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="css/盒子模型.css">
</head>
<body>
    <div>
        这是第一个div
        <p id="x">aaa</p>
        <p id="y">bbb</p>
    </div>
    <div>
        这是第二个div
    </div>
</body>
</html>
div{
    background: gray;
    overflow:hidden;
     
}
div p{
    background: yellow;
    width: 200px;
    height: 100px;
    padding: 50px;
    border: solid 10px blue;
    display: inline-block;
  
}

        

    产生原因:

        换行产生的空隙

    解决办法:

        1.让元素标签首尾相接(不推荐)

<p id="x">aaa</p><p id="y">bbb</p>

        2.字体大小设置:给使用display:inline-block的父级元素设置字体大小font-size: 0;,并且元素本身设置一个有效字体大小

div{
    background: gray;
    overflow:hidden;
    font-size: 0;
}
div p{
    font-size: 20px;
    background: yellow;
    width: 200px;
    height: 100px;
    padding: 50px;
    border: solid 10px blue;
    display: inline-block;
  
}

    无法解决:

        1.元素之间的均匀分布计算,而且不一定能均匀分布(有除不开的情况)

        2.或均匀父级也需要计算,而且不一定均分

        3.书写繁琐代码冗余

3.现代布局 display:flex 弹性盒子

    让多个元素横向布局,只需要给这些元素的父级元素添加  display:flex

div{
    background: gray;
    display: flex;
    
}
div p{
    background: yellow;
    width: 200px;
    height: 100px;
    padding: 50px;
    border: solid 10px blue;
}


    1.控制弹性盒子模型内子元素的排列方向 flex-direction 该属性取值如下:

        row 横向从左往右排列

        row-reverse 横向从右往左排列

        column 纵向从上到下排列

        column-reverse 纵向从下到上排列

    2.设置弹性盒子是否换行 flex-wrap 取值如下:

        wrap 换行

        nowrap 不换行

    3.设置弹性盒子内子元素的排列顺序 order 作用到子元素上

        属性值作为一个整数,值越小,该子元素出现的顺序越靠前

    4.flex 控制弹性盒子内子元素的缩放比例 复合属性

        flex-grow拉伸因子(作用到每个元素自己身上,输入的数值作为自己的份数)

        flex-shrink 压缩因子(与拉伸相反,数值越大,占比越小)

        flex-basis 基准因子

    5.控制弹性盒子内子元素的分布方式 justify-content 该属性取值如下:

        flex-start 代表这些元素在排列方向上的开始位置分布

        flex-end 代表这些元素在排列方向上的结束位置分布

        center 代表在排列方向上的中间位置分布

        space-betweem 空白元素分布在元素中间

        space-around 空白元素分布在元素周围

        space-evenly 空白元素均匀分散

    6.控制弹性盒子内子元素在垂直方向上的对齐方式 align-items 该属性取值如下:

        flex-start 顶部(左端)

        flex-end 底部(右端)

        center 居中对齐

        baseline 首行底部对齐

    7.设置弹性盒子内多行元素的分布方式 align-content: 该属性取值如下:
        flex-start:所有行都靠近顶部(左端》

        flex-end:所有行都靠近底部(右端)

        center:多有行居中显示

        space-between:空白元素分布在行与行之间

         space-around:空白元素分布在行的周围

        space-evenly:空白元素均匀分布

       



 


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值