【Web前端开发基础】CSS的盒子模型

CSS的盒子模型

一、学习目标

  1. 能够认识不同选择器的优先级公式
  2. 能够进行CSS权重叠加计算,分析并解决CSS 冲突问题
  3. 能够认识盒子模型的组成部分
  4. 能够掌握盒子模型的边框、内边距、外边距的作用及简写形式
  5. 能够计算盒子的实际大小
  6. 能够了解外边距折叠现象,并知道如何解决盒子塌陷问题

二、文章内容

2.1 CSS三大特性

目标:能认识不同选择器的优先级公式,能够进行CSS权重叠加计算,分析并解决CSS 冲突问题

2.1.1 优先级

特性:不同选择器具有不同的优先级,优先级高的选择器样式会覆盖优先级低选择器样式
优先级的公式:继承 < 通配符选择器 < 标签选择器 < 类选择器 < id选择器 < 行内样式 <
!important

注意点:

  1. !important写在属性值的后面,分号的前面
  2. !important不能提升继承的优先级,只要是继承,优先级最低!!
  3. 实际开发过程中不建议使用!important

2.1.2 权重叠加计算公式

  • 场景:如果是复合选择器,此时需要通过权重叠加计算方法,判断最终哪个选择器优先级最高会生

  • 权重叠加计算公式:(每一级之间不存在进位)
    在这里插入图片描述

  • 比较规则:

    1. 先比较第一级数字,如果比较出来了,之后的统统不看
    2. 如果第一级数字相同,此时再去比较第二级数字,如果比较出来了,之后的统统不看
    3. ……
    4. 如果最终所有数字都相同,表示优先级相同,则比较层叠性(谁写在下面,谁说了算!)
  • 注意点:!important如果不是继承,则权重最高,天下第一!

2.1.3 权重叠加计算案例

  • 权重计算题的解题步骤
    1. 先判断选择器是否能直接选中标签,如果不能直接选中 → 是继承,优先级最低 → 直接pass
    2. 通过权重计算公式,判断谁权重最高
  • 注意点:实际开发中选择标签需要精准,尽量避免多个选择器同时选中一个标签的情况,不要自己难为自己

2.2 Chrome调试工具查错流程

遇到样式出不来,要学会通过调试工具找错!!!
在这里插入图片描述

2.3 PxCook的基本使用

目标:能够使用 PxCook 工具测量设计图的尺寸和颜色,能够从psd文件中直接获取数据

  1. 通过软件打开设计图
    ① 打开软件 ② 拖拽入设计图 ③ 新建项目
  2. 常用快捷键
    放大设计图:ctrl + +
    缩小设计图:ctrl + -
    移动设计图:空格按住不放,鼠标拖动
  3. 常用工具 (量尺寸、吸颜色)
  4. 从psd文件中直接获取数据
    切换到开发界面,直接点击获取数据

2.4 盒子模型

目标:能够认识盒子模型的组成,能够掌握盒子模型边框、内边距、外边距的设置方法

2.4.1 盒子模型的介绍

  1. 盒子的概念
    页面中的每一个标签,都可看做是一个“盒子”,通过盒子的视角更方便的进行布局
    浏览器在渲染(显示)网页时,会将网页中的元素看做是一个个的矩形区域,我们也形象的称
    之为盒子
  2. 盒子模型
    CSS 中规定每个盒子分别由:
    内容区域(content)、内边距区域(padding)、边框区域(border)、外边距区域(margin )
    构成,这就是盒子模型
  3. 记忆:可以联想现实中的包装盒
    在这里插入图片描述

2.4.2 内容的宽度和高度

  • 作用:利用 width 和 height 属性默认设置是盒子 内容区域 的大小
  • 属性:width / height
  • 常见取值:数字 + px
    在这里插入图片描述

