【基础类】—CSS盒模型的全面认识

news2024/12/26 0:36:45

一、基本概念:标准+IE模型

盒模型:margin + border + padding + content
标准模型:将元素的宽度和高度仅计算为内容区域的尺寸(content-box,默认)
在这里插入图片描述
在这里插入图片描述
当CSS盒模型为 标准盒模型 (box-sizing: content-box) 时,
元素的宽度 = 内容区域的宽度(content)
200px = 200px
IE模型:将宽度和高度包括了内边距和边框的尺寸(border-box)
在这里插入图片描述
在这里插入图片描述
当CSS盒模型为 IE盒模型 (box-sizing: border-box) 时,
元素的宽度 = 内容区域的宽度 + 内边距 + 边框 (content + padding + border)
200px = 178 + 10 * 2 + 1 * 2

二、标准和IE的模型区别

计算宽度和高度的方式不同

三、CSS如何设置两种模型

  1. 通过css设置标准模型
box-sizing: content-box;
  1. 通过css设置IE盒模型
box-sizing: border-box;

四、JS如何设置获取盒模型对应宽和高

  1. 通过dom.style属性获取, 只能获取内联样式的宽和高
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
let dom = document.getElementById("title")
console.log('宽度',dom.style.width) // 只能获取内联样式的宽
console.log('高度',dom.style.height) // 无法外部样式表的高
宽度 100px
高度 

1-1. 扩展知识:css 三种样式表

// 内联样式:直接在html标签中使用style属性设置的样式
<p style="color: red;">这是内联样式的文本</p>

// 内部样式表: 内部样式表是在HTML文件的头部使用style标签定义的样式
<head>
<style>
p {
color: blue;
}
</style>
</head>

// 外部样式表:外部样式表是单独的CSS文件,与HTML文件分离
<head>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
  1. 通过dom.currentStyle.width/height, 获取浏览器渲染以后的宽和高,但是这个属性只有IE支持
  2. window.getComputedStyle(dom).width/height , 获取浏览器渲染以后的宽和高,兼容性好
let dom = document.getElementById("title")
console.log('宽度',window.getComputedStyle(dom).width)
console.log('高度',window.getComputedStyle(dom).height)
// 宽度 200px
// 高度 100px
  1. dom.getBoundingClientRect().width/height, 通过计算该元素top、left、bottom、right到浏览器的距离,可以算出元素的宽高
let dom = document.getElementById("title")
console.log('宽度',dom.getBoundingClientRect().width)
console.log('高度',dom.getBoundingClientRect().height)
// 宽度 100
// 高度 100

五、实例题(根据盒模型解释边距重叠)

  1. 父子元素的边距重叠,取两者之间的最大值
<style>
.parent {
	background-color: aqua;
}
.child {
  height: 100px;
  margin-top:20px ;
  background-color: brown;
}
</style>
<body>
  <div class="parent">
    <div class="child"></div>
  </div>
<body>

父元素:margin-top: 0 和 子元素margin-top: 20px,取margin-top:20px
在这里插入图片描述
2. 兄弟元素的边距重叠,取两者之间的最大值

<style>
.brother1 {
  height: 100px;
  background-color: blueviolet;
  margin-bottom: 10px;
}
.brother2 {
  height: 100px;
  background-color: burlywood;
  margin-top: 20px;
}
</style>
<body>
<div class="brother1">brother1</div>
  <div class="brother2">brother2</div>
</body>

brother1 margin-bottom: 10px; brother margin-top:20px; 取 margin-top:20px
在这里插入图片描述
3. 空元素的边距重叠,取两者之间的最大值

<style>
.empty {
  margin-top: 20px;
  margin-bottom: 40px;
}
</style>
<body>
<div class="empty"></div>
</body>

.empty margin-top: 20px; margin-bottom: 40px; 取margin-bottom: 40px
在这里插入图片描述

六、BFC (边距重叠解决方案)

overflow:hidden;

解决边距重叠的问题,使用BFC

  1. 什么是BFC
    块级格式化上下文

  2. BFC的原理(渲染规则)
    2-1. BFC的子元素垂直方向的边距会发生重叠

<!-- BFC的子元素的垂直方向边距重叠 -->
    <section id="margin">
        <style>
            #margin {
                background-color: pink;
                overflow: hidden;
            }
            #margin > p {
                margin: 5px auto 25px;
                background-color: red;
            }
        </style>
        <p>1</p>
        <p>2</p>
        <p>3</p>
    </section>

在这里插入图片描述
解决方案:如何消除边距重叠,需要给相邻的元素添加父元素,并创建BFC(overflow: hidden)

<section id="margin">
        <style>
            #margin {
                background-color: pink;
                overflow: hidden;
            }
            #margin > p {
                margin: 5px auto 25px;
                background-color: red;
            }
            /* 添加父元素,新增样式overflow: hidden; 创建BFC,防止边距重叠 */
            .bfc{
                overflow: hidden;
            }
        </style>
        <p>1</p>
        <div class="bfc"><p>2</p></div>
        <p>3</p>
    </section>

在这里插入图片描述

