CSS定位:几种类型的position定位的元素

文章简介:定位属性看起来好像很好理解,但它的运作与它在表面所看到的有点儿不一样。你可能会觉得的是相对定位更加类似绝对定位。当在做布局设计的时候你通常会想使用浮动并在指定的元素上应用定位来打破布局。

当人们刚接触布局的时候都比较倾向于使用定位的方式。因为定位的概念看起来好像比较容易掌握。表面上你确切地指定了一个块元素所处的位置那么它就会坐落于那里。可是定位比你刚看到的时候要稍微复杂一点。对于定位来说,有一些东西会绊倒新手,所以在它成为你的惯用技巧前你需要掌握它们。

一旦你更深入地了解了它是怎么运作的,你就能够做出一些更棒的事情来。

CSS盒模型和定位的类型

为了搞清楚定位首先你得了解CSS盒模型。在上一句中的链接是我写在InstantShift 中的一篇关于盒模型的文章。我在那篇文章做了详细的讲解并会在这篇文章中做一个快速的总结。

在CSS中,每一个元素都由一个矩形盒子所包含。每一个盒子都会具有一个内容区,内容区被一个内边距所包裹,内边距外是盒子的边框,并且在边框之外会有一个外边距用于与其他盒子分隔开来。这些你可以从下面这张图片看到。

定位模式规定了一个盒子在总体的布局上应该处于什么位置以及对周围的盒子会有什么影响。定位模式包括了常规文档流,浮动,和几种类型的 position 定位的元素。

CSS position 属性可以取5种值:

  • position: absolute
  • position: relative
  • position: fixed
  • position: static
  • position: inherit

我会在下面对前三个值进行详细的阐述并简单地讲解一下最后两个值。

static 是 position 默认的属性值。任何应用了 position:static 的元素都处于常规文档流中。它处于什么位置以及它如何影响周边的元素都是由盒模型所决定的。

一个 static 定位的元素会忽略所有 top,right,bottom,left 以及 z-index 属性所声明的值。为了让你的元素能使用任何的这些属性,你需要先为它的 position 属性应用这三个值的其中之一: absolute,relative,fixed

position 值为 inherit 的元素和其他所有属性的继承值一样,元素只是简单地应用了与父元素一样的 position 值。

绝对定位(Absolute Positioning)

绝对定位的元素会完全地从常规文档流中脱离。对于包围它的元素而言,它会将该绝对定位元素视为不存在。就好像 display 属性被设为 none 一样。如果你想要保持它所占有的位置而不被其他元素所填充,那么你需要使用其他的定位方式。

你可以通过 top, right, bottom, 和 left 四个属性来设置绝对定位元素的位置。但你通常只会设置它们其中的两个,top 或者 bottom,以及 left 或者 right。默认地它们的值都为 auto。

弄明白绝对定位的关键是知道它的起点在哪里。如果 top 被设置为20px那么你要知道这20px是从哪里开始计算的。

一个绝对定位的元素的起点位置是相对于它的第一个 position 值不为 static 的父元素而言的。如果在它的父元素链上没有满足条件的父元素,那么绝对定位元素则会相对于文档窗口来进行定位。哈!

关于“相对”这个概念你或许有点迷惑,尤其是还有一个叫相对定位的东西,这是我们还没有讲到的。

当你在一个元素的样式上设置 position:absolute 意味着需要考虑父元素,并且如果父元素的 position 值不为 static ,那么绝对定位元素的起点为父元素的左上角位置。

如果父元素没有应用除了 static 以外的 position 定位,那么它会检查父元素的父元素是否有应用非 static 定位。如果该元素应用了定位,那么它的左上角便会成为绝对元素的起点位置。如果没有则会继续向上遍历DOM直到找到一个定位元素或者寻找失败以到达最外层的浏览器窗口。

相对定位(Relative Positioning)

相对定位的元素也是根据 top, right, bottom, 和 left 四个属性来决定自己的位置的。但只是相对于它们原来所处于的位置进行移动。在某种意义上来说,为元素设置相对定位和为元素添加 margin 有点相似,但也有一个重要的区别。区别就是在围绕在相对定位元素附近的元素会忽略相对定位元素的移动。

我们可以把它看做是一张图片的重像从真实的图片的位置开始进行了一点移动。它原始图片所占据的位置仍然保留,但我们已经没法再看到它,只能看到它的重像。这样就让元素之间可以进行位置的重叠,因为相对定位元素能够移动到其他元素所占据的空间中。

相对定位元素离开了正常文档流,但仍然影响着围绕着它的元素。那些元素表现地就好像这个相对定位元素仍然在正常文档流当中。

我们无需再追问这个相对的位置是在哪里。因为这个相对位置很显然是正常的文档流。相对定位有点儿像为元素添加了 margin ,对相邻元素来说却像是什么都没发生过。但实际上并没有增加任何的 margin 。

