欢迎来真孝善网,为您提供真孝善正能量书籍故事!

全面解析:CSS Position 属性应用技巧总结

时间:11-18 神话故事 提交错误

大家好,如果您还对全面解析:CSS Position 属性应用技巧总结不太了解,没有关系,今天就由本站为大家分享全面解析:CSS Position 属性应用技巧总结的知识,包括的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

以下是总结~

有遗漏或者错误的地方还请大家指出! o(^^)o

一、简介

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

说明:该属性定义用于建立元素布局的定位机制。任何元素都可以定位,但绝对定位或固定元素都会生成块级框,无论元素本身的类型如何。相对定位的元素在正常流程中偏离其默认位置。

默认值:静态

继承性:无

形式语法:静态|相对|绝对|粘|固定的

JavaScript语法: object.style.position="绝对"

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

二、取值

值说明静态默认值,不定位。元素出现在正常流程中。 (忽略top、right、bottom、left 和z-index 属性)relative 生成一个相对定位的元素,相对于其正常位置定位。 Absolute 生成一个绝对定位的元素,相对于最近的非静态父元素定位。绝对定位的元素可以设置边距,并且不会与其他边距合并。固定生成绝对定位的元素,相对于浏览器窗口(视口)定位。粘性框的位置是根据正常流计算的,然后相当于元素的流根(BFC)和包含块(最近的块级元素)在流中的定位。注:文档流:将表单从上到下分成几行,每行中的元素从左到右排列,这就是文档流。

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

三、 详解

我们使用初始未定位示例作为参考,与其他属性值进行比较。

