CSS之浮动模型

浮动模型又叫流模型,什么是float(浮动)

最早是为了适应报纸的排版,文字环绕图片的效果,后来经过使用和研究发展出一系列复杂的用法。

CSS 的 Float(浮动),会使元素向左或向右移动,其周围的元素也会重新排列。
Float(浮动),往往是用于图像,但它在布局时一样非常有用。

一个浮动元素会尽量向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。
浮动流

为了说明什么是浮动流,我们先用代码看一下效果

<div class="demo1"></div>
<div class="demo2"></div>
-----------------------------------------------------------------
.demo1 {float: left;width: 100px;height: 100px;background-color: green;
}.demo2 {width: 150px;height: 150px;background-color: gray;opacity: 0.5;
}

效果:demo1这个div设置了一个向左浮动,我们会看到demo2覆盖了demo1

问题:这是不是说明浮动元素也脱离了原来的层级呢?

其实并不是,这是因为浮动元素产生了浮动流,所有产生了浮动流的元素,块级元素是看不到他们的(也就是说,块级元会认为浮动元素所占的位置是没有东西的,就会自动覆盖上去)。

 

问题注解:
BFC化的元素和文本类属性的元素(带有inline的元素)

以及文本可以看到浮动元素。

但是,没有BFC化的块级元素看不到浮动元素。

也就是说产生浮动的元素对不同的其他元素的影响不同。

什么是BFC

块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是布局过程中生成块级盒子的区域,也是浮动元素与其他元素的交互限定区域。

BFC(Block Formatting Context):块级格式化上下文。
BFC决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。当设计到可视化布局的时候,BFC提供了一个环境,HTML元素在这个环境中按照一定的规则进行布局。一个环境中的元素不会影响到其他环境中的布局。

BFC的原理(渲染规则)

  1. BFC元素垂直方向的边距会发生重叠。属于不同BFC外边距不会发生重叠
  2. BFC的区域不会与浮动元素的布局重叠。
  3. BFC元素是一个独立的容器,外面的元素不会影响里面的元素。里面的元素也不会影响外面的元素。
  4. 计算BFC高度的时候,浮动元素也会参与计算(清除浮动)

如何创建BFC

  1. overflow不为visible;
  2. float的值不为none;
  3. position的值不为static或relative;
  4. display属性为inline-blocks,table,table-cell,table-caption,flex,inline-flex;

例如:

  •  poosition:absolute;
  •  display:inline-block;
  • float:left/right;
  •  overflow:hidden;

 

看一个例子,假设我们有这样一个需求,父元素是一个自适应高度的div,需要把带有浮动属性的子元素填充到这个父元素中

<body><div class="box"><div class="content">1</div><div class="content">2</div><div class="content">3</div></div>
</body>
----------------------------------------------------------------
* {margin: 0;padding: 0;
}.box {border: 1px solid black;
}.content {float: left;height: 100px;width: 100px;background-color: gray;
}

 

 

这是因为子元素是浮动元素,父元素是块级元素,块元素看不到浮动元素,但是行内元素可以看到。


解决方案有两种:

第一种解决方式,但是这种方式不推荐,因为会改变文档的结构。   

在浮动元素的同级dom下添加一个行内元素标签,比如p标签,再给它添加一个css样式clean:both(清除所有浮动流),这样p标签左右的浮动就被清除了,父级元素就被撑开了。

<div class="box"><div class="content">1</div><div class="content">2</div><div class="content">3</div><p class="clean"></p>
</div>
------------------------------------------------------------
.clean {clear: both;
}

第二种解决方式,推荐

使用伪元素来清除浮动
关于伪元素可以参考这里 伪元素
开发中应使用这种方式。

<div class="box"><div class="content">1</div><div class="content">2</div><div class="content">3</div>
</div>
--------------------------------------------------------------------
/*使用伪元素来清除逻辑上最后的浮动*/
.box::after {/*伪元素必须设置content属性*/content: "";/*clear属性只对块级元素生效,所以要把伪元素设置成块级元素*/display: block;clear: both;
}

清除浮动后的效果如下:

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

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

相关文章

工作336:uni-ele-el-table修改宽度问题

<el-table-columnfixed"right"header-align"center"label"操作"width"200px">

java 递归调整为队列

如果递归的是深而不广的树时&#xff0c;应该使用队列来优化递归&#xff1b;如果递归是广而不深的树的时候&#xff0c;就应该用递归来优化队列。 https://blog.csdn.net/pseudonym_/article/details/71600084?utm_sourceitdadao&utm_mediumreferral转载于:https://www.c…

工作337:pc-ele-ment联查问题

<grid-radiochange"ListRuery"v-model"query.platform":border"true":options"platform_category"/><!--query.platform--></el-form-item><el-form-item label"平台选择"><!-- <el-checkbo…

html中内联元素和块级元素的区别(整理版)

块级元素和内联元素的主要区别 块级元素 内联元素&#xff08;即行内元素&#xff09; 总是在新行上开始&#xff0c;独占一行默认情况下&#xff0c;宽度自动填满其父元素 相邻的行内元素会排列再同一行里&#xff0c;直到一行排不下&#xff0c;才会换行&#xff0c;宽度随…

工作338:pc重置筛选条件