固定定位(Fixed Positioning)

固定定位的行为类似于绝对定位,但也有一些不同的地方。

首先,固定定位总是相对于浏览器窗口来进行定位的,并且通过哪些属性的 top, right, bottom, 和 left 属性来决定其位置。它抛弃了它的父元素,它就是定位中表现地有点儿反叛。。

第二个不同点是其在名字上是继承的。固定定位的元素是固定的。它们并不随着页面的滚动而移动。你可以告诉元素它所处的位置并永远不再移动。噢~好像还挺乖巧的。

在某种意义上说固定定位元素有点儿类似固定的背景图片,只不过它的外层容器块总是浏览器窗口罢了。如果你在 body 中设置一个背景图片那么它与一个固定定位的元素的行为时非常像的,只不过在位置上的精度会略少一些。

背景图片也不能改变其在第三个维度的大小,也因而带来了 z-index 属性。

打破了平面的 Z-Index

这个页面是一个二维平面。它具有宽度和高度。我们活在一个用 z-index 作为其深度的三维的世界当中。这个额外的维度能够穿越一个平面。

由上图可知,高的 z-index 位于低的 z-index 的上面并朝页面的上方运动。相反地,一个低的 z-index 在高的 z-index 的下面并朝页面下方运动。

没有的 z-index 的话,定位元素会有点儿麻烦。因为 z-index 能让一个定位元素位于另一个元素的上方或者下方,这或许能让你做出点创造性的东西。所有的元素的默认的 z-index 值都为0,并且我们可以对 z-index 使用负值。

z-index 实际上比我在这里描述的要更加地复杂,但细节写在了另一篇文章里。现在只需要记住这个额外维度的基本概念以及它的堆叠顺序,另外还要记住只有定位元素才能应用 z-index属性。

定位的问题

对于定位元素来说由几个比较常见的问题,都值得我们好好了解。

1.你不能在同一个属性当中应用定位属性和浮动。因为对使用什么样的定位方案来说两者的指令时相冲突的。如果你把两个属性都添加到一个相同的元素上,那么就期望在CSS中较后的那个属性时你想要使用的吧。

2.Margin 不会在绝对元素上折叠。假设你具有一个 margin-bottom 为20px的段落。在段落后面是一个具有30px的 margin-top 的图片。那么段落和图片之间的空间不会是50px(20px+30px)而是30px(30px > 20px)。这就是所谓的 margin-collapse,两个 margin 会合并(折叠)成一个 margin。

绝对定位元素不会像那样进行 margin 的折叠。这会使它们跟预期的不一样。

3.IE在 Z-index 上有一些BUG。在IE 6中 select 元素总是处于堆叠层级的最上方而不管它的 z-index 和其他元素的 z-index 是多少。

IE 6和IE 7在堆叠层级上又有另外一个问题。IE 6由最外层的定位元素的层级来决定哪一组的元素处于层级的最上面,而不是每一个单独的元素自身的层级决定。

<div
			style="z-index: ">
		<p
			style="z-index: 1"></p>
		</div>
		<img
			style="z-index: " />
	

对上面这段结构,你会预料段落元素处于堆叠层级的最上方。因为它具有最大的 z-index 值。但在IE 6和IE 7中,图片为处于段落的上方。因为 img 具有比 div 更加高的 z-index 层级。因此它会位于所有 div 的子元素的上方。

总结

一个元素上所设置的位置属性会根据其中的一种CSS定位模式来运作。你可以为定位元素设置 absolute, relative, fixed, static (默认), 和 inherit 中的其中一个值。

定位模式和CSS定位元素,定义了一个盒子在布局中应该处于什么位置以及围绕它的元素会受到定位元素带来的影响。

z-index 属性只能被应用与定位元素上。它为页面增加了第三个维度并设置了元素的层级上的顺序。

定位属性看起来好像很好理解,但它的运作与它在表面所看到的有点儿不一样。你可能会觉得的是相对定位更加类似绝对定位。当在做布局设计的时候你通常会想使用浮动并在指定的元素上应用定位来打破布局。

译者手语:整个翻译依照原文线路进行,并在翻译过程略加了个人对技术的理解。如果翻译有不对之处,还烦请同行朋友指点。谢谢!

如需转载烦请注明出处:

英文原文:http://www.vanseodesign.com/css/css-positioning/

中文译文:http://www.w3cplus.com/css/position-and-z-index.html

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索属性
, 定位
, 位置
, 元素
, 一个
, 定位属性
, 相对
, 元素位置
定位元素
,以便于您获取更多的相关知识。

时间: 2024-12-31 12:07:44

CSS定位:几种类型的position定位的元素的相关文章

css的三种定位方式使用探讨

