目录
标准" >标准
默认值static" >默认值static
相对定位relative" >相对定位relative
绝对定位absolute" >绝对定位absolute
固定定位fixed" >固定定位fixed
粘性定位sticky" >粘性定位sticky
宽度受限的定位元素" >宽度受限的定位元素
display/float/position之间的三角关系" >display/float/position之间的三角关系
首页 web前端 css教程 关于css中的position属性

关于css中的position属性

Dec 06, 2017 pm 04:06 PM
css position

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

标准

根据MDN文档,CSS属性 position 用于指定一个元素在文档中的定位方式。另外还需要偏移属性top, right, bottom 和 left来决定了该元素的最终位置。适用于所有元素,没有继承性,会创建层叠上下文。而定位的值一共有5种(?):

  1. position:static 默认值

  2. position:relative 相对定位

  3. position:absolute 绝对定位

  4. position:fixed 固定定位

  5. position:sticky 粘性定位

因为position属性是非常基础的知识,所以在接下来的篇幅中我不会用很多图片或demo演示效果。毕竟这些内容应该是查阅文档或教程就能知道的。

默认值static

当元素的position属性没有设置或者值为static时,元素处于文档流中,且left等偏移属性是不起作用的。文档中还说z-index值无效。我想了一下,如果元素是处于正常文档流中,一般是不会有其他元素与他在层叠上有上下的冲突,所以z-index的应用场景基本是没有的。也许有我漏考虑的地方?除了这些,static也没有什么特殊的地方了。

相对定位relative

设置相对定位的元素仍然处于文档流中,其占据的空间仍然保留。但是如果设置了上下左右偏移属性,它会相对于原位置向相应的方向移动,此时元素空间仍存在,周围元素不会重新排列。也就是说,该元素原有的位置上被放置了一块透明的砖块,看不见但摸得着。另外,相对定位元素会创建一个包含块,用于作为内部子元素定位的基点。

包含块的定义:由最近的块级祖先框,表单元格或行内块inline-block祖先框的内容边界(content edge)构成。

包含块的判定:

关于css中的position属性

绝对定位absolute

绝对定位元素会脱离文档流(normal flow),此时其原有空间为0,也就是不存在透明砖块占位。附近元素也会重新排列。同时,该元素会产生格式化上下文(BFC),上下外边距不会合并,不会因为内部浮动元素产生高度塌陷。

之所以要解释一下包含块的定义和判断,是因为绝对定位元素的定位点就是最近的包含块,设置的上下左右偏移属性都是以包含块的左上角为原点(这个跟文字方向有关)。从上图中可以看出,如果绝对定位的祖先元素position属性都是static,那么会相对于初始包含块————body定位。如果存在position属性为其他值的祖先元素,则相对于其创建的包含块定位。

这里其实想跟浮动元素做个对比,看到张鑫旭博客里提到过浮动元素可以看作有宽无高的inline-block元素,而绝对定位则是无宽无高的inline-block元素。至于为什么看成inline-block元素,我也不太记得了~

固定定位fixed

固定定位元素,相对于屏幕视口定位,这种情况下不会因为滚动而改变位置。如果是打印网页,该元素会出现在每个页面中的固定位置。另外,固定定位元素也会创建格式化上下文。  
文档中还提到,有一种特殊情况会影响fixed定位。就是当父级元素的transform属性不会none时,固定定位的容器改为该父级元素,而不是视口。这种意外情况是需要注意和避免的。  
最后,如果你是个移动端web开发者,还会遇到ios系统webview下fixed布局的一些bug。这些bug可能无法找到完美的解决方案,所以遇到的话就考虑js动态判断修改样式或者直接就重新布局吧。

粘性定位sticky

这个定位方式相信很多人都没见过,因为它是一个试验属性,文档建议尽量不要在生产环境中使用。不过它的功能还是很好用的,可以了解一下。

粘性定位是相对定位和固定定位的结合体。根据上下左右的偏移属性设置阈值。若相对定位时超过阈值会转变为固定定位。

由于是新属性,所以去这个demo看看吧。

demo中,代码主要是

<span style="font-size: 16px;">dt{<br>    position: -webkit-sticky;<br>    position: sticky;<br>    top: -1px;<br>}<br></span>
登录后复制

首先,从粘性定位在浏览器中的支持情况可以看到基本都支持了,除了ie。不过在火狐中不支持table相关元素,chrome中不支持thead和tr等元素。因此想要正常使用,可能需要加上-webkit等前缀。
其次,设置top:-1px作为阈值。当元素作为相对定位元素时,如果其顶部相对于包容块的距离>=-1px,就会转变为固定定位。所以要使用粘性定位,阈值的设置是关键。