2-2. BFC的区域不会与float元素的box重叠,用于清除浮动布局

<!-- BFC的区域不会与float元素的box重叠,用于清除浮动布局 -->
    <section id="layout">
        <style media="screen">
            #layout {
                background-color: red;
            }
            #layout .left {
                float: left;
                width: 100px;
                height: 100px;
                background-color: pink;
            }
            #layout .right {
                height: 110px;
                background-color: #ccc;
            }
        </style>
        <div class="left"></div>
        <div class="right"></div>
    </section>

在这里插入图片描述
2-2-1:为什么左侧会和右侧发生重叠?
因为浏览器会先渲染文档流中的元素
在这里插入图片描述
然后浏览器再文档流的基础上再渲染脱离文档流的元素(浮动元素),所以发生了重叠
在这里插入图片描述
如何防止普通元素和浮动元素重叠(文档流元素和脱离文档流的元素重叠)?
把普通元素变成BFC

<!-- BFC的区域不会与float元素的box重叠,用于清除浮动布局 -->
    <section id="layout">
        <style media="screen">
            #layout {
                background-color: red;
            }
            #layout .left {
                float: left;
                width: 100px;
                height: 100px;
                background-color: pink;
            }
            #layout .right {
                overflow: hidden;
                height: 110px;
                background-color: #ccc;
            }
        </style>
        <div class="left"></div>
        <div class="right"></div>
    </section>

在这里插入图片描述

2-3. BFC再页面上是一个独立容器,外面的元素和里面元素不会互相影响
2-4. 当元素为BFC高度时,浮动元素也会参与高度计算

<!-- 浮动元素不参与高度计算,所有父元素高度为0,父元素为BFC时,浮动元素参与高度计算,所以父元素高度为40 -->
  <section id="float">
    <style media="screen">
      #float {
        background-color: red;
        overflow: hidden;
      }
      #float .float {
        float: left;
        font-size: 30px;
      }
    </style>
    <div class="float">浮动元素</div>
  </section>
  1. 如何创建BFC
    3-1 overflow:visible、auto、hidden;
    3-2 float:≠ none
    3-3 position: ≠ static 或 ≠ relative
    3-4 dipslay: inline-table、table-caption、table-cell、table

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【安全测试】安全测试威胁建模设计方法STRIDE

目录 背景 TM(ThreatModeling) 实践 具体流程 资料获取方法 背景 目前安全测试一般都存在如下问题&#xff1a; 安全测试人员不懂业务&#xff0c;业务测试人员不懂安全&#xff0c;安全测试设计出现遗漏是无法避免的安全测试点繁多复杂&#xff0c;单点分析会导致风险暴…

商城-学习整理-基础-商品服务API-品牌管理(六)

目录 一、使用逆向工程生成前后端代码1、新增品牌管理菜单2、使用生成的前端代码 二、优化逆向生成的品牌管理页面1、显示状态开关优化2、品牌上传优化&#xff08;使用阿里云存储&#xff09;1&#xff09;阿里云对象存储-普通上传方式2&#xff09;阿里云对象存储-服务端签名…

paddlenlp:社交网络中多模态虚假媒体内容核查(代码篇)

初赛之baseline解读篇 一、模型框架图1、框架解读2、评价指标解读 二、代码功能1、数据集加载2、模型定义3、模型训练4、模型预测 三、写在最后 一、模型框架图 1、框架解读 第一列是输入&#xff0c;一部分是文本&#xff08;需核查文本、文本证据材料&#xff09;&#xff…

ExtJs 7.7.0 下载方法与去除trial水印

背景 最近发现Sencha ExtJs发布了ExtJs7.7.0版本&#xff0c;立刻下载了SDK包&#xff0c;许多朋友不知如何下载&#xff0c;如何去除右上角的trial水印。本文讲下相关下载技巧与方法。 下载SDK 首先需要申请试用&#xff0c;申请地址如下&#xff0c;需要注意可能需要梯子&…

好烦!快让ChatGPT停止道歉!SD创作宣传图的超细教程;教你在PH冷启动薅流量;CSDN举办AI应用创新大赛 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; Stable Diffusion 图生图入门&#xff0c;一份详细的思维导图 &#x1f916; DeeCamp X CSDN 举办AI应用创新大赛&#xff0c;万元奖金…

【C++】继承的基本特性(定义,赋值转换,友元,静态成员,虚拟继承,默认成员函数,作用域)

文章目录 一、继承的定义1.定义格式2.继承基类成员访问方式的变化 二、基类和派生类对象赋值转换三、继承的作用域1. 在继承体系中基类和派生类都有独立的作用域。2.子类和父类中有同名成员3.成员函数的隐藏4.注意在实际中在继承体系里面最好不要定义同名的成员。 四、派生类的…

【C语言学习】整数类型表达数的范围

一、整数类型表达数的范围 1.char类型 char 是1个字节 &#xff0c;即00000000 ~ 11111111&#xff0c;一般情况默认是有符号char(signed char) ,此时char所能表达的数就是 -128 ~ 127&#xff0c;即 -2 ^ n-1 ~ (2 ^ n-1)-1 ,其中n是位数或比特位&#xff08;1字节8位8比特&…