【定位参考示例】(https://jsfiddle.net/hysunny/3gwbeu3v/)

position-0.png

1. static

默认值。如果没有定位,元素会出现在正常流程中(顶部、底部、左侧、右侧或z 索引声明将被忽略)

解释:当position设置为static或者没有设置position属性时,元素遵循正常的文档流程,对象占据文档空间。在此定位方法中,top、right、left、bottom 和z-index 属性无效。

示例:【静态定位】(https://jsfiddle.net/hysunny/zj2ogz8m/)

从上面的例子我们可以看出,将position属性设置为static和不设置其实是一样的~

因此,通常不需要设置该属性值,除非要覆盖之前的定义。这是一个例子:

一页

#div-1{

位置:绝对;

}

B页

#div-1{

位置:绝对;

} `位置:静态; B页中的位置定义会覆盖A页中的位置定义。

2. relative

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

解释:(1) 当位置设置为相对时,上、右、左、下等属性有效,并相对于其正常位置发生偏移。

(2)当position设置为relative时,元素遵循正常的文档流向,占用文档空间,但占用的文档空间不会随着top、right、left、bottom的偏移而变化。也就是说,其背后的元素不会改变。它是根据前一个元素的正常位置定位的(即在设置top、right、left、bottom 属性之前)。

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

示例:[相对定位-1] (https://jsfiddle.net/hysunny/ae8s2cm4/)

position-1.png 虚线是初始位置空间。

从图中我们可以看出,相对定位是相对于元素在文档流中的原始位置的偏移。而其后面第二个元素——是根据虚线位置来定位的,这是该元素在文档流中的原始位置。

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

在css 代码中添加margin 属性:

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

position-2.png 从图中可以看出,我们将外边距设置为20px,第二个元素向下偏移40px,所以边距可以改变元素占用的文档空间!同样的,padding也可以改变元素占用的文档空间。这里我就不演示了。

3. absolute

生成一个绝对定位的元素,相对于第一个非静态定位的父元素定位。

解释:当position设置为absolute时,元素将从文档流中分离出来。整个元素不再占用文档空间,并且只能相对于第一个非静态定位的父元素进行定位。

(1)Absolute方式在没有parent且为非静态定位时使用标签作为原点定位,而relative和static模式在使用最外层时使用标签作为原点定位。标签与标签之间的差异约为9px。

(2) 当position设置为absolute或fixed时,至少必须指定left、right、top、bottom属性之一。否则,left、right、top、bottom 属性将使用它们的默认值auto,这将导致对象遵循正常的HTML 布局规则,在前一个对象之后立即呈现。简单来说,它们变得相对,会占用文档空间,不会脱离文档流。如果有多个设置,例如top和bottom同时存在,则只有top生效;如果left 和right 同时存在,则只有left 生效。

(3)绝对定位对象和相对定位对象在可见区域之外都会导致出现滚动条。固定定位对象放置在可见区域之外并且不会出现滚动条。

例子:

[绝对定位-1](https://jsfiddle.net/hysunny/q325w0k6/)

position-3.png 从这个例子中我们可以发现absolute是相对于html定位的,relative是相对于body定位的。

接下来,我们看一下对绝对定位元素除static 之外的第一个父元素设置margin/padding,看看是否会对文档空间产生影响。

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

[绝对定位-2](https://jsfiddle.net/hysunny/59xv1qmx/)

position-4.png 从上图我们可以看出,父元素的margin会偏移子元素的绝对定位,但是padding不会偏移子元素。总结:Absolute是根据父元素的边框来定位的。

4.fixed

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

解释:固定定位又称固定定位,与绝对定位相同。它与文档流分离,可以根据上、右、左、下属性进行定位。但不同的是fixed是以窗口为原点的偏移。定位,这意味着它不会根据滚动条的滚动而移动。

示例:【固定定位】(https://jsfiddle.net/hysunny/cubxLga9/)

position-5.png

5. sticky

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

目前,position: Sticky的浏览器兼容性;还是比较穷的。

示例:【粘性定位】(https://jsfiddle.net/hysunny/rztoc45w/)

6. inherit

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

示例:【继承定位】(https://jsfiddle.net/hysunny/4uLp2ybv/)

当position-6.png运行时,我们发现second继承了first的position属性:fixed。同时,滚动条在可见区域之外时也不会出现。

总结

1. 相对定位的属性:

(1)如果设置了top、right、left、bottom等属性,且父元素没有设置position属性,则元素将以父元素的左上角为定位位置起源。

[示例](https://jsfiddle.net/hysunny/z2L92kqz/)

position-7.png(2) 如果设置了top、right、left、bottom等属性,并且父元素设置了position属性(无论是绝对还是相对),都会使用父元素的左上角作为定位原点。由上、右、左、下决定,但如果父元素有padding属性,则会以内容的左上角为原点进行定位。

[示例](https://jsfiddle.net/hysunny/2jgk2nzv/)

position-8.pngposition-9.png 虚线框为正常原始位置。

虚线框是内容内的区域

我们可以看到元素是以content为原点定位的~

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

2. 绝对定位的属性

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

[示例](https://jsfiddle.net/hysunny/dw2wfh6n/)

position-10.png 从图中可以看到,是相对于浏览器左上角定位的~

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

[示例](https://jsfiddle.net/hysunny/2yL8Lo3k/)

position-11.png 虚线框是正常的原始位置。

虚线框为边框内的区域

我们可以看到,父元素的padding并不会影响子元素的定位。

从以上两点可以得出:

如果要将一个元素放置在其父元素中的绝对位置

必须满足两个条件:

1)设置上、右、左、下至少之一

2)设置父元素的position属性(该值不是静态的)

超过。

总结内容如下:

MDN:位置

css中position属性(absolute|relative|static|fixed)概述及应用

css相对定位和绝对定位详解

用户评论

∞◆暯小萱◆

这篇文章正好是我最近在学! CSS里的位置属性真是挺重要的

    有17位网友表示赞同!

沐晴つ

终于有人好好总结了position, 我每次都记混…

    有7位网友表示赞同!

安陌醉生

需要学习一下,最近在做网页设计

    有7位网友表示赞同!

代价是折磨╳

posición... 总是容易搞混的词汇!

    有16位网友表示赞同!

走过海棠暮

做前端工程师必须掌握!

    有12位网友表示赞同!

゛指尖的阳光丶

CSS真是个强大的工具!

    有20位网友表示赞同!

孤败

我一直在尝试用 position 属性来布局元素,希望能学到更深的技巧

    有18位网友表示赞同!

开心的笨小孩

学习学习,提升技能!

    有7位网友表示赞同!

Edinburgh°南空

很有用的知识点,要好好收藏!

    有5位网友表示赞同!

可儿

位置属性是网页设计中的基石啊!

    有12位网友表示赞同!

玩味

这篇文章内容很全面,方便理解!

    有11位网友表示赞同!

冷月花魂

原来position还有这么多种用法… 太棒了!

    有15位网友表示赞同!

Hello爱情风

看完了文章,感觉对CSS有了更深的了解。

    有6位网友表示赞同!

伱德柔情是我的痛。

希望能看到更多关于CSS的讲解!

    有7位网友表示赞同!

像从了良

分享给同学一起学习!

    有8位网友表示赞同!

陌離

学习css从这里开始!

    有14位网友表示赞同!

话扎心

希望网站设计越来越丰富有趣!

    有5位网友表示赞同!

抚笙

文章内容很清晰,容易理解!

    有15位网友表示赞同!

■孤独像过不去的桥≈

CSS是网页设计的核心部分,掌握它很重要!

    有11位网友表示赞同!

全网暗恋者

期待后续更多关于CSS的分享!

    有17位网友表示赞同!

【全面解析:CSS Position 属性应用技巧总结】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活