2.4.3 边框(border)

  1. 边框(border)- 单个属性

    • 作用:设置边框粗细、边框样式、边框颜色效果
    • 单个属性
      在这里插入图片描述
  2. 边框(border)- 连写形式

    • 属性名:border
    • 属性值:单个取值的连写,取值之间以空格隔开
      如:border : 10px solid red;
    • 快捷键:bd + tab
  3. 边框(border)- 单方向设置

    • 场景:只给盒子的某个方向单独设置边框
    • 属性名:border-方位名词
    • 方位名词:top right bottom left
    • 属性值:连写的取值
  4. 盒子实际大小初级计算公式

    • 注意点:
      ① 设置width和height是内容的宽高!
      ② 设置border会撑大盒子

    • 盒子实际大小初级计算公式:

      • 盒子宽度 = 左边框 + 内容高度 + 右边框
      • 盒子高度 = 上边框 + 内容高度 + 下边框
        在这里插入图片描述
    • 当盒子被border撑大后,如何满足需求?

      • 解决1:计算多余大小,手动在内容中减去(手动内减)
      • 解决2:设置box-sizing: border-box;即可
  5. 边框的应用

    • border可以实现有样式的分割线
  <div class="line"></div>
  <style>
  .line {
  width: 500px;
  border-top: 1px solid blue;
  }
  </style>
  • border 可以实现各种箭头,例如,实现向下的箭头
<div class="arrow"></div>
<style>
.arrow {
/* 内容宽高为0,只显示边框 */
width: 0px;
height: 0px;
box-sizing: content-box;
border: 15px solid;
/* 只有上边框显示颜色,其他三个方向透明,形成向下的箭头 */
border-color: black transparent transparent transparent;
}
</style>

2.4.4 内边距(padding)

  1. 内边距(padding)- 取值
    • 作用:设置边框与内容区域之间的
    • 属性名:padding
    • 常见取值:
      在这里插入图片描述
    • 记忆规则:先从上开始赋值,然后顺时针赋值,如果没有赋值的???看对面的!!!
  2. 内边距(padding)- 单方向
  • 场景:只给盒子的某个方向单独设置内边距
  • 属性名:padding-方位名词
  • 方位名词:top right bottom left
  • 属性值:数字 + px
  1. 盒子实际大小终极计算公式
    • 注意点:
      ① 设置width和height是内容的宽高!
      ② 设置border会撑大盒子
      ③ 设置padding会撑大盒子
    • 盒子实际大小终极计算公式:
      • 盒子宽度 = 左边框 + 左padding + 内容宽度 + 右padding + 右边框
      • 盒子高度 = 上边框 + 上padding + 内容宽度 + 下padding + 下边框
        在这里插入图片描述
  • 解决:当盒子被border和padding撑大后,如何满足需求?
    解决1:自己计算多余大小,手动在内容中减去(手动内减)
    解决2:设置box-sizing: border-box;即可
  1. 不会撑大盒子的特殊情况(块级元素)
    ① 如果盒子没有设置宽度,此时宽度默认是父元素的宽度
    ② 此时给盒子设置左右的padding或者左右的border此时不会撑大盒子
  2. CSS3盒模型(自动内减)
    • 需求:给盒子设置border或padding时,盒子会被撑大,如果不想盒子被撑大?
    • 解决方法 ① :手动内减
      • 操作:自己计算多余大小,手动在内容中减去
      • 缺点:项目中计算量太大,很麻烦
    • 解决方法 ② :自动内减
      • 操作:给盒子设置属性 box-sizing : border-box
      • 优点:浏览器会自动计算多余大小,自动在内容中减去

2.4.5 外边距(margin)

  1. 外边距(margin)- 取值

    • 作用:设置边框以外,盒子与盒子之间的距离
    • 属性名:margin
    • 常见取值:
      在这里插入图片描述
    • 记忆规则:先从上开始赋值,然后顺时针赋值,如果没有赋值的???看对面的!!!
  2. 外边距(margin)- 单方向设置

    • 场景:只给盒子的某个方向单独设置外边距
    • 属性名:margin - 方位名词
    • 属性值:数字 + px
  3. margin单方向设置的应用
    在这里插入图片描述

  4. 清除默认内外边距

    • 场景:浏览器会默认给部分标签设置默认的margin和padding,但一般在项目开始前需要先清除这些标签默认的margin和padding,后续自己设置
      • 比如:body标签默认有margin:8px
      • 比如:p标签默认有上下的margin
      • 比如:ul标签默认由上下的margin和padding-left
      • ……
    • 解决方法