OPENCV C++(四)形态学操作+连通域统计

形态学操作 先得到一个卷积核 Mat kernel getStructuringElement(MORPH_RECT,Size(5,5)); 第一个是形状 第二个是卷积核大小 依次为腐蚀 膨胀 开运算 闭运算 Mat erodemat,dilatemat,openmat,closemat;morphologyEx(result1, erodemat, MORPH_ERODE, kernel);morphologyEx…

万界星空科技/免费开源MES系统/免费仓库管理

仓库管理&#xff08;仓储管理&#xff09;&#xff0c;指对仓库及仓库内部的物资进行收发、结存等有效控制和管理&#xff0c;确保仓储货物的完好无损&#xff0c;保证生产经营活动的正常进行&#xff0c;在此基础上对货物进行分类记录&#xff0c;通过报表分析展示仓库状态、…

道本科技受邀参加建筑产业互联网推动建筑产业现代化体系构建座谈会,以数字化产品为建筑行业注入新动能!

2023年7月底&#xff0c;道本科技作为中国建筑业协会合作伙伴&#xff0c;受邀参加了建筑产业互联网推动建筑产业现代化体系构建座谈会。在这次座谈会上&#xff0c;道本科技旗下产品“合规数”“合同智能审查”和“智合同范本库”被中国建筑&#xff08;中小企业&#xff09;产…

Leaflet.Control.Opacity 控制图层的透明度

最新有一个需求&#xff0c;能动态的控制Leaflet.js 地图图层的透明度&#xff0c;官网文档: https://leafletjs.com/reference.html#gridlayer-setopacity 一直有个setOpacity方法&#xff0c;我以为拿来就能使呢&#xff0c;其实不行。后来找到一个日本人开发的demo: 右侧Co…

部署SpringBoot项目在服务器上,并通过swagger登录

1.项目编译打包 2.上传jar包到服务器并启动 xftp将打包好后的jar包传到虚拟机指定路径 java -jar执行该jar包 3.通过swagger登录 输入后点击下面的执行按钮 会得到一个tocken 4.将tocken放到postman的Headers中 5.修改url 例如我本地测试是http://localhost:8080/接口名&am…

关于Java的未来探讨,看看国外开发者怎么说的

博主在浏览 medium 社区时&#xff0c;发现了一篇点赞量 1.5k 的文章&#xff0c;名称叫《Java is Dead — 5 Misconceptions of developers that still think Java is relevant today!》直译过来就是《Java 已死 — 开发人员对 Java 在现代编程语言中的5个误解》。这篇文章可以…

层叠上下文

一、层叠上下文 在CSS2.1规范中&#xff0c;每个盒模型的位置是三维的&#xff0c;分别是平面画布上的x轴&#xff0c;y轴以及表示层叠的z轴&#xff0c;层叠上下文即元素在某个层级上z轴方向的排列关系。假定用户正面向&#xff08;浏览器&#xff09;视窗或网页&#xff0c;…

合并pdf怎么合并?试试这几种方法

合并pdf怎么合并&#xff1f;合并PDF文件是处理PDF文件时最基本的需求之一。在日常工作和生活中&#xff0c;我们可能需要将多个PDF文件合并成一个文件&#xff0c;以方便管理、浏览和分享。下面就给大家介绍几种PDF合并的方法。 首先&#xff0c;让我们介绍一下【迅捷PDF转换器…

项目中引用svg图标,公共组件SvgIcon使用,注册全局组件,使用自定义插件注册全局组件

在开发项目的时候经常会用到svg矢量图,而且我们使用SVG以后&#xff0c;页面上加载的不再是图片资源, 这对页面性能来说是个很大的提升&#xff0c;而且我们SVG文件比img要小的很多&#xff0c;放在项目中几乎不占用资源。 1、安装依赖插件 pnpm install vite-plugin-svg-ic…

API是什么?

API是什么&#xff1f; API&#xff08;Application Programming Interface,应用程序编程接口&#xff09;是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制…

SAP BAPI BAPI_SALESDOCUMENT_COPY 直接实现VA01复制销售合同创建小搜订单

BAPI :BAPI_SALESDOCUMENT_COPY 输入参数 &#xff1a; 销售合同、订单类型 输出参数&#xff1a;生成的销售订单号 实现的操作:

自动分班软件:一分钟制作分班查询系统,这个工具轻松实现

作为一名老师&#xff0c;在即将到来的新学期&#xff0c;我们需要进行学生的分班工作&#xff0c;而分班查询系统可以帮助我们更加高效地完成这项工作。在这篇文章中&#xff0c;我将向大家介绍如何创建一个分班查询系统。 首先&#xff0c;我们需要确定分班查询系统的需求和…

java八股文补充

1、JAVA BIO、NIO、AIO的区别 BIO &#xff08;Blocking I/O&#xff09;&#xff1a;同步阻塞I/O模式。当有其他线程进行数据读写时阻塞等待。当用户线程发出IO请求之后&#xff0c;内核会去查看数据是否就绪&#xff0c;如果没有就绪就会等待&#xff0c;用户线程就会处于阻…