前端与移动开发-----CSS(三大特性+盒子模型原理)

CSS

三大特性(层叠性、继承性、优先级 )

CSS 三大特性之层叠性
在开发中出现样式层叠时候:对一个元素多次设置同一个样式,会使用最后一次设置的属性值 。
样式层叠的原则:样式冲突,就近原则,后定义,后生效;样式不冲突,无论定义先后,始终有效。
CSS 三大特性之继承性
CSS 的继承性的好处:可以从一定程度上简化代码 。
子元素通常能够继承哪些样式:子元素会继承父元素的某些样式,如文本颜色、字体属性等。
用 Chrome 的调试工具可以查询哪些属性是继承的:
在这里插入图片描述
*行高的继承
行高不跟单位表示文字大小的倍数,例如 1.5 表示以文字大小的 1.5 倍作为行高。
在 body 中指定行高 1.5 的最大优势:子元素可以根据自己的文字大小自动调整行高。
CSS 三大特性之优先级
学习优先级能解决的问题:当同一个元素被指定了多个选择器,需要掌握了 CSS 的优先级,才能准确地分析出到底 会应用哪个选择器中的样式
选择器的权重:
在这里插入图片描述
*优先级注意的问题
1.权重的数字不能进位
2.类选择器永远大于标签选择器
3.继承的权重是0
CSS 权重的叠加
在使用复合选择器时需要考虑权重叠加的问题
案例:(讲解看代码注释)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>权重的叠加</title>
    <style>
       /* 复合选择器会有权重叠加的问题 */
       /* 权重虽然会叠加,但是永远不会有进位 */
       /* ul li 权重  0,0,0,1 + 0,0,0,1  =  0,0,0,2     2 */
        ul li {
            color: green;
        }
        /* li 的权重是 0,0,0,1    1 */
        li {
            color: red;
        }
        /* .nav li  权重    0,0,1,0  +  0,0,0,1  =  0,0,1,1    11 */
        .nav li {
            color: pink;
        }
    </style>
</head>
<body>
    <ul class="nav">
        <li>大猪蹄子</li>
        <li>大肘子</li>
        <li>猪尾巴</li>
    </ul>
</body>
</html>

盒子模型原理

网页布局的三大核心:盒子模型 → 浮动 → 定位
盒子模型 - 边框 border
在 CSS 中可以通过border属性来设置边框
能够设置的边框样式:
在这里插入图片描述
边框的复合写法:
边框的复合写法没有顺序要求,推荐写法:

 border: 1px solid #000; 

可以单独设置一个边框:
在这里插入图片描述
*表格细线边框
适用场景:仅仅适用于表格

border-collapse: collapse

可以把相邻的边框合并到一起
*边框会影响盒子实际大小
如何解决:
1.测量盒子大小时,不测量边框。
2.width / height 减去边框宽度。
盒子模型 - 内边距 padding
内边距的应用场景:设置内容与边框之间的距离 .
分别设置四个方向的内边距:

padding-top: 10px; 
padding-right: 20px; 
padding-bottom: 30px; 
padding-left: 40px;

*padding 内边距的复合写法
在这里插入图片描述
*padding 会影响盒子实际大小
如何解决:width / height 减去多出来的 padding
案例:
利用 padding 撑开盒子巧做等距离的导航栏
相关取值:

  1. 上边框 3px #ff8500
  2. 下边框 1px #edeef0
  3. 盒子高度 41px ,背景色 #fcfcfc
  4. 文字颜色 #4c4c4c

在这里插入图片描述
参考代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>新浪导航</title>
    <style>
        .nav {
            height: 41px;
            border-top: 3px solid #ff8500;
            border-bottom: 1px solid #edeef0;
            background-color: #fcfcfc;
            line-height: 41px;
            font-size: 0;
        }

        .nav a {
            /* a属于行内元素 此时必须要转换 行内块元素 */
            display: inline-block;
            height: 41px;
            padding: 0 20px;
            font-size: 12px;
            color: #4c4c4c;
            text-decoration: none;
        }

        .nav a:hover {
            background-color: #eee;
            color: #ff8500;
        }
    </style>
