CSS的position总是属性很容易让人弄混~

为了仔细区别它们,所以今天总结一下CSS的position属性~

下面是总结内容~

有疏漏、错误之处敬请指出!o(^▽^)o

一、简介

定义:position属性规定元素的定位类型。

说明:这个属性定义建立元素布局所用的定位机制。任何元素都可以定位,不过绝对定位或固定元素会生成一个块级框,而不论该元素本身是什么类型。相对定位元素会相对于它在正常流中的默认位置偏移。

默认值:static

继承性:no

形式语法:static | relative | absolute | sticky | fixed

JavaScript语法:object.style.position = "absolute"

浏览器支持:所有主流浏览器都支持position属性。但:任何版本的Internet Explorer(包括IE8)都不支持属性值“inhert”。

二、取值

描述

static

默认值,没有定位。元素出现在正常的流中。(忽略top、right、bottom、left和z-index属性)

relative

生成相对定位的元素,相对于其正常位置进行定位。

absolute

生成绝对定位的元素,相对于最近的非static父元素进行定位。绝对定位的元素可以设置外边距(margin),且不会与其他他边距合并。

fixed

生成绝对定位的元素,相对于浏览器窗口(viewport)进行定位。

sticky

盒位置根据正常流计算,然后相当于该元素在流中的flow root(BFC)和containing block(最近的块级元素)定位。

注:

文档流:将窗体自上而下分成一行行,并在每行中按从左至右的顺序排放元素,即为文档流。

元素脱离文档流的情况:浮动、绝对定位(absolute、fixed)。

三、 详解

我们以一个初始未定位示例为参照,其他属性值将和它进行比较。

position-0.png

1. static

默认值。没有定位,元素出现在正常流中(忽略top,bottom,left,right或者z-index声明)

解释:position设置为static或不设定position属性时,元素遵循正常的文档流,对象占用文档空间,该定位方式下,top、right、left、bottom、z-index属性是无效的。

通过上例,可以看出position属性设置为static和不设置其实是一样的~

所以,通常此属性值可以不设置,除非要覆盖之前的定义。下面举个栗子:

A页面

#div-1{

position:absolute;

}

B页面

#div-1{

position:absolute;

}

