参考链接:www.w3school.com.cn
CSS 定位 (Positioning) 属性允许你对元素进行定位。
一、定位的概念
CSS 定位和浮动
CSS在定位和浮动这块提供了很多属性,可以利用这些属性,来建立列式布局,将布局的一部分与另一部分重叠。
定位的思想也很简单,它可以让我们定义元素相对于其本身正常出现位置,或者相对于父级元素位置,或者相对于另一个元素位置,或者可以相对于浏览器窗口的位置,来决定该元素想要在的位置。
一切皆为框
div、h1 或 p 元素常常被称为块级元素。这意味着这些元素显示为一块内容,即“块框”。与之相反,span 和 strong 等元素称为“行内元素”,这是因为它们的内容显示在行中,即“行内框”。 当然框的类型也是可以display属性改变的。
有些特殊情况,即使没有显式定义,也会创建块级元素。比如把一些文本直接添加到一个块级元素(如div)中,即使没有明确的规定这些文本是段落,他们也会被当做段落对待:
<div>
这是第一段
<p>这是第二段</p>
</div>
这种情况,这个框被称为无名框,因为他不与专门定义的元素相关联。
CSS 定位机制
CSS 有三种基本的定位机制:普通流、浮动和绝对定位。
除非专门指定,否则所有框都在普通流中定位。也就是说,普通流中的元素的位置由元素在 (X)HTML 中的位置决定。
块级框从上到下一个接一个地排列,框之间的垂直距离是由框的垂直外边距计算出来。
行内框在一行中水平布置。可以使用水平内边距、边框和外边距调整它们的间距。但是,垂直内边距、边框和外边距不影响行内框的高度。由一行形成的水平框称为****行框(Line Box),行框的高度总是足以容纳它包含的所有行内框。不过,设置行高可以增加这个框的高度。
二、 CSS中的定位属性
2.1 position 属性
把元素放置到一个静态的、相对的、绝对的、或固定的位置中。
- position属性值
(1) static
元素框正常生成。块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其父元素中。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>静态定位</title>
<style type="text/css">
#div1{
width: 200px;
height: 200px;
background-color: darkmagenta;
display: inline-block;
position: static;
}
#div2{
width: 200px;
height: 200px;
background-color: #8A2BE2;
display: inline-block;
position: static;
}
</style>
</head>
<body>
<div id="div1">
</div>
<div id="div2">
</div>
</body>
</html>
(2) relative
元素框偏移某个距离。元素仍保持其未定位前的形状,它原本所占的空间仍保留。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>相对定位</title>
<style type="text/css">
#div1{
width: 200px;
height: 200px;
background-color: darkmagenta;
display: inline-block;
position: static;
top: 100px;
left: 100px;
}
#div2{
width: 200px;
height: 200px;
background-color: #8A2BE2;
display: inline-block;
position: relative;
top: 100px;
right: 100px;
}
</style>
</head>
<body>
<div id="div1">
</div>
<div id="div2">
</div>
</body>
</html>
(3) absolute
元素框从文档流完全删除,并相对于其包含块定位。包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>绝对定位</title>
<style type="text/css">
#father{
background-color: steelblue;
width: 500px;
height: 400px;
/*水平居中效果*/
margin: 50px auto;
/*定位方式:相对定位*/
position: relative;
}
#child1{
background-color: red;
width: 100px;
height: 100px;
text-align: center;
/*定位方式:绝对定位*/
position: absolute;
top: 50px;
left: 100px;
}
#child2{
background-color: blue;
width: 100px;
height: 100px;
text-align: center;
/*定位方式:绝对定位*/
position: absolute;
top: 200px;
left: 100px;
}
#child3{
background-color: blueviolet;
width: 100px;
height: 100px;
text-align: center;
/*定位方式:绝对定位*/
position: absolute;
top: 200px;
left: 250px;
}
</style>
</head>
<body>
<div id="father">
<div id="child1">
</div>
<div id="child2">
</div>
<div id="child3">
</div>
</div>
</body>
</html>
(3) fixed
元素框的表现类似于将 position 设置为 absolute,不过其包含块是视窗本身。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>固定定位</title>
<style type="text/css">
body{
background-color: deepskyblue;
margin: 0px;
}
#topBar{
width: 100%;
background-color: black;
height: 50px;
opacity: .5;
/*相对定位*/
position: fixed;
z-index: 3;
}
#content{
background-color: red;
margin: 0px auto;
width: 400px;
height: 900px;
opacity: .9;
/*相对定位*/
position: relative;
top: 40px;
}
</style>
</head>
<body>
<div id="topBar">
</div>
<div id="content">
</div>
</body>
</html>
2.2 设置边缘距离的属性
- top属性
- right属性
- bottom属性
- left属性
规定元素的边缘。上述属性定义了一个定位元素的上、右、底、左外边距边界与其包含块上、右、底、左边界之间的偏移。
注释:如果 "position" 属性的值为 "static",那么设置 "top" 属性不会产生任何效果。
- 属性值
- auto
- 默认值。通过浏览器计算上边缘的位置。
- %
- 设置以包含元素的百分比计的上边位置。可使用负值。
- length
- 使用 px、cm 等单位设置元素的上边位置。可使用负值。
- inherit
- 规定应该从父元素继承 top 属性的值。
2.3 内容溢出处理(overflow 属性)
overflow 属性规定当内容溢出元素框时发生的事情。
属性值:
- visible
- 默认值。内容不会被修剪,会呈现在元素框之外。
- hidden
- 内容会被修剪,并且其余内容是不可见的。
- scroll
- 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。
- auto
- 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
- inherit
- 规定应该从父元素继承 overflow 属性的值。
<html>
<head>
<style type="text/css">
div
{
background-color:#00FFFF;
width:150px;
height:150px;
overflow: auto
}
</style>
</head>
<body>
<p>如果元素中的内容超出了给定的宽度和高度属性,overflow 属性可以确定是否显示滚动条等行为。</p>
<div>
这个属性定义溢出元素内容区的内容会如何处理。如果值为 scroll,不论是否需要,用户代理都会提供一种滚动机制。因此,有可能即使元素框中可以放下所有内容也会出现滚动条。默认值是 visible。
</div>
</body>
</html>
2.4 裁剪处理(clip 属性)
clip 属性剪裁绝对定位元素。
当一幅图像的尺寸大于包含它的元素时会发生什么呢?"clip" 属性允许您规定一个元素的可见尺寸,这样此元素就会被修剪并显示为这个形状。
属性值:
- shape
- 设置元素的形状。唯一合法的形状值是:rect (top,right,bottom,left)
- auto
- 默认值。不应用任何剪裁。
- inherit
- 规定应该从父元素继承 clip 属性的值。
<html>
<head>
<style type="text/css">
img
{
position:absolute;
clip:rect(0px 50px 200px 0px)
}
</style>
</head>
<body>
<p>clip 属性剪切了一幅图像:</p>
<p><img border="0" src="/i/eg_bookasp.gif" width="120" height="151"></p>
</body>
</html>
2.5 垂直对齐方式(vertical-align 属性)
vertical-align 属性设置元素的垂直对齐方式。
- baseline
- 默认。元素放置在父元素的基线上。
- sub
- 垂直对齐文本的下标。
- super
- 垂直对齐文本的上标
- top
- 把元素的顶端与行中最高元素的顶端对齐
- text-top
- 把元素的顶端与父元素字体的顶端对齐
- middle
- 把此元素放置在父元素的中部。
- bottom
- 把元素的顶端与行中最低的元素的顶端对齐。
- text-bottom
- 把元素的底端与父元素字体的底端对齐。
- length
- %
- 使用 "line-height" 属性的百分比值来排列此元素。允许使用负值。
- inherit
- 规定应该从父元素继承 vertical-align 属性的值。
<html>
<head>
<style type="text/css">
img.top {vertical-align:text-top}
img.bottom {vertical-align:text-bottom}
</style>
</head>
<body>
<p>
这是一幅<img class="top" border="0" src="/i/eg_cute.gif" />位于段落中的图像。
</p>
<p>
这是一幅<img class="bottom" border="0" src="/i/eg_cute.gif" />位于段落中的图像。
</p>
</body>
</html>
2.6 层级关系(z-index 属性)
z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。
属性值:
- auto
- 默认。堆叠顺序与父元素相等。
- number
- 设置元素的堆叠顺序。
- inherit
- 规定应该从父元素继承 z-index 属性的值。
<html>
<head>
<style type="text/css">
img.x
{
position:absolute;
left:0px;
top:0px;
z-index:-1
}
</style>
</head>
<body>
<h1>z-index的测试</h1>
<img class="x" src="/i/eg_mouse.jpg" />
<p>这张图片会在文字的底层</p>
</body>
</html>
网友评论