除了demo中展示的功能,粘性定位的应用场景还可以用在所谓的sticky footer中。相信有很多时候产品都会要求这样的布局吧~

宽度受限的定位元素

很多时候,我们将绝对定位的元素垂直水平居中使用的是

<span style="font-size: 16px;">position:absolute;<br>top:0;<br>bottom:0;<br>right:0;<br>left:0;<br>width:50%;<br>height:50%;<br>margin:auto;<br></span>
登录后复制

这种情况下,由于margin设置为auto值,而根据等式:  
margin+border+padding+width=元素宽度/高度  
所以会设置margin为相应方向上空余部分的一半,实现居中的情况。

但是,绝对定位元素不是脱离文档流了吗?为什么margin还会起作用呢?原来是因为我们还设置了上下左右偏移属性。一般我们只需设置上或下、左或右,如果同时设置了上下或左右,也就是说,对立定位方向属性同时有具体定位数值的时候,流体特性就发生了。此时,绝对定位元素的宽度就会随着包含块的宽度进行适应。这种情况下的绝对定位元素就和正常文档流的元素一样,可以使用margin:auto进行居中了。

display/float/position之间的三角关系

  1. 当元素设置成绝对定位或固定定位时,浮动属性无效,display也被改为block值。也就是说此时的元素都是块级元素。

  2. 如果display设置为none,此时元素消失,设置的position和float属性自然没有意义。

以上内容就是关于css中的position属性,希望能帮助到大家。

相关推荐:

css中的position属性

CSS position属性实例详解

CSS Position属性怎么使用的

以上是关于css中的position属性的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1672
14
CakePHP 教程
1428
52
Laravel 教程
1332
25
PHP教程
1276
29
C# 教程
1256
24
vue中怎么用bootstrap vue中怎么用bootstrap Apr 07, 2025 pm 11:33 PM

在 Vue.js 中使用 Bootstrap 分为五个步骤:安装 Bootstrap。在 main.js 中导入 Bootstrap。直接在模板中使用 Bootstrap 组件。可选:自定义样式。可选:使用插件。

了解HTML,CSS和JavaScript:初学者指南 了解HTML,CSS和JavaScript:初学者指南 Apr 12, 2025 am 12:02 AM

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

HTML,CSS和JavaScript的角色:核心职责 HTML,CSS和JavaScript的角色:核心职责 Apr 08, 2025 pm 07:05 PM

HTML定义网页结构,CSS负责样式和布局,JavaScript赋予动态交互。三者在网页开发中各司其职,共同构建丰富多彩的网站。

bootstrap怎么插入图片 bootstrap怎么插入图片 Apr 07, 2025 pm 03:30 PM

在 Bootstrap 中插入图片有以下几种方法:直接插入图片,使用 HTML 的 img 标签。使用 Bootstrap 图像组件,可以提供响应式图片和更多样式。设置图片大小,使用 img-fluid 类可以使图片自适应。设置边框,使用 img-bordered 类。设置圆角,使用 img-rounded 类。设置阴影,使用 shadow 类。调整图片大小和位置,使用 CSS 样式。使用背景图片,使用 background-image CSS 属性。

bootstrap怎么写分割线 bootstrap怎么写分割线 Apr 07, 2025 pm 03:12 PM

创建 Bootstrap 分割线有两种方法:使用 标签,可创建水平分割线。使用 CSS border 属性,可创建自定义样式的分割线。

bootstrap怎么设置框架 bootstrap怎么设置框架 Apr 07, 2025 pm 03:27 PM

要设置 Bootstrap 框架,需要按照以下步骤:1. 通过 CDN 引用 Bootstrap 文件;2. 下载文件并将其托管在自己的服务器上;3. 在 HTML 中包含 Bootstrap 文件;4. 根据需要编译 Sass/Less;5. 导入定制文件(可选)。设置完成后,即可使用 Bootstrap 的网格系统、组件和样式创建响应式网站和应用程序。

bootstrap怎么调整大小 bootstrap怎么调整大小 Apr 07, 2025 pm 03:18 PM

要调整 Bootstrap 中元素大小,可以使用尺寸类,具体包括:调整宽度:.col-、.w-、.mw-调整高度:.h-、.min-h-、.max-h-

bootstrap按钮怎么用 bootstrap按钮怎么用 Apr 07, 2025 pm 03:09 PM

如何使用 Bootstrap 按钮?引入 Bootstrap CSS创建按钮元素并添加 Bootstrap 按钮类添加按钮文本

See all articles