css 3种类型定位方式,进行控制页面布局:普通定位,浮动定位,绝对定位. 默认使用普通流技术再页面中布局元素,希望表现与普通流不同,另外两个特性position和float 具体实例   复制代码 代码如下: <html> <head> <title> css定位功能探索 </title> <style type="text/css"> #relative{ /*相对定位探索 将相对于它在普通流中位置进行定位 相对定位实际上

浅析CSS——元素重叠及position定位的z-index顺序

多次在项目中遇到html页面元素的非期待重叠错误,多数还是position定位情况下z-index的问题.其实每次解决类似问题思路大致都是一样的,说到底还是对z-index的理解比较模糊,可以解决问题却不大了解其原因,导致重复出错......于是决定把重叠问题弄清下,把z-index理顺下. 经过一番查找对比实践理解,下面就从元素重叠的背景常识及可能原因说起,浅谈下position定位元素的z-index顺序.总结下我目前的理解,希望也能对遇到过类似问题有同样疑惑的你有一点帮助或启发.   元素

精通css(4)-盒模型,定位,浮动

终于到了css最重要的3个部分:盒模型,定位,浮动.先讲盒模型吧. 1.盒模型概述 页面上的每个元素都被看成一个矩形框.这个框由元素的内容.内边距.边框和外边距组成. 内边距.边框和外边距都是可选的默认为0.但是许多元素由用户代理样式表设置外边距和内边距.所以不见的一定是0. 在css中,width和height是指内容区域的宽度和高度,对边距没有影响.所以增加width/height/内容/边框/内外边距中的任何一个都会使盒子变大.值得高兴的是,IE6在混杂模式的使用的是非标准的盒模型.他的w

详细介绍CSS的三种selector

css|select CSS的三种selector 上一节开始我们讨论 CSS (Cascading Style Sheet) 的基础. 告诉你有三种 Selector. 但只介绍了其中的 HTML selector. 这一节我们把三种都详细介绍给你HTML selector.class selector.ID selector: HTML selector HTML selector 就是 HTML 的 tags, 比如 P, DIV, TD 等. 如你用 CSS 定义了它们, 在整页中, 这

css知多少(11)——position

原文:css知多少(11)--position 1. 引言 本文将用一篇文章介绍position(定位),在学习position之前,我们应该去思考一个问题:什么情况下我们需要定位?如果没有定位将无法满足我们怎样的需求?我们要知道,被人类创造出来的每一个知识,都有它的用途,都要解决一些之前遇到的问题. 如果没有定位,我们做出来的网页将会是按部就班的自上而下.自左而右的平铺在浏览器上,外加通过margin和padding调整一下间距,还有就是通过float来浮动某些元素.做一些简单的网页这样就够了

ios-大神留步!!!iOS能不能关闭GPS定位而只开启其他的定位功能?

问题描述 大神留步!!!iOS能不能关闭GPS定位而只开启其他的定位功能? 在开发过程中想要测试下,如果不开启GPS定位功能,用其他定位服务是否也能实现定位功能. 但是手机测是时候如果关闭定位服务的话,就把所有的定位功能都关闭了.有没有一种方法关闭GPS而只检测WiFi定位之类的办法,还是应该在代码中添加什么关闭GPS定位服务的代码吗??? 解决方案 iOS中GPS定位 解决方案二: 明确告诉你,你没有大量的地理信息,所以绝对不可以,你可以提示用户

JS两种类型的表单提交方法实例分析_javascript技巧

本文实例分析了JS两种类型的表单提交方法.分享给大家供大家参考,具体如下: 1.原始的 <form method="post" action="/student/stureg/add" id="form1" onsubmit="return subForm();"> <button type="submit" class="button red" style="

Cisco四种类型的防火墙技术汇总

我们知道防火墙有四种类型:集成防火墙功能的路由器,集成防火墙功能的代理服务器,专用的软件防火墙和专用的软硬件结合的防火墙.Cisco的防火墙解决方案中包含了四种类型中的第一种和第四种,即:集成防火墙功能的路由器和专用的软硬件结合的防火墙. 一. 集成在路由器中的防火墙技术 1. 路由器IOS标准设备中的ACL技术 ACL即Access Control Lis t(访问控制列表),简称Access List(访问列表),它是后续所述的IOS Firewall Feature Set的基础,也是Ci

初学必知:XHTML网页中加入CSS的五种方式

css|xhtml|初学|网页 在XHTML网页中如何加入CSS呢?这篇教程告诉大家引入CSS的几种方式. XHTML文件是通过CSS样式进行显示的控制的,也就是结合XHTML与CSS来表现页面内容.那么到底有哪些方式在XHTML文件中引入CSS样式呢? 一.使用STYLE属性 将STYLE属性直接加在个别的元件标签里,<元件(标签) STYLE="性质(属性)1: 设定值1; 性质(属性)2: 设定值2; ...} 例如: <td style="color:#c00; f