CSS盒子模型

一、CSS三大特性

1.1 继承性

可以控制文字的属性都能继承:color、font系列、text-indent、text-align、line-height等;但是超链接不能继承颜色属性,h系列标签不能继承font-size属性。

1.2 层叠性
  • 同一个标签设置不同的样式:样式层叠叠加,共同作用在标签上;

  • 同一个标签设置相同的样式:样式会层叠覆盖,最终写在最后的样式生效;

  • 当样式冲突时,只有当选择器优先级相同时,才能通过层叠性判断结果。

1.3 优先级

特点:不同选择器具有不同的优先级,优先级高的会覆盖优先级低的样式选择器。

优先级排序:继承<通配符选择器<标签选择器<类选择器<id选择器<行内样式<!important(总结:选择范围越小,优先级越高)

注意:

  • !important写在属性后面,分号前面;

  • !important不能提升继承的优先级,只要是继承优先级就最低

  • 实际开发不建议用!important。

<!--优先级:body<div<color1<one<style<!important -->
<html lang="en">
<head>
    <style>
        body{
            color: red;
        }
        div{
            color: pink !important;
        }
        .color1{
            color: blue;
        }
        #one{
            color: forestgreen;
        }
    </style>
</head>
<body>
    <div class="color1" id="one" style="color: fuchsia;">优先级测试</div>
</body>
</html>

复合选择器权重叠加:

计算公式(每级之间不进位)
(0, 0, 0, 0)——>(行内样式个数,ID选择器个数,类选择器个数,标签选择器个数)
从左到右分别为1~4级,先行内个数,若相同,则比较ID个数,依次类推

!important权重最高,继承权重最低

示例:

<html lang="en">
<head>
   <style>
    /* (0,1,0,1) */
    div #one{
           color: orange; 
        }
     /* (0,0,2,0) */
    .father .son{
        color: aqua;
    }
    /* (0,0,1,1) */
    .father p{
        color: blue;
    }
    /* (0,0,0.2) */
    div p{
        color: red;
    }
   </style>
</head>
<body>
    <div class="father">
        <p class="son" id="one">我有一个梦</p>  <!--文字颜色为orange-->
    </div>
</body>
</html>

二、盒子模型

页面中的标签都可以看成一个盒子。盒子模型包含以下几个部分:

内容区域(content:宽高width、heigh来确定)

外边距区域(margin)

边框区域(border)

内边距区域(padding)

内容区域:
.box {
  width: 100px;
  height: 100px;
}
边框区域:
/* 粗细 线条样式 颜色(不分先后顺序)*/
/* 默认4个方向都有*/
/*solid:实线 dashed:虚线 dotted:点线*/
border: 10px solid red;

/* 单个方向 */
border-top: 10px solid red;
border-bottom: 10px solid red;
border-left: 10px solid red;
border-right: 10px solid red;

/* 单个属性 */
border-width: 边框粗细
border-style: 边框样式
border-color: 边框颜色

内边距区域:(规律——值不够,看对面)

/* 可取 4 个值、3 个值、2 个值、1 个值 */
padding: 上 右 下 左;
padding: 上 左右 下;
padding: 上下 左右;
padding: 上下左右;

/* 单个方向 */
padding-top: 10px;
padding-bottom: 10px;
padding-left: 10px;
padding-right: 10px;

内减模式: box-sizing: border-box;

<html lang="en">
<head>
    <style>
        div{
            width: 300px;
            height: 300px;
            background-color: pink;
            padding: 20px;
            border: 10px solid #000;
						/* 自动计算实际内容的大小 */
            box-sizing: border-box;
        }
    </style>
</head>
<body>
    <div>
        这是div标签
    </div>
</body>
</html>

**外边距区域:**和padding类似

/* 可取 4 个值、3 个值、2 个值、1 个值 */
margin: 上 右 下 左;
margin: 上 左右 下;
margin: 上下 左右;
margin: 上下左右;

/* 单个方向 */
margin-top: 10px;
margin-bottom: 10px;
margin-left: 10px;
margin-right: 10px;

补充:清除默认样式和版心居中

/* 清除默认样式 */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
/* 版心居中 */
标签名{
  margin:0 auto;
}

三、盒子模型外边距问题

3.1 合并现象

**场景:**垂直布局的块级元素,上下的margin会合并;最终的外边距为两者中的最大值

解决办法:只给其中一个盒子设置margin即可

3.2 塌陷现象

**场景:**互相嵌套的块级元素,子元素设置margin-top会作用在父元素上。最终导致父元素一起往下移动。

解决办法:

  • 给父级元素设置border-top或者padding-top(不太靠谱的方法);

  • 给父级元素设置overflow:hidden(最靠谱);

  • 将子元素转换成行内块元素;

  • 设置浮动;

<html lang="en">
<head>
    <style>
        .one{
            width: 300px;
            height: 300px;
            background-color: pink;
            /* border-top: 1px solid #000; */
           /* overflow: hidden; */
        }
        .two{
            width: 100px;
            height: 100px;
            background-color: black;
            margin-top: 30px; 
            display: inline-block;
        }
    </style>
</head>
<body>
    <div class="one">
        <div class="two">这是第二个div</div>
    </div>  
</body>
</html>

行内标签的margin/padding:

水平方向可以改变,垂直方向不生效,用line-height来实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值