解析什么是绝对定位,相对定位与浮动

在理解定位之前,先说一个概念,文档普通流,就是元素标签正常在HTML里的顺序,块级元素从上至下排列,行内元素从左到右排列。

绝对定

绝对定位:absolute,元素相对于离它最近的已定位祖先元素进行移动,如果元素没有已定位的祖先元素,那么它的位置相对于最初的包含块(一般是HTML元素,也可能是画布,这是由用户的代理决定的)。注意,绝对定位使元素原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。

如下图是正常放置的三个div,

如果将div2设置为绝对定位,会发现它会相对于HTML定位,因为没有已经定位的祖先元素,且原来的位置被div3补上了。

相对定位

相对定位:relative,元素相对于它自己原来的位置进行移动。注意,相对定位使元素仍然占据原来的位置。

如下图,如果将div2设置为相对定位,它会相对自己原来的位置移动,且会发现它原来的位置仍然占据着

 

 

浮动

浮动:float,浮动的元素可以向左或向右移动,直到它的外边缘碰到包含的元素边框或另一个浮动元素的边框为止。注意,浮动的元素不在文档的普通流中,所以文档的普通流的其他元素表现得就像浮动元素不存在一样。

如下图,将第二个div设置为float:right,它会跑到文档的右边

        

如果将div2设置为float:left,它会到文档的左边,也就是位置不变,并且脱离文档流,div3补上来,但我们会发现文字还是原处,这就是浮动和绝对定位的区别了。浮动会以某种方式将浮动元素从文档的正常流中删除,并把元素向左或向右浮动,该元素还是会影响布局,如果将div2浮动,div3确实占据了div2的位置,所以说浮动元素脱离了文档流,但div3中的文字没跟上来,这是为了避免div2将div3里的文字覆盖了,这就是浮动的目的,所以说浮动元素影响了布局;而绝对定位是将元素彻底从文档流删除,该元素再也不会影响其他元素的布局了,如果对div2绝对定位的,div3包括文字都会补上来被div2覆盖。

 

由于浮动会使元素脱离正常的文档流,所以无法撑开父级元素(父级元素没设置高度),导致父级元素在视觉上没包围浮动元素(高度塌陷),所以我们要清除浮动,通常是两类,一是利用clear属性,二是触发浮动元素的父元素的BFC(块级格式化上下文)

看下面例子,外层div没有被撑开

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>鼠标划过更改图片路径</title>
</head>
<body><div id="wrapper" style="border:1px solid red;"><div style="float:left;width:50px;height:50px;background:black;"></div></div>
</body>
</html>

解决办法如下:

1.给父级元素设置高度,但一般写页面高度都是不固定的。
#wrapper{height:100px;
}
2.给父级元素设置overflow:hidden或overflow:auto,zoom:1是为了浏览器的兼容性(IE大家都懂的),这种方法要注意溢出的元素。
#wrapper{overflow:hidden;zoom:1;
}
3.给父级设置浮动,这种方法适用于本来父级就需要浮动的,如果父级不需要浮动,影响布局,还是没解决根本问题。
#wrapper{float:left;
}
4.在浮动元素后面加个空元素,clear:both,这种方法加了无用的html元素,代码不够简洁,后期维护不便
<div id="clear"></div>
#clear{clear:both;
}
5.利用父级的伪元素:after,推荐使用,兼容性好,万能方法。
#wrapper:after{content: "";如果有内容就写,没有就空,display: block;或者display:inline-block;clear: both;这三项是必须条件,其他都是可选项,视情况而定}
#wrapper{zoom:1;兼容IE}

在网页主要布局时:after伪元素方法应该为常用清理浮动方式;在小模块如ul里使用overflow:hidden;(留意可能产生的隐藏溢出元素问题);如果本身就是浮动元素则可自动清除内部浮动,无需格外处理;正文中使用邻接元素清理之前的浮动。最后可以使用相对完美的:after伪元素方法清理浮动。

 


更多专业前端知识,请上 【猿2048】www.mk2048.com

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

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

相关文章

