如何获取元素在父级div里的位置_关于元素的浮动你了解多少

首先,在介绍什么是浮动之前我们先介绍一下html中元素的普通流布局方式。在普通流中,元素是按照它在 HTML 中的出现的先后顺序自上而下依次排列布局的,在排列过程中所有的行内元素水平排列,直到当行被占满然后换行,块级元素则会被渲染为一整行。如果没有特殊样式指定,所有元素默认都是按照普通流方式排列布局,即普通流中元素的位置由该元素在 HTML 文档中的位置决定的。什么是浮动?      浮动使元素脱离文档普通流,漂浮在普通流之上的。浮动元素依然按照其在普通流的位置上出现,然后尽可能的根据设置的浮动方向向左或者向右浮动,直到浮动元素的外边缘遇到包含框或者另一个浮动元素为止,且允许文本和内联元素环绕它。浮动会产生块级框(相当于设置display:block属性)。

       正是因为这种浮动的这种特性,所以本该属于普通流中的元素浮动之后,父级元素的高度就可能会发生变化(父级元素内部由于不存在其他普通流元素了,其高度就为0),在实际应用中,会严重影响整体的布局。

所以我们需要使用清除浮动和闭合浮动来处理浮动带来的问题

        清除浮动:对被影响文档位置的块级元素添加属性clear:left | right | both | none;使其下移,直到元素两边没有浮动元素。指使用clear阻止这个元素盒子的边和前面的浮动元素相邻的行为;

        闭合浮动:是使浮动元素闭合,使父元素高度不再塌陷,高度被撑开了,使父元素能够包围浮动元素,从而减少浮动带来的影响。指避免float无法撑高父容器的默认行为

这是两者之间的区别

694700137274b3ca53af03093bd8365a.png

闭合浮动的方法

1、添加额外的元素

   
main:wrap自己闭合浮动了,所以footer不用再清除浮动了(float:left)
side:我也浮动了(float:left)
footer:这次wrap人品爆发了, 通过在末尾添加了一个空标签,已经闭合浮动

优点:简单,代码少,浏览器支持好,不容易出现怪问题

缺点:初学者不理解原理;如果页面浮动布局多,就要增加很多空div,代码语义化变差

原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度

2、使用伪类元素:新增.parent:after伪对象,其余不变

优点:浏览器支持好,不容易出现怪问题

.warp:after{          content: ".";/*生成一个元素内容为".",为" "时也好用*/          display: block;/*让元素为块级元素*/          height: 0;/*用以下两种方式让元素不渲染*/          visibility: hidden;          clear: both;/*清除浮动*/    }

3、父元素设置overflow:hidden 