页面B中`position:static;是为了覆盖页面A中position的定义。

2. relative

生成相对定位的元素,相对于其正常位置进行定位。

解释:

(1)position设置为relative时,top、right、left、bottom等属性有效,相对其正常位置移。

(2)position设置为relative时,元素遵照正常的文档流,占据文档空间,但是占据的文档空间不会随top、right、left、bottom的偏移而发生变动,也就是说,它后面的元素是依据前一个元素正常位置(即未设置top、right、left、bottom属性之前)进行的定位。

(3)position设置为relative时,如果没有进行任何的top、right、left、bottom设置,元素不会进行任何位置的改变。

position-1.png

虚线是初始的位置空间。

由图我们可以看出,相对定位是相对元素原本在文档流中的位置而进行的偏移。并且它后面的元素——second是依据虚线位置,也就是元素原本在文档流中的位置而进行的定位。

好了,我们现在知道了top、right、left、bottom等属性不会改变relative定位的元素所占据的文档空间。,那么margin、padding会改变该元素占据的文档空间吗?我们来试一下:

css代码中添加margin属性:

示例:[relative定位-2](https://jsfiddle.net/hysunny/vxc9ctqs/)

position-2.png

由图可以看出,我们将外边距设置为20px,second元素向下偏移40px,所以margin可以改变元素所占文档空间!同理,padding也可改变元素所占文档空间,这里不多做演示。

3. absolute

生成绝对定位的元素,相对于非static定位的第一个父元素进行定位。

解释:position设置为absolute,元素会脱离文档流,整个元素不再占据文档空间,就只能相对非static定位的第一个父元素进行定位

(1)absolute在无父级是非static定位时以标签作为原点定位,而relative和static方式在最外层时是以

标签作为原点定位。标签和标签相差9px左右。

(2)position设置为absolute或fixed时,必须指定left、right、top、bottom属性中的至少一个,否则left、right、top、bottom属性会使用它们的默认值auto,这将导致对象遵从正常的HTML布局规则,在前一个对象之后立即被呈递,简单讲就是都变成relative,会占用文档空间,不会脱离文档流。若多设,比如top和bottom一同存在的话,那么只有top生效;left和right一同存在的话,那么只有left生效。

(3)绝对(absolute)定位对象和相对(relative)定位对象在可视区域之外会导致滚动条出现。而固定(fixed)定位对象放置在可视区域之外,滚动条不会出现。

position-3.png

由此例我们可以发现absolute相对html定位,relative相对body定位。

下面我们再来看看对absolute定位的元素的除static外第一个父元素设置margin/padding,看看会不会对文档空间有影响。

在absolute定位中添加margin/padding属性:

position-4.png

由上图我们可以看出,父元素的margin会让子元素的absolute定位跟着偏移,而padding却不会让子元素发生偏移。总结:absolute是根据父元素的border进行的定位。

4.fixed

生成绝对定位的元素,相对于浏览器窗口进行定位。

解释: fixed定位,又称固定定位,它和absolute定位一样,都脱离了文档流,并且能够根据top、right、left、bottom属性进行定位,但不同的是fixed是根据窗口为原点进行偏移定位的,也就是说它不会根据滚动条的滚动而进行偏移。

position-5.png

5. sticky

粘性定位。CSS3新属性。它的表现类似position:relative和position:fixed的合体,在目标区域在屏幕中可见时,它的行为就像position:relative; 而当页面滚动超出目标区域时,它的表现就像position:fixed,它会固定在目标位置。

目前position: sticky;的浏览器兼容性还比较差。

6. inherit

规定应该从父元素继承position属性的值。

position-6.png

运行,我们发现second继承了first的position属性:fixed。同时超出可视区域之外时不会出现滚动条。

总结

1. 相对定位的属性:

(1)如果设定了top、right、left、bottom等属性,并且父元素没有设定position属性,元素以其父元素的左上角为原点进行定位。

position-7.png

(2)如果设定了top、right、left、bottom等属性,并且父元素设定position属性(无论是absolute还是relative),则以父元素的左上角为原点进行定位,位置由top、right、left、bottom决定,但是如果父元素存在padding属性,则以content的左上角为原点进行定位。

position-8.png

position-9.png

虚线框为正常原始位置。

点线框为content内区域

我们可以看出,元素是以content为原点进行定位的~

以上两点总结:相对定位总是以父元素左上角为原点进行定位的,如果父元素不存在或没有position属性或position属性值为static,则以浏览器左上角进行定位。

2. 绝对定位的属性

(1)如果设定了top、right、left、bottom等属性,并且父元素没有设定position属性,元素以浏览器左上角为原点进行定位,位置由top、right、left、bottom决定。

position-10.png

由图可以看出,是相对于浏览器左上角进行定位的~

(2)如果设定了top、right、left、bottom等属性,并且父元素设定position属性(无论是absolute还是relative),则以父元素的左上角为原点进行定位,位置由top、right、left、bottom决定。但是父元素存不存在padding属性,对定位原点没有影响。

position-11.png

虚线框为正常原始位置。

点线框为border内区域

我们可以看出,父元素的padding并没有影响到子元素的定位。

由以上两点可以总结出:

若想把一个定位为absolute的元素定位于其父元素内

必须满足两个条件:

1)至少设定top、right、left、bottom中的一个

2)父元素设定position属性(值非static)

完。

总结内容参考以下:

十分感谢你们的分享n(*≧▽≦*)n

注:原文章首发于:CSS position属性总结,现迁移至此。

html中position属性默认值,CSS position 属性总结相关推荐

  1. html表格边框默认值,CSS 表格属性

    表格属性 CSS表格属性用于设置HTML表格的样式,HTML表格由 标签嵌套,,等标签组成,一个HTML表格默认至少包含table,tbody,tr,td四个元素. CSS表格属性: border-c ...

  2. html标签默认值,HTML标签CSS属性默认值汇总

    HTML标签CSS属性默认值,在你需要还原默认值的时候比较有用. 以前一直在找这份文档,今天偶然在网上看到了.除了inline和block的定义,主要是要注意body|h1~h6|blockquote ...

  3. Html中的边框弧边,CSS边框属性一---border-radius

    1.CSS outline 属性 outline (轮廓)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用. p { outline:#00FF00 dotted thick; } ...

  4. html clear属性值,clear属性有哪些属性值 CSS clear属性的理解.

    CSS clear是什么属性... 语法: clear : none | left |right | both 参数: none : 允许两边都可以有浮动对象 both : 不允许有浮动对象 left ...

  5. mysql+默认值+default_十六、MySQL 中数据类型的默认值 - default 约束-搜云库

    MySQL 中,所有的数据类型,都可以显式或隐式的拥有默认值. 我们可以使用 DEFAULT 约束显式的为列指定一个默认值.比如 CREATE TABLE t1 ( i INT DEFAULT -1, ...

  6. html中radio设置默认值

    在radio的属性中添加cheeck属性,即可实现在html中设置radio默认值 <input type="radio" name="sex" valu ...

  7. UE4 C++入门之路4-PostInitProperties函数详解(设置属性默认值的四种方法)

    PostInitProperties函数详解 前言 设置属性默认值的四种方法 一 声明时赋值 二 构造函数赋值 三 构造函数初始化列表 四 PostInitProperties 前言 也许在工作或者学 ...

  8. html中align属性的justify,css text-align属性简介说明

    摘要: 下文讲述css属性text-align的功能简介说明,如下所示: css text-align属性功能说明 css text-align属性功能: 设置html标签中内容的水平对齐方式 tex ...

  9. sqlserver中GUID的默认值设置

    sqlserver中GUID的默认值设置 YID uniqueidentifier not null default (NEWSEQUENTIALID()), //有序GUID(只能用于表设计的时候的 ...

最新文章

  1. camera摄像原理之三:色温和自动白平衡【转】
  2. [crypto]-51-RSA私钥pem转换成der, 在将der解析出n e d p q dp dq qp
  3. 将servlet数据传到html_Servlet详解(二)
  4. 窗口分析函数_8_计算某列的中间值
  5. Java黑皮书课后题第8章:**8.6(代数:两个矩阵相乘)编写两个矩阵相乘的方法。编写一个测试程序,提示用户输入两个3*3的矩阵,然后显示它们的乘积
  6. 关于“数据中心”的最强入门科普
  7. 扎克伯格不要「脸」了?Facebook正式更名为“Meta”
  8. 【elasticsearch】elasticsearch 精确匹配 与 全文搜索
  9. 笔试编程题常用的一些技巧方法
  10. Android设置分隔线
  11. Everything常见问题及搜索技巧
  12. Minitab散点图技巧
  13. html视频播放器兼容处理
  14. iOS更新系统服务器出错,iPhone 更新失败怎么办?更新 iOS 常见的错误代码及解决方法...
  15. UC Android官方下载,手机uc浏览器下载并安装-uc浏览器app最新版本v13.3.9.1119 安卓官方版 - 极光下载站...
  16. 基于STM32+ESP8266+华为云IoT设计的健康管理系统并完成应用侧开发
  17. 计算机二级考试是可以任选一种吗,计算机二级考试内容是什么_可以任意选择吗...
  18. oracle11 如何启动企业管理器
  19. C++版和MATLAB版调用摄像头显示画面
  20. 魂行道 之 湖滨鬼舍

热门文章

  1. 高德地图获取行政区一直报no_data
  2. Multiple comparisons problem
  3. Gym-Fetch-Robotics-obs-reward解析
  4. 宅男宅女的福利:当减肥健身成为游戏,你还会拒绝吗?
  5. 软件工程SSM毕设旅游信息发布管理系统(含源码+论文)
  6. php如何设置表格边框颜色代码,html表格边框颜色怎么设置_WEB前端开发
  7. Word最后一页的回车无法删除
  8. 1975: [Sdoi2010]魔法猪学院
  9. 性能测试中间件Nginx缓存配置
  10. 重装系统以及无线打印机连接