/* 淘宝代码 */
blockquote, body, button, dd, dl, dt, fieldset, form, h1, h2, h3,
h4, h5, h6, hr, input, legend, li, ol, p, pre, td, textarea, th, ul
{
margin: 0;
padding: 0;
}
/* 京东代码 */
* {
margin: 0;
padding: 0;
}
  1. 外边距正常情况
    • 场景:水平布局的盒子,左右的margin正常,互不影响
    • 结果:最终两者距离为左右margin的和
  2. 外边距折叠现象 – ① 合并现象
    • 场景:垂直布局的块级元素,上下的margin会合并
    • 结果:最终两者距离为margin的最大值
    • 解决方法:避免就好,只给其中一个盒子设置margin即可
  3. 外边距折叠现象 – ② 塌陷现象
    • 场景:互相嵌套的块级元素,子元素的margin-top会作用在父元素上
    • 结果:导致父元素一起往下移动
    • 解决方法:
      1. 给父元素设置border-top 或者 padding-top(分隔父子元素的margin-top)
      2. 给父元素设置overflow:hidden
      3. 转换成行内块元素
      4. 设置浮动
  4. 行内元素的margin和padding无效的情况
    • 场景:给行内元素设置margin和padding时
    • 结果:
      1. 水平方向的margin和padding布局有效!
      2. 垂直方向的margin和padding布局无效!

2.4.6 box-sizing属性

box-sizing属性决定了盒子的计算方式,取值如下:

  1. content-box(默认取值)
    此时width和height指内容的宽度和高度,border和padding不计入width和height之内
    盒子的总宽度 = width + padding + border + margin
    盒子的总高度 = height + padding + border + margin
  2. padding-box
    此时width和height包含内容和padding
    盒子的总宽度 = width + border + margin
    盒子的总高度 = width + border+ margin
  3. border-box(开发中经常用到)
    此时width和height包含内容和padding、border
    盒子的总宽度 = width + margin
    盒子的总高度 = width + margin

三、综合案例

3.1 综合案例:新浪导航

<!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>
    <style>
        /* 清除标签默认的margin和padding */
        * {
            margin: 0;
            padding: 0;
        }

        .box {
            height: 40px;
            border-top: 3px solid #ff8500;
            border-bottom: 1px solid #edeef0;
        }

        .box a {
            display: inline-block;
            /* width: 80px; */
            height: 40px;
            /* 通过内边距设置边框与内容的间距 */
            padding: 0 20px;
            color: #4c4c4c;
            text-decoration: none;
            text-align: center;
            line-height: 40px;
            font-size: 12px;
        }

        .box a:hover {
            background-color: #edeef0;
            color: #ff8400;
        }
    </style>
</head>
<body>
    <div class="box">
        <a href="#">新浪导航</a>
        <a href="#">新浪导航新浪导航</a>
        <a href="#">新浪导航</a>
        <a href="#">新浪导航</a>
    </div>
</body>
</html>

在这里插入图片描述

3.2 综合案例:网页新闻列表案例

<!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>
    <style>
        /* 清除标签默认的margin和padding */
        * {
            margin: 0;
            padding: 0;
        }

        body {
            /* 去除行高带来的默认间隙,完成精准布局 */
            line-height: 1;
        }

        .box {
            width: 500px;
            height: 400px;
            /* background-color: pink; */
            border: 1px solid #ccc;
            padding: 41px 30px 0;
            /* 自动内减 */
            box-sizing: border-box;
        }

        .box h2 {
            height: 41px;
            /* background-color: pink; */
            border-bottom: 1px solid #ccc;
            /* 自动内减 */
            box-sizing: border-box;
            font-size: 30px;
        }

        .box ul {
            list-style: none;
        }

        .box ul li {
            height: 50px;
            padding-left: 30px;
            border-bottom: 1px dashed #ccc;
            line-height: 50px;
        }

        .box li a {
            text-decoration: none;
            font-size: 18px;
            color: #666;
        }
    </style>