具有多个查询参数的Camel CXF服务

出色的Apache Camel团队忙于解决查询中多个参数的处理问题&#xff0c;这是一种解决方法。 希望该帖子将在下一版本的Camel中变得过时。 &#xff08;当前&#xff0c;我使用2.7.5&#xff09; 问题 大于1的查询参数作为null值传递给Camel-CXF服务。 假设网址中有四个查询参数…

《JavaScript高级程序设计》读书笔记(三)基本概念第四小节 操作符

内容---语法 上一小节---数据类型 本小节 操作符---流程控制语句---理解函数 操作符--操作数据值的操作符--算术&#xff08;如加减&#xff09;、位操作符、关系、相等--ECMAScript操作符可以适用于很多类型的值--在用于对象时&#xff0c;会先调用对象的valueOf()和&#xff…

el-table数据不显示_数据透视表,一篇就够了

| 函数部分告一段落&#xff0c;这一篇文章助你学懂数据透视表目录&#xff1a;一、创建数据透视表二、数据透视表字段列表值的显示方式三、分析1、切片器2、计算字段3、计算项4、组合四、设计1、分类汇总2、报表布局首先&#xff0c;我们要知道应用数据透视表的前提&#xff1…

app vue 真机运行_使用 HBuilder 将 Vue 项目打包成手机 App

在开发移动端 app 时可以选择原生 app 和 webapp&#xff0c; 原生 app 体验好&#xff0c;开发成本高&#xff0c;相对的 webapp 体验要差&#xff0c;开发成本低。webapp 要求很低&#xff0c;可以说只要会开发web 站就能开发 webapp&#xff0c;这里不讨论怎么选择&#xff…

AlvinZH双掉坑里了

AlvinZH双掉坑里了 时间限制: 1000 ms 内存限制: 65536 kb题目描述 AlvinZH双掉进坑里了&#xff01; 幸运的是&#xff0c;这坑竟然是宝藏迷宫的入口。这一次AlvinZH机智地带了很多很多背包——装金币&#xff01; 假设现在AlvinZH捡到了n块金币&#xff0c;他一共带了m个背包…

解决安卓字体偏移:页面整体缩放

在h5中实现一些小标签、按钮的时候&#xff0c;很容易发现部分安卓机型上的字体显示有问题&#xff0c;总会向上偏移2px左右。这是设置padding或line-height无法修复的&#xff0c;与rem也无关&#xff0c;即使在字体大于12px时依然存在。下图来自于网友的分享&#xff0c;从左…

bmp调色板颜色信息重复_如何更改 Linux 终端颜色主题 | Linux 中国

你可以用丰富的选项来定义你的终端主题。-- Seth Kenlon如果你大部分时间都盯着终端&#xff0c;那么你很自然地希望它看起来能赏心悦目。美与不美&#xff0c;全在观者&#xff0c;自 CRT 串口控制台以来&#xff0c;终端已经经历了很多变迁。因此&#xff0c;你的软件终端窗口…

CH Round #46A 磁力块

还是一道好题的 对于一个磁石是否被吸引&#xff0c;有两个关键字&#xff1a;距离和质量。&#xff08;二维偏序&#xff1f;&#xff1f;&#xff09; 好像是很厉害的分块姿势&#xff0c;先按第一关键字排序&#xff0c;在块中按第二关键字排 进行bfs&#xff0c;对于当前磁…

CSS颜色代码

CSS颜色代码大全 FFFFFF#DDDDDD#AAAAAA#888888#666666#444444#000000#FFB7DD#FF88C2#FF44AA #FF0088 #C10066 #A20055 #8C0044 #FFCCCC#FF8888#FF3333 #FF0000 #CC0000 #AA0000 #880000 #FFC8B4#FFA488#FF7744 #FF5511 #E63F00 #C63300 #A42D00 #FFDDAA#FFBB66#FFAA33#FF8800 #…

js判断是否在iframe中

