绝对定位元素left、right、top、bottom值与其margin和宽高的关系
绝对定位元素(position: absolute)在其相对定位元素(即文档流中最近的非静态定位祖先元素)中,定位祖先元素的宽度为W,垂直高度为H,则存在以下关系:
元素水平方向
width + left + right + marginLeft + marginRight = W
垂直方向:
height + top + bottom + marginTop + marginBottom =H

由于绝对定位元素的这种特性,所以可以实现伪元素与宿主元素等尺寸效果以及绝对定位元素的水平垂直居中设置。
1、给宿主元素应用 position: relative 样式,并为伪元素设置 position: absolute,然后再把所有偏移量设置为零,伪元素在水平和垂直方向上都被拉伸至宿主元素的尺寸。这项特征常用于生成元素的上层遮罩效果。

<div class='relative'>
欢迎来到二狗哥的博客
</div>
.relative {
width:300px;
height:200px;
position:relative;
}
.relative::after {
content:'';
position:absolute;
z-index:999;
background:rgba(255,0,0,.5);
top:0;
right:0;
bottom:0;
left:0;
}
通过对相对定位的元素宿主元素(.relative)添加绝对定位的伪元素,并将其top:0;right:0;bottom:0;left:0,这样浏览器会自动计算伪元素的宽高,得出其宽高与宿主元素(.relative)一样大。
width(伪元素)+right(伪元素)+left(伪元素)+marginLeft(伪元素)+marginRight(伪元素)=width(宿主元素)
上面的例子中,margin值未设置,其默认初始值为0。即计算伪元素的宽度中,right(伪元素)、left(伪元素)、marginLeft(伪元素)、marginRight(伪元素)均为0,那么即伪元素宽度等于宿主元素宽度。
2、;在position:absolute下,top:0;right:0;bottom:0;left:0结合margin:auto的作用,让确定宽高的盒子水平垂直居中于父元素。

<div class='relative'>
<div class='absolute'>
</div>
</div>
.relative {
background: #ccc;
width: 300px;
height: 200px;
position: relative;
}
.absolute {
background: aqua;
position: absolute;
width: 50px;
height: 50px;
margin:auto;
top: 0;
right: 0;
bottom: 0;
left: 0
}
绝对定位元素( .absolute)相对于定位元素( .relative)水平和垂直方向居中。由于绝对定位元素( .absolute)的宽高均已经明确,并且定位数据也明确划定,根据用户代理需要强制计算margin值(auto)来进行定位。
水平方向:
Width(绝对定位元素) + left(绝对定位元素) + right(绝对定位元素) + marginLeft(绝对定位元素) + marginRight(绝对定位元素)= Width(相对定位元素)
代入数值:
50+0+0+ marginLeft(绝对定位元素) + marginRight(绝对定位元素)=300
marginLeft(绝对定位元素) = marginRight(绝对定位元素)=125

绝对定位元素left、right、top、bottom值与其margin和宽高的关系的更多相关文章
- IE6下绝对定位元素父级宽高是奇数,绝对定位元素的right和bottom值会有1个像素的偏差
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- jq获取绝对定位与相对定位的top, left值
jquery 实现方法绝对var X = $('#ID').offset().top; var Y = $('#ID').offset().left; 相对var X = $('#ID').posit ...
- div设置overflow-scroll滚动之后,jq获取其子元素的offset.top出现问题。
先上个图: 布局很简单,左右超过屏幕的部分自行滚动. 1. html <div class="ce-container"> <div class="ce ...
- html标签默认属性值之margin;padding值
一.h1~h6标签:有默认margin(top,bottom且相同)值,没有默认padding值. 在chrome中:16,15,14,16,17,19; 在firefox中:16,15,14,16, ...
- css绝对定位元素实现居中的几个方法
一:CSS绝对定位元素left设为50%实现水平居中 绝对定位的元素left设为50%时,是已左上角为原点的,所以只要再使用margin属性添加负值补偿回来即可.示例:[css]代码如下: #boar ...
- position的用法(top, bottom, left, right 四个定位属性配合进行使用)
一般情况下 页面元素的定位方式是根据文档流也就是说默认的从上到下,从左到右的方式进行排列的,而将元素从文档流脱离出来显示的方式有两种,一种是 position 定位另一种是float 浮动,这里我们详 ...
- 转: Firefox 浏览器对 TABLE 中绝对定位元素包含块的判定有错误
标准参考 元素的包含块 W3C CSS2.1 规范中规定,绝对定位元素的包含块(containing block),由离它最近的 position 特性值是 "absolute". ...
- 小tip: margin:auto实现绝对定位元素的水平垂直居中
转载自:http://www.zhangxinxu.com/wordpress/?p=3794 一.绝对定位元素的居中实现 如果要问如何CSS实现绝对定位元素的居中效果,很多人心里已经有答案了. 兼容 ...
- 【Web】CSS实现绝对定位元素水平垂直居中
网页中常常需用让绝对定位元素水平垂直居中,下面介绍2种方法: 一 元素宽度未知 <!DOCTYPE html> <html lang="en"> <h ...
随机推荐
- 使用git 版本控制的代码在线修调试,如何还原
在线调试: 先切换成www用户进入项目的根目录比如/data/wwwroot/website su www cd /data/wwwroot/website vi ./api/controllers/ ...
- leaflet如何加载10万数据
作为一名GIS开发者,你工作中一定遇到过这种问题,根据业务设计,需要在地图上添加1万+条数据,数据或是点.或是线.或是面.但不管哪种,当你添加到5000条时,地图操作就会出现明显的卡顿.当你添加超过1 ...
- markdown的基本使用
1.什么是markdown? markdown是一种轻量级的标记语言 可以转换为html/xhtml和其它格式 可读.直观.学习成本低 当你学会使用markdown编写文档时,你会感觉自己发现了一个新 ...
- docker 升级后或者重装后,启动容器提示:Error response from daemon: Unknown runtime specified docker-runc
之前安装的版本是docker 1.3,并运行了容器jenkins 现在把docker升级版本为docker-ce 19.03 再使用docker ps发现之前的jenkins容器已经退出了 启动容器: ...
- Spark学习总结
RDD及其特点 1.RDD是Spark的核心数据模型,但是个抽象类,全称为Resillient Distributed Dataset,即弹性分布式数据集. 2.RDD在抽象上来说是一种元素集合,包含 ...
- jdk、eclipse和idea安装
一.jdk下载与环境配置与IDEA 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213315 ...
- Java 8 中的抽象类和接口到底有啥区别?
上一篇栈长发了这篇<Java 8 有多牛逼?打破一切你对接口的认知!>,帮助许多人解开了疑惑,还有读者留言说两者还有啥区别,故引发了此篇: 在我们面试时也会经常遇到面试官问抽象类和接口的区 ...
- oozie.action.hadoop.LauncherException: IO error Connection timed out: no further information
本文主要针对使用CDH平台的HUE时候碰到两类问题,最终问题并没有得到很好的解决,只是提供了一种绕行方式,欢迎知道的朋友补充. ## **NO 1: HUE执行jar包** > 第一种报错 or ...
- org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, TopicTest异常解决
使用RocketMQ发送消息抛出异常,异常如下: 原因: Broker 禁止自动创建Topic,且用户没有通过手动创建此Topic,或者broker 和 Nameserver网络不通: 解决方案: 1 ...
- for循环结构中的3个表达式缺一不可?
do-while循环结构结束条件是while后的判断语句不成立for循环结构中的3个表达式都可以为空的.