</head>
<body>
    <div class="box">
        <h2>最新文章/New Articles</h2>
        <ul>
            <li><a href="#">北京招聘网页设计,平面设计,php</a></li>
            <li><a href="#">体验javascript的魅力</a></li>
            <li><a href="#">jquery世界来临</a></li>
            <li><a href="#">网页设计师的梦想</a></li>
            <li><a href="#">jquery中的链式编程是什么</a></li>
        </ul>
    </div>
</body>
</html>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/339557.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Go面试向】rune和byte类型的认识与使用

【Go】rune和byte类型的认识与使用 大家好 我是寸铁&#x1f44a; 总结了一篇rune和byte类型的认识与使用的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; byte和rune类型定义 byte,占用1个字节&#xff0c;共8个比特位&#xff0c;所以它实际上和uint8没什么本质区别,它表示…

第十四课:eNSP AAA配置教程

一、AAA介绍 AAA是Authentication&#xff08;认证&#xff09;、Authorization&#xff08;授权&#xff09;和Accounting&#xff08;计费&#xff09;的简称&#xff0c;是一种管理框架&#xff0c;它提供了授权部分用户访问指定资源和记录这些用户操作行为的安全机制。因其…

ip_vs 的管理以及 keepalived + lvs 案例

ip_vs 的管理 ipvsadm 与 keepalived for lvs ipvsadm 命令及参数介绍 部署和配置LVS服务会经常用到一些命令&#xff0c;如ipvsadm&#xff0c;可以使用“ipvsadm -help”命令查看使用帮助。 ipvsadm 命令的常用参数及其说明如下&#xff1a; # 添加虚拟服务器# 语法&#x…

计算机网络自顶向下Wireshark labs1-Intro

Wireshark labs1 实验文档&#xff1a;http://www-net.cs.umass.edu/wireshark-labs/Wireshark_Intro_v8.0.pdf 介绍 加深对网络协议的理解通常可以通过观察协议的运行和不断调试协议来大大加深&#xff0c;具体而言&#xff0c;就是观察两个协议实体之间交换的报文序列&…

python系列-顺序/条件/循环语句

&#x1f308;个人主页: 会编程的果子君 ​&#x1f4ab;个人格言:“成为自己未来的主人~” 目录 顺序语句 条件语句 什么是条件语句 语法格式 缩进和代码块 空语句pass 循环语句 while循环 for循环 continue break 顺序语句 默认情况下&#xff0c;Python的代码执行…

精准核酸检测 - 华为OD统一考试

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 为了达到新冠疫情精准防控的需要&#xff0c;为了避免全员核酸检测带来的浪费&#xff0c;需要精准圈定可能被感染的人群。 现在根据传染病流调以及大数据分析&a…

Linux第34步_TF-A移植的第2步_修改设备树和tf-a.tsv

在虚拟机中&#xff0c;使用VSCode打开linux /atk-mp1/atk-mp1/my-tfa/目录下tf-a.code-workspace”&#xff1b; 找到“tf-a-stm32mp-2.2.r1/fdts”目录&#xff0c;就是设备树文件所在的目录。 见下图&#xff1a; 一、修改“stm32mp157d-atk.dts” 修改后&#xff0c;见下…

日志平台搭建手册

1. Java环境安装和配置 JDK要求安装1.8版本&#xff0c;安装可以参考《Linux安装JDK完整步骤》。 2. 创建用户 创建elk用户&#xff0c;用来管理elk相关的服务&#xff0c;包括&#xff1a;filebeat、logstash、elasticsearch、kibana。执行命令&#xff1a; useradd elk …

VC++中使用OpenCV进行人脸检测

VC中使用OpenCV进行人脸检测 对于上面的图像&#xff0c;如何使用OpenCV进行人脸检测呢&#xff1f; 使用OpenCV进行人脸检测十分简单&#xff0c;OpenCV官网给了一个Python人脸检测的示例程序&#xff0c; objectDetection.py代码如下&#xff1a; from __future__ import p…

计算机网络-分层结构,协议,接口,服务