以下都可以判断代码是否在iframe中. 1.方式一 if (self.frameElement && self.frameElement.tagName "IFRAME") {   alert(在iframe中); } 2.方式二if (window.frames.length ! parent.frames.length) {   alert(在iframe中); } 3.方式三if (self ! top…

Java:逐步读取/流式传输CSV文件

我一直在做一些涉及读取CSV文件的工作&#xff0c;而我一直在使用OpenCSV &#xff0c;而我的最初方法是逐行读取文件&#xff0c;解析内容并将其保存到地图列表中。 当文件的内容适合内存时&#xff0c;此方法有效&#xff0c;但对于较大的文件来说是个问题&#xff0c;在这种…

mac 配置java adb环境_MAC 配置android adb命令的环境变量

1,打开终端&#xff0c;敲入命令&#xff1a;sudo vi .bash_profile (如果有密码就为本机登录密码)(如果没有这个文件就会创建一个新的)默认终端目录如图&#xff0c;生成的文件为隐藏文件&#xff1a;(显示隐藏文件命令&#xff1a;defaults write com.apple.finder AppleSho…

mac懒人版_这些实用的Mac软件你迟早会用到,建议收藏!

日常使用mac&#xff0c;遇到不同的问题可以通过不同的应用进行来进行处理&#xff0c;所以称手的工具是必不可少的。然而这些问题也会引导我们去发现更多实用优秀的软件&#xff0c;今天macdown就把自己在使用Mac过程中遇到的一些实用的Mac软件推荐给大家&#xff0c;相信你迟…

第一节 理解单元测试

在查看代码之前&#xff0c;最好提一下编写单元测试和使用单元测试的一些基本信息和规则。 记住这些基本规则并理解单元测试的重点非常重要。 单元测试不仅仅是一个很好的功能&#xff0c;而且是任何正规软件项目中绝对必要的部分。 1.什么是单元测试 一个简单的问题&#xff0…

Metro风格的Java组合框(JMetro)–重新介绍

我上一篇有关JMetro的文章–我的都市风格的Java外观&#xff08;或外观&#xff09;是关于日历选择器控件的外观 。 我本打算使用Tom Eugelink不错的日历选择器&#xff0c;但是当时我了解到它是由Oracle创建并随Java 8一起交付的&#xff0c;因此出于时间的考虑&#xff08;几…

弹性盒模型--新版与旧版比较(2)

弹性空间与元素具体位置设置是加在子元素身上的 <style> body{   margin: 0; } #box{   height: 300px;   border: 1px solid #000;   新版弹性盒模型   /*display: flex;*/ 老版弹性盒模型   display: -webkit-box; } #box div{   /*新版*/   /*flex-g…

KNNClassifier

import numpy as npfrom math import sqrtfrom collections import Counterfrom .metrics import accuracy_scoreclass KNNClassifier: def __init__(self, k): """初始化kNN分类器""" assert k > 1, "k must be valid…

左斜杠和右斜杠有什么区别_「斜杠云」SEO推广和SEO优化有什么区别?

1&#xff0c;首先&#xff0c;从概念上来说&#xff0c;网络推广就是企业从开始申请域名、租用空间、网站备-案、建立网站、直到网站正式上线开始就算是介入了网络推广活动&#xff0c;而通常我们所指的网络推广是指通过互联网的种种手段&#xff0c;进行的宣传推广等活动&…

python算两个时间之间的天数,将天数转成int型

import time import datetime#计算两个日期相差天数&#xff0c;自定义函数名&#xff0c;和两个日期的变量名。 def Caltime(date1,date2):#%Y-%m-%d为日期格式&#xff0c;其中的-可以用其他代替或者不写&#xff0c;但是要统一&#xff0c;同理后面的时分秒也一样&#xff1…

并发编程-concurrent指南-阻塞队列BlockingQueue

阻塞队列BlockingQueue&#xff0c;java.util.concurrent下的BlockingQueue接口表示一个线程放入和提取实例的队列。 适用场景&#xff1a; BlockingQueue通常用于一个线程生产对象&#xff0c;而另一个线程消费对象的场景。 一个线程往里面放&#xff0c;另一个线程从里面取的…