this.query{}console.log(this)getAction("/account/list",{query:{platform_channel: this.query.platrorm_channel,platform_category:this.query.platform,department_id:this.query.department,}}).then(res>{console.log(res)this.accountListres.data})运行…

Python---通配符的使用

苹果单价 9.00 元&#xff0f;斤&#xff0c;购买了 5.00 斤&#xff0c;需要支付 45.00 元 在 Python 中可以使用 print 函数将信息输出到控制台如果希望输出文字信息的同时&#xff0c;一起输出 数据&#xff0c;就需要使用到 格式化操作符% 被称为 格式化操作符&#xff0c;…

工作339:pc父组件通过props传值给子组件,如何避免子组件改变props的属性值报错问题

</el-form><div><!--子代方法有一个传值传向父级 onselect去接收这个值--><select-account :data1.sync"accountList" :checkedData.sync"checkedData1" seletct"onSelect" /></div><div style"clear: bo…

H5新增的标签和属性

声明 Web 世界中存在许多不同的文档。只有了解文档的类型&#xff0c;浏览器才能正确地显示文档。 HTML 也有多个不同的版本&#xff0c;只有完全明白页面中使用的确切 HTML 版本&#xff0c;浏览器才能完全正确地显示出 HTML 页面。这就是 <!DOCTYPE> 的用处。 <!…

Qt错误汇总

1-工程文件不能包含中文路径。 2-转载于:https://www.cnblogs.com/chdfelix/p/9548686.html

css之文本溢出处理 | 背景图片处理

文本溢出处理 单行文本用缩略符号——text-overflow:ellipsis; 多行文本做截断策略——line-height * 行数 height;text-overflow:hidden; 背景图片处理相关属性 1、background&#xff1a;设置对象的背景样式&#xff0c;是一个复合属性&#xff0c;可以用于同时设置背景…

hdu 2196 computer

hdu 2196 题意 给出一棵树&#xff0c;求出树上每一个点在树上走一条简单路径所能走的最长距离。 解法 说起来&#xff0c;这是我今天1A的第一题 我们设\(up[i]\) 表示从这个点向上走到某个点又向下走的最长距离 设 \(down[i][0]\) 表示从这个点出发向他的子树所能走到的最大距…

CSS之盒模型

怎么理解盒子模型&#xff1f; 盒子模型是样式表&#xff08;css&#xff09;控制页面的很重要的概念。如果理解了盒子模型和其中每个元素的用法&#xff0c;才能熟练使用css的定位方法和技巧。所有的页面的元素都可以看成是一个盒子&#xff0c;占据一定的页面空间。占据的空…

[css] 使用css画个钟表的时间刻度

[css] 使用css画个钟表的时间刻度 写一下思路&#xff0c;先定义一个钟表的大小位置&#xff0c;用absolute,从1点到12点用ul,li。每个li可以用nth-child(对应第几个)来控制位置&#xff0c;角度用transform&#xff0c;然后分钟的刻度也是照样子分别控制位置&#xff0c;要用…

BZOJ 2301 - Problem b(莫比乌斯反演+容斥)

题目链接 https://cn.vjudge.net/problem/HYSBZ-2301 【题意】 对于给出的 n 个询问&#xff0c;每次求有多少个数对(x,y)(x,y) &#xff0c;满足 a≤x≤b&#xff0c;c≤y≤da≤x≤b&#xff0c;c≤y≤d &#xff0c;且 gcd(x,y)k&#xff0c;gcd(x,y)gcd(x,y)k&#xff0c;g…

前端两个经典bug

1、margin塌陷bug <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible&qu…

[css] 请使用css3实现图片的平滑转换

[css] 请使用css3实现图片的平滑转换 以全局监听的方式通过 a 标签的描点进行 view 动态切换页面&#xff0c;只要把 a 标签带有 id 的 href 属性的值指到锚点&#xff0c;用 CSS3 的动画进行切换页面.个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易…

== vs === in Javascript

本文来自网易云社区作者&#xff1a;魏文庆如果你只想知道与的区别&#xff0c;请直接看总结&#xff0c;当然我更希望您能耐心看完全文。Javascript中用于相等比较的操作符有两个和。我们通常称为“等于”&#xff0c;而我们通常称为“严格等于”。本文将对和做详细说明。相对…

[css] 使用纯css能否监控到用户的一些信息?怎么实现?

[css] 使用纯css能否监控到用户的一些信息&#xff1f;怎么实现&#xff1f; 利用:active 伪类实现监控用户的点击 .button-1:active::after {content: url(./pixel.gif?actionclick&idbutton1);display: none; } .button-2:active::after {content: url(./pixel.gif?ac…

hive 动态分区实现 (hive-1.1.0)

hive 动态分区实现 &#xff08;hive-1.1.0&#xff09; 笔者使用的hive版本是hive-1.1.0 hive-1.1.0动态分区的默认实现是只有map没有reduce,通过执行计划就可以看出来。&#xff08;执行计划如下&#xff09; insert overwrite table public_t_par partition(delivery_dateke…

浏览器的组成

外壳shell&#xff1a;User Interface&#xff08;用户界面&#xff09;、Browser engine&#xff08;浏览器引擎&#xff09;、Networking&#xff08;网络&#xff09;、UI Backend&#xff08;UI 后端&#xff09;、Date Persistence&#xff08;数据持久化存储&#xff09;…