CSS中position属性详解

html-css016

CSS中position属性详解,第1张

根据W3C的解释为:position 属性规定元素的定位类型,把元素放置到一个静态的、相对的、绝对的、或固定的位置中。

可能的值

absolute:生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。

fixed:生成绝对定位的元素,相对于浏览器窗口进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。

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

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

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

我们用的最多的absolute和relative,接下来可以通过具体例子来更加直观地体现。

举例

一:绝对定位

position: absolute;绝对定位:绝对定位是相对于元素最近的已定位的祖先元素(即是设置了绝对定位或者相对定位的祖先元素)。如果元素没有已定位的祖先元素,那么它的位置则是相对于最初的包含块(body)。

绝对定位本身与文档流无关,因此不占空间,普通文档流中的元素的布局就当绝对定位的元素不存时一样,所以 它们可以覆盖页面上其他的元素,且可以通过z-index属性来控制这些层的对方顺序。

#box_relative {

position: absolute

left: 30px

top: 20px

}

二:相对定位

position: relative;相对定位:相对定位是相对于元素在文档中的初始位置——首先它出现在它所在的位置上(即不设置position时的位置,然后通过设置垂直或水平位置,让这个元素“相对于”它的原始起点进行移动;

注意,在使用相对定位时,无论是否进行移动,元素仍然占据原来的空间。因此,移动元素会导致它覆盖其它框。

#box_relative {

position: relative

left: 30px

top: 20px

}

注意

position:absolute,float会隐式地改变display的类型(display:none除外)。即是当元素设置position:absolute、float:left、float:right中任意一个时,都会让元素以display:inline-block的方式显示(特点是:可以设置长宽,默认宽度不占满父元素)。这时,即使故意设置display:inlinedisplay:block都是无效的。

但是float在IE6下的双边距bug就是用display:inline来解决的。position:relative不会隐式改变display的类型。

css自定义属性

css自定义属性分为全局定义属性和局部定义属性。

一:全局

1.定义:

:root{//此处的root是固定的。

--them-color:blue //自定义属性时以--开头,告诉浏览器这是自定义的。

}

2.使用:

<style type="text/css">

.div{

background-color:var(--them-color)

//如果自定义的属性出不来或其他问题,可在之后写属性值。例如:background-color:var(--them-color,blue)

也可写另一个属性名:background-color:var(--them-color,var(--them-color1))

}

</style>

<div class="div">111</div>

二:局部

1:定义

.foo{

--them-color:yellow

}

 .div{

color:var(--them-color)

}

2:使用:

<div class="foo div">121321</div> //此处的foo相当于一个基类,目的是存取所有的属性值,他的子元素从这个库里取属性。

例子:

<style type="text/css">

.foo{

--them:yellow

--width-outer:800px

--height-outer:400px

--width-inner:100px

--height-inner:100px

--bg-inner1:red

--bg-inner2:orange

--bg-inner3:purple

}

.div{

width: var(--width-outer)

height: var(--height-outer)

border:1px solid var(--them)

margin: 20px auto

}

.foo div:nth-child(1){

width: var(--width-inner)

height: var(--height-inner)

background-color: var(--bg-inner1)

}

.foo div:nth-child(2){

width: var(--width-inner)

height: var(--height-inner)

background-color: var(--bg-inner2)

}

.foo div:nth-child(3){

width: var(--width-inner)

height: var(--height-inner)

background-color: var(--bg-inner3)

}

</style>

<body>

<div class="div">

<div></div>

<div></div>

<div></div>

</div>

</body>

四:总结

在一个组件里或者全局将经常使用的属性提取出来,比如主题色,用的时候直接使用变量。便于维护代码,改的时候直接改一处即可。

CSS position 属性

通过使用 position 属性,我们可以选择 4 种不同类型的定位,这会影响元素框生成的方式。

position 属性值的含义:

static

元素框正常生成。块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其父元素中。

relative

元素框偏移某个距离。元素仍保持其未定位前的形状,它原本所占的空间仍保留。

absolute

元素框从文档流完全删除,并相对于其包含块定位。包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。

fixed

元素框的表现类似于将 position 设置为 absolute,不过其包含块是视窗本身。

提示:相对定位实际上被看作普通流定位模型的一部分,因为元素的位置相对于它在普通流中的位置。