.wrap{        margin:0 auto;        width: 500px;        border: 2px solid #EA2C0A;        padding: 10px;        overflow: hidden;/*新增*/        zoom:1;/*新增,针对IE6,但没有经过测试*/   }//第二种,在parent容器中添加overflow:auto的属性,并针对于IE6增加zoom:1的属性。

优点:不存在结构和语义化问题,代码量极少。

缺点:内容增多时候容易造成不会自动换行导致内容被隐藏掉,无法显示需要溢出的元素。

原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度。

4、父元素也设置浮动

        只需给parent容器添加 float:left,也可闭合浮动。

   优点:代码少

   缺点:会导致整个页面大部分都处于浮动状态,页面布局容易出现问题

        当然方法还有很多比如:display:table;改变盒模型属性。还有给父级元素添加position:absolute定位等方法。

说到底闭合浮动或者清楚浮动的原理主要就是这么两个原理:

  • 通过在浮动元素的末尾添加一个空元素,设置 clear:both属性,after伪元素其实也是通过 content 在元素的后面生成了内容为一个点的块级元素;

  • 通过设置父元素 overflow 或者display:table 属性等来闭合浮动,其实这是触发了Block formatting contexts (块级格式化上下文,简称 BFC)。块级格式化上下文是CSS可视化渲染的一部分。它是一块区域,规定了内部块盒的渲染方式,以及浮动相互之间的影响关系。

块格式化上下文(BFC)有下面几个特点:

       BFC就像一道屏障,隔离出了BFC内部和外部,内部和外部区域的渲染相互之间不影响。BFC有自己的一套内部子元素渲染的规则,不影响外部渲染,也不受外部渲染影响。

       BFC的区域不会和外部浮动盒子的外边距区域发生叠加。也就是说,外部任何浮动元素区域和BFC区域是泾渭分明的,不可能重叠。

       BFC在计算高度的时候,内部浮动元素的高度也要计算在内。也就是说,即使BFC区域内只有一个浮动元素,BFC的高度也不会发生塌缩,高度是大于等于浮动元素的高度的。

       HTML结构中,当构建BFC区域的元素紧接着一个浮动盒子时,即,是该浮动盒子的兄弟节点,BFC区域会首先尝试在浮动盒子的旁边渲染,但若宽度不够,就在浮动元素的下方渲染。

现在我们再来分析一下overflow清除浮动的原理:

      当元素设置了overflow样式,且值不为visible时,该元素就建构了一个BFC。.warp因设置了值为auto的overflow样式,所以该元素建构出一个BFC,按照上面第三个特点,BFC的高度是要包括浮动元素的,所以.warp的高度被撑起来,达到了清除浮动影响的目的。overflow的作用就是为了构建一个BFC区域,让内部浮动的影响都得以“内化”。

      至于哪些情况下,元素可以建构出BFC,大家可以自行查看CSS文档对BFC的定义,这里就不再赘述了。

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

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

相关文章

获取iOS顶部状态栏和Navigation的高度

状态栏的高度 20 [[UIApplication sharedApplication] statusBarFrame].size.height Navigation的高度 44 self.navigationController.navigationBar.frame.size.height 加起来一共是64 转载于:https://www.cnblogs.com/Free-Thinker/p/6478715.html

Java电商项目-5.内容管理cms系统

目录 实现加载内容分类树功能实现内容分类动态添加删除内容分类节点实现内容分类节点的分页显示实现广告内容的添加实现广告内容删除实现广告内容编辑到Github获取源码请点击此处实现加载内容分类树功能 注: 往后将不在说编写远程服务方法和编写web模块等重复语句, 直接用"…

leetcode738. 单调递增的数字(贪心)

给定一个非负整数 N&#xff0c;找出小于或等于 N 的最大的整数&#xff0c;同时这个整数需要满足其各个位数上的数字是单调递增。 &#xff08;当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。&#xff09; 示例 1: 输入: …

MySQL purge 线程

MySQL中purge线程知识&#xff1a;https://dev.mysql.com/doc/refman/5.7/en/innodb-improved-purge-scheduling.htmlInnoDB中delete所做删除只是标记为删除的状态&#xff0c;实际上并没有删除掉&#xff0c;因为MVCC机制的存在&#xff0c;要保留之前的版本为并发所使用。最终…

安装inde.html使用babel,reactjs – 使用Babel Standalone进行单个React组件渲染,仅使用index.html和Component...

Noob与React在这里.我正在玩React.我有一个简单的组件在我的component.js中呈现.它包含在我的index.html文件中.我在头部包含了React,ReactDOM和babel的脚本.我只想看到一个div正确渲染.我还没有使用Node,只是使用React和Babel(使用babel-standalone).我正在使用一个简单的http…

软件工程师转正申请_这是申请软件工程师工作的4种最佳方法-以及如何使用它们。...

软件工程师转正申请by YK Sugi由YK Sugi 这是适用于软件工程师工作的最佳方法&#xff0c;以及确切的使用方法。 (Here are the best methods for applying to software engineer jobs — and exactly how to use them.) When people think of applying for jobs, they often …

【JS新手教程】LODOP打印复选框选中的任务或页数

之前的博文&#xff1a;【JS新手教程】LODOP打印复选框选中的内容关于任务&#xff1a;Lodop打印语句最基本结构介绍&#xff08;什么是一个任务&#xff09;关于本文用到的JS的eval方法&#xff1a;JS-JAVASCRIPT的eval()方法该文用的是不同checkbox&#xff0c;对应不同的val…

查询范围_企二哥:查询企业经营范围的三种方法

一、查询企业经营范围的三种方法1. 进经营地的工商局网站,有个“全国企业信用信息公示系统”进去后输入公司名称搜索就出来了。2. 有个软件叫做天眼查&#xff0c;打开天眼查输入要查询的公司名称&#xff0c;就可以搜出来了。不光是经营范围&#xff0c;还有许多和企业相关的资…

C#用DataTable实现Group by数据统计

http://www.cnblogs.com/sydeveloper/archive/2013/03/29/2988669.html 1、用两层循环计算&#xff0c;前提条件是数据已经按分组的列排好序的。 DataTable dt new DataTable();dt.Columns.AddRange(new DataColumn[] { new DataColumn("name", typeof(string)), …

CI框架取消index.php

首先看文档&#xff1a; http://codeigniter.org.cn/user_guide/general/urls.html#url-index-php 大致意思是&#xff0c;先Apache开启rewrite&#xff0c;再index.php同级目录下创建一个.htaccess文件 设置好后还是不起作用&#xff01;&#xff01;&#xff01;&#xff01;…

电子工程师自学成才pdf_给新开发人员的最佳建议:自学成才的软件工程师的建议...

电子工程师自学成才pdfby Ali Spittel通过Ali Spittel 给新开发人员的最佳建议&#xff1a;自学成才的软件工程师的建议 (My best tips for new developers: advice from a (mostly) self-taught software engineer) The most common question I get from blog readers is “W…

leetcode1090. 受标签影响的最大值(贪心算法)

我们有一个项的集合&#xff0c;其中第 i 项的值为 values[i]&#xff0c;标签为 labels[i]。 我们从这些项中选出一个子集 S&#xff0c;这样一来&#xff1a; |S| < num_wanted 对于任意的标签 L&#xff0c;子集 S 中标签为 L 的项的数目总满足 < use_limit。 返回子…

html显示hdf5文件,python读取hdf5文件

python怎样读取hdf5文件python 中h5py读文件,提示错误File "h5py\_objects完整代码和完整错误信息的图片。Windows环境下给Python安装h5py失败&#xff0c;HDF5已经安装使用pip install h5py命令安装已经安装了HDF5-1.10.0-win64.msi3第一张图上说的是,“不能打开头文件hd…

课后练习----实现窗口的切换

1、运用事件处理相关知识&#xff0c;完成两个窗口之间的切换&#xff0c;例如&#xff1a;登陆窗口------》注册窗口 package Date; import java.awt.Color;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing…

Hello 云栖

这是第一篇博客

ai物联网工业_人工智能和物联网将如何改变行业

ai物联网工业by Mariya Yao姚iya(Mariya Yao) 人工智能和物联网将如何改变行业 (How Artificial Intelligence & the Internet of Things will transform industries) 微软首席技术官凯文斯科特(Kevin Scott)访谈 (An interview with Microsoft CTO Kevin Scott) As part …

20145206邹京儒《网络对抗》逆向及Bof基础实践

20145206邹京儒《网络对抗》逆向及Bof基础实践 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件。 该程序正常执行流程是&#xff1a;main调用foo函数,foo函数会简单回显任何用户输入的字符串。 该程序同时包含另一个代码片段&#xff0c…

计算机专业考研过关率高么,考研过国家线的几率有多大?被刷的有多少?

考研每年究竟有多少人可以过国家线&#xff0c;可能很多同学都对很奇心&#xff0c;很想知道这个数据。很多人应该都知道&#xff0c;教育部在划定国家线时&#xff0c;会统计考生的总体情况&#xff0c;然后再分别统计13个大类学科&#xff0c;产生一个大致的数据的&#xff0…

复工复产三个一内容_节后复产复工,彭聪恩强调“三个一”

彭聪恩查看大良永旺购物商场监控室顺德城市网消息 (记者张琼)春节已过&#xff0c;元宵将至&#xff0c;安全生产工作时刻不可放松。为确保全区市民过上一个安全祥和的元宵节&#xff0c;昨日(2月21日)上午&#xff0c;顺德区委副书记、区长彭聪恩&#xff0c;副区长赖雪晖带队…

leetcode1405. 最长快乐字符串(贪心算法)

如果字符串中不含有任何 ‘aaa’&#xff0c;‘bbb’ 或 ‘ccc’ 这样的字符串作为子串&#xff0c;那么该字符串就是一个「快乐字符串」。 给你三个整数 a&#xff0c;b &#xff0c;c&#xff0c;请你返回 任意一个 满足下列全部条件的字符串 s&#xff1a; s 是一个尽可能…