文章目录 总览为什么要分层怎样分层正式认识分层概念小结 总览 为什么要分层 发送文件前要做的准备工作很多 把这个准备工作分层小问题解决&#xff0c;也就分层解决 怎样分层 每层相互独立&#xff0c;每层做的工作不同 界面自然清晰&#xff0c;层与层之间的接口能够体现…

(2)(2.1) Andruav Android Cellular(二)

文章目录 前言 5 Andruav Web Client 6 Andruav Telemetry 7 Andruav高级功能 8 将Andruav与SITL配合使用 9 FAQ 10 术语表 前言 Andruav 是一个基于安卓的互联系统&#xff0c;它将安卓手机作为公司计算机&#xff0c;为你的无人机和遥控车增添先进功能。 5 Andruav W…

【Java】IDEA集成开发环境工具切换JDK和设置环境变量

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《Java》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握…

CTF CRYPTO 密码学-5

题目名称&#xff1a;山岚 题目描述&#xff1a; 山岚 f5-lf5aa9gc9{-8648cbfb4f979c-c2a851d6e5-c} 解题过程&#xff1a; Step1&#xff1a;根据题目提示栅栏加密 分析 观察给出的密文发现有f、l、a、g等字符有规律的夹杂的密文中间&#xff0c;看出都是每3个字符的第1…

只会 Python 不行,不会 Python 万万不行 。。。

当下的环境大家有目共睹&#xff0c;未来一段时间情况如何&#xff0c;想必不少人心里也清楚&#xff0c;技术人走到中年&#xff0c;难免会焦虑&#xff0c;职场上干得不爽&#xff0c;但是跳槽也不容易&#xff0c;加上不少企业裁员&#xff0c;换个满意的工作更是难上加难。…

大学生图像采集上传成功的秘诀被破解了‼️

✅大学生毕业图像采集上传成功了我喜欢的 大学生图像采集可以自己上传 尤其是毕业采集&#xff0c; 很多同学都需要自己拍照上传&#xff0c;只要你照片人像比例对&#xff0c; 像素和大小对&#xff0c;真的分分钟上传成功&#xff01; 毕业采集照片要求&#xff1a; 像素480*…

Kotlin 尾递归函数

函数式编程中&#xff0c;重要的概念 尾递归&#xff1a; 当一个函数 在最后调用 自身&#xff0c;称为 尾递归&#xff0c;是一种特殊的递归函数。 Kotlin 使用 tailrec 声明尾递归函数&#xff0c;可以避免 StackOverflowError 的风险。 原理是&#xff1a;通过编译器优化 …

泛微E-Cology getLabelByModule SQL注入漏洞复现

0x01 产品简介 泛微协同管理应用平台e-cology是一套兼具企业信息门户、知识文档管理、工作流程管理、人力资源管理、客户关系管理、项目管理、财务管理、资产管理、供应链管理、数据中心功能的企业大型协同管理平台。 0x02 漏洞概述 由于泛微e-cology未对用户的输入进行有效…

一周时间,开发了一款封面图生成工具

介绍 这是一款封面图的制作工具&#xff0c;根据简单的配置即可生成一张好看的封面图&#xff0c;目前已有七款主题可以选择。做这个工具的初衷来自平时写文章&#xff0c;都为封面图发愁&#xff0c;去图片 网站上搜索很难找到满意的&#xff0c;而且当你要的图如果要搭配上文…

【Java】Maven的基本使用

Maven的基本使用 Maven常用命令 complie&#xff1a;编译clean&#xff1a;清理test&#xff1a;测试package&#xff1a;打包install&#xff1a;安装 mvn complie mvn clean mvn test mvn package mvn installMaven生命周期 IDEA配置Maven Maven坐标 什么是坐标&#xff1f;…

【MIMO 从入门到精通】[P8][A Detailed Introduction to Beamforming]

前言&#xff1a; 本篇参考油管 5G Learning 《A Detailed Introduction to Beamforming》 简单介绍一下波束赋形的原理。 电磁波传播的数学模型如下图&#xff1a; 跟水波几乎是一样的,以圆形的均匀波进行传播 在各个方向上面功率大致相同。 但是我们需要方向性更好的电磁…