</head>
<body>
    <div class="nav">
        <a href="#">新浪导航</a><a href="#">手机新浪网</a>

        <a href="#">移动客户端</a>
        <a href="#">微博</a>
        <a href="#">三个字</a>
    </div>
</body>
</html>

*处理 inline-block 的间隙(面试题)
将父级元素的字体设置为 0,内部重新设置字体。
*padding 不会撑开盒子的情况
块元素没有指定 width 属性, padding 不会撑大盒子的宽度,但是设置 padding-top 和 padding-bottom 会撑大盒子的高度 。
盒子模型 - 外边距 margin
外边距的应用场景:控制盒子与盒子之间的距离
给一个盒子分别设置四个方向的外边距:(行内元素垂直外边距除外)

margin-top: 10px; 
margin-right: 20px; 
margin-bottom: 30px; 
margin-left: 40px;

盒子外边距的复合写法:
在这里插入图片描述
*外边距典型应用-块级盒子水平居中对齐
两个条件:1. 盒子必须有宽度 2. 水平间距设置为 auto

margin:auto;

*行内元素和行内块元素水平居中
给其父盒子添加 text-align: center;

*外边距合并-相邻块元素垂直外边距
上面的盒子有 margin-bottom ,下面的盒子有 margin-top ,取最大值
解决办法:只设置一个盒子的 margin

*外边距合并-嵌套块元素塌陷
嵌套块元素塌陷的情况:
父子元素同时具有上外边距,父元素会塌陷较大的外边距。
解决方案:
1.顶部增加边框
2.顶部增加 padding
3.父级元素overflow: hidden; (推荐)

*清除内外边距
开发时要做清除内外边距的事情的原因:
网页元素很多都带有默认的内外边距,而且浏览器的默认值也不尽相同,清除内外边距可以避免默认样式对布局的干扰 。
推荐的清除内外边距的方案:

* {   
	margin: 0;   
	padding: 0; 
}

行内元素在设置内外间距时尽量只设置左右内外间距,不要设置上下内外间距。

综合案例 - 产品模块布局

产品模块布局分析图

在这里插入图片描述
像素大厨切图稿
在这里插入图片描述
素材图片
在这里插入图片描述
素材代码

<div class="box">   
<img src="images/img.jpg" alt="" />  
<p class="review">快递牛,整体不错蓝牙可以说秒连。红米给力</p>   
<div class="appraise">来自于 117384232 的评价</div>   
<div class="info">     
<h4>Redmi AirDots真无线蓝...</h4>     
<em>|</em>     
<span> 99.9元</span>   
</div> </div>

参考代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>综合案例-产品模块</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      body {
        background-color: #f5f5f5;
      }
      a {
        color: #333;
        text-decoration: none;
      }
      .box {
        width: 298px;
        height: 415px;
        background-color: #fff;
        /* 让块级的盒子水平居中对齐 */
        margin: 100px auto;
      }
      .box img {
        /* 图片的宽度和父亲一样宽 */
        width: 100%;
      }
      .review {
        height: 70px;
        font-size: 14px;
        /* 因为这个段落没有 width属性 所有 padding不会撑开盒子的宽度 */
        padding: 0 28px;
        margin-top: 30px;
      }
      .appraise {
        font-size: 12px;
        color: #b0b0b0;
        margin-top: 20px;
        padding: 0 28px;
      }
      .info {
        font-size: 14px;
        margin-top: 15px;
        padding: 0 28px;
      }
      .info h4 {
        display: inline-block;
        font-weight: 400;
      }
      .info span {
        color: #ff6700;
      }
      .info em {
        font-style: normal;
        color: #ebe4e0;
        margin: 0 6px 0 15px;
      }
    </style>
  </head>
  <body>
    <div class="box">
      <img src="images/img.jpg" alt="" />
      <p class="review">快递牛,整体不错蓝牙可以说秒连。红米给力</p>
      <div class="appraise">来自于 117384232 的评价</div>
      <div class="info">
        <h4><a href="#">Redmi AirDots真无线蓝...</a></h4>
        <em>|</em>
        <span> 99.9元</span>
      </div>
    </div>
  </body>
</html>

如有不足,请多指教,
未完待续,持续更新!
大家一起进步!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

東三城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值