整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

CSS position定位详解

CSS position定位详解

用CSS有普通流、绝对定位和浮动三种基本的定位机制,如果不是专门指定区块的位置都是在普通流中定位,即从上到下一个接一个地排列,位置

由元素在HTML中的位置决定。

静态定位:

文档中默认都是静态定位


相对定位:

使用相对定位的盒子的位置常以标准流的排版方式为基础, 然后使盒子相对于它在原本的标准位置偏移指定的距离。

相对定位的盒子仍在标准流中, 它后面的盒子仍以标准流方式对待它。

使用relative, 即相对定位, 除了将position属性设置为relative之外, 还需要指定一定的偏移量,

水平方向通过left或者right属性来指定, 垂直方向通过top和bottom来指定。

使用相对定位的盒子,会相对于它原本的位置,通过偏移指定的距离,到达新的位置。而该相对定位的盒子则仍然位于标准流中,它对父块没有任何影响。

使用相对定位的盒子不仅对父块没有任何影响,对兄弟盒子也没有任何影响。

简单理解:

它是相对于"原来的自己"进行定位, 相对定位元素它还占用空间, 它的层次会比普通元素要高

相对定位属性它一般都是用于配合绝对定位来使用


相对定位有坑, 所以一般不用于做"压盖"效果。页面中, 效果极小。就两个作用:

1) 微调元素

2) 做绝对定位的参考,子绝父相(配合绝对定位一起使用)

相关属性

可以用left、right来描述盒子右、左的移动;

可以用top、bottom来描述盒子的下、上的移动。


绝对定位:

用绝对定位的盒子以它的"最近"的一个"已经定位"的"祖先元素"为基准进行偏移。如果没有已经定位的祖先元素,那么会以浏览器窗口为基准进行定位。

再有,绝对定位的框从标准流中脱离,这意味着它们对其后的兄弟盒子的定位没有任何影响,其他的盒子就好像这个盒子不存在一样。

简单理解:

绝对定位元素它是相对于"祖先"定位元素(relative、fixed、absolute),如果绝对定位元素它的祖先没有定位元素(static)那么它会以当前的浏览器窗口来进行定位,

绝对定位元素不再占用空间


固定定位:

当position的属性值为fixed,即固定定位。它与绝对定位有些类似,区别主要在于定位的基准不是祖先,而是浏览器窗口或其它显示设备窗口。

也就是当访问者拖动浏览器的窗口滚动条时,固定定位的元素相对于浏览器窗口的位置保持不变。(IE6不支持固定定位)

简单理解:它是以浏览器窗口作为参照标准来进行定位, 固定定位元素它不再占用空间


定位问题:

绝对定位问题:

当我们给一个子元素设置绝对定位,让它在父元素的右下角显示,这个时候

如果父元素的宽和高都为奇数,那么在IE6下我们没有方法让这个子元素压住边框的

这个时候我们建议大家不要使用奇数作为长度


相对定位问题;

IE6下,它认为我们的父元素一定包住它里面的子元素,所以当子元素的宽度和高度大于父元素时,在IE下父元素就会被撑开,

这个时候我们想解决这个问题,我们可以给父元素设置overflow:hidden,但是此时IE6还是不起作用,

所以我们解决方法就是给子元素和父元素都设置相对定位


固定定位的问题:

当我们给一个固定定位的子元素(子元素position:fixed)的父元素添加相对定位或者绝对定位的时候,

它是不会跟着父元素移动的,仍然是相对屏幕的。

实例:导航条

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<title>导航条</title>
<style type="text/css">
*{
    margin:0px;
    padding:0px;
}
ul,li{
    list-style:none;
}
.box{
    width:800px;
    height:30px;
    margin:100px auto;
}
li{
    float:left;
    width:180px;
    text-align: center;
    line-height:28px;
    border:1px solid red;
    margin-left:-1px;
}
li:hover{
    border:1px solid green;
    position:relative; /* 解决边框被压住问题 解释:后面的li压住前面一个li,使用相对定位后,提高了li显示高度 */
}
</style>
</head>
<body>
<div class="box">
<ul>
<li>HTML+CSS</li>
<li>javascript</li>
<li>jquery</li>
<li>php</li>
</ul>
</div>
</body>
</html>

让层水平居中的方法:

让左右边界自动判断之下,即可达成左右位置呈现居中的目的。

#content {
    width: 980px;
    margin-right: auto;
    margin-left: auto;
    position: relative;
}
<div id="content">层内容</div>

若内容区<div>之内还有其他内容<div>,其CSS属性设置就需要加上"定位"position:absolute(或relative),以防firefox等其他浏览器出现错误

<div id="container">
<div id="content">
</div>
</div>
#container {
    background-image: url(images/3-2-1-bg.jpg);
    height: 400px;
    width: 800px;
    position: relative;
    background-repeat: no-repeat;
    margin-right: auto;
    margin-left: auto;
}
#content {
    margin: 75px;
    height: 210px;
    width: 610px;
    padding: 20px;
    border: 1px solid #FFF;
    position: absolute;
}

让层垂直居中的方法:

位(position)

如果,说浮动, 关键在一个 “浮” 字上面, 那么 我们的定位,关键在于一个 “位” 上。

PS: 定位是我们CSS算是数一数二难点的了,但是,你务必要学好它,我们CSS离不开定位,特别是后面的js特效,天天和定位打交道。不要抵触它,反而要爱上它,它可以让我们工作更加轻松哦!

为什么要用定位?

那么定位,最长运用的场景再那里呢? 来看几幅图片,你一定会有感悟!

第一幅图, 小黄色块可以再图片上移动:

第二幅图, 左右箭头压住图片:

第三幅图, hot 再盒子外面多出一块,更加突出:

以上三个小地方,如果用标准流或者浮动,实现会比较复杂或者难以实现,此时我们用定位来做,just soso!

元素的定位属性

元素的定位属性主要包括定位模式和边偏移两部分。

1、边偏移

也就说,以后定位要和这边偏移搭配使用了, 比如 top: 100px; left: 30px; 等等

2、定位模式(定位的分类)

在CSS中,position属性用于定义元素的定位模式,其基本语法格式如下:

选择器{position:属性值;}

position属性的常用值

静态定位(static)

静态定位是所有元素的默认定位方式,当position属性的取值为static时,可以将元素定位于静态位置。 所谓静态位置就是各个元素在HTML文档流中默认的位置。

上面的话翻译成白话: 就是网页中所有元素都默认的是静态定位哦! 其实就是标准流的特性。

在静态定位状态下,无法通过边偏移属性(top、bottom、left或right)来改变元素的位置。

PS: 静态定位其实没啥可说的。

相对定位relative(自恋型)

小笑话: 
刚刚看到一个超级超级帅的帅哥,看得我都忍不住想和他搞基了。世间怎会有如此之完美的男人。我和他就这样一动不动的对视着,就仿佛一见钟情。时间也在这一瞬间停止了。直到我的手麻了。才恋恋不舍的放下镜子。。。。

相对定位是将元素相对于它在标准流中的位置进行定位,当position属性的取值为relative时,可以将元素定位于相对位置。

对元素设置相对定位后,可以通过边偏移属性改变元素的位置,但是它在文档流中的位置仍然保留。如下图所示,即是一个相对定位的效果展示:

注意:

  1. 相对定位最重要的一点是,它可以通过边偏移移动位置,但是原来的所占的位置,继续占有。
  2. 其次,每次移动的位置,是以自己的左上角为基点移动(相对于自己来移动位置)

就是说,相对定位的盒子仍在标准流中,它后面的盒子仍以标准流方式对待它。(相对定位不脱标)

如果说浮动的主要目的是 让多个块级元素一行显示,那么定位的主要价值就是 移动位置, 让盒子到我们想要的位置上去。

绝对定位absolute (拼爹型)

小笑话:
吃早饭时,老婆往儿子碗里放了两个煎蛋,儿子全给了我,还一本正经地说:“爸爸,多吃点,男人养家不容易。” <br/>
我一阵感动,刚想夸他两句。 
儿子接着说:“以后全靠你让我拼爹了!”

 [注意] 如果文档可滚动,绝对定位元素会随着它滚动,因为元素最终会相对于正常流的某一部分定位。

当position属性的取值为absolute时,可以将元素的定位模式设置为绝对定位。

注意: 绝对定位最重要的一点是,它可以通过边偏移移动位置,但是它完全脱标,完全不占位置。

父级没有定位

若所有父元素都没有定位,以浏览器为准对齐(document文档)。

父级有定位

绝对定位是将元素依据最近的已经定位(绝对、固定或相对定位)的父元素(祖先)进行定位。

子绝父相

这个“子绝父相”太重要了,是我们学习定位的口诀,时时刻刻记住的。

这句话的意思是 子级是绝对定位的话, 父级要用相对定位。

首先, 我们说下, 绝对定位是将元素依据最近的已经定位绝对、固定或相对定位)的父元素(祖先)进行定位。

就是说, 子级是绝对定位,父亲只要是定位即可(不管父亲是绝对定位还是相对定位,甚至是固定定位都可以),就是说, 子绝父绝,子绝父相都是正确的。

但是,在我们网页布局的时候, 最常说的 子绝父相是怎么来的呢? 请看如下图:

所以,我们可以得出如下结论:

因为子级是绝对定位,不会占有位置, 可以放到父盒子里面的任何一个地方。

父盒子布局时,需要占有位置,因此父亲只能是 相对定位.

这就是子绝父相的由来。

绝对定位的盒子水平/垂直居中

普通的盒子是左右margin 改为 auto就可, 但是对于绝对定位就无效了

定位的盒子也可以水平或者垂直居中,有一个算法。

  1. 首先left 50% 父盒子的一半大小
  2. 然后走自己外边距负的一半值就可以了 margin-left。
  3. ?

固定定位fixed(认死理型)

固定定位是绝对定位的一种特殊形式,类似于 正方形是一个特殊的 矩形。它以浏览器窗口作为参照物来定义网页元素。当position属性的取值为fixed时,即可将元素的定位模式设置为固定定位。

当对元素设置固定定位后,它将脱离标准文档流的控制,始终依据浏览器窗口来定义自己的显示位置。不管浏览器滚动条如何滚动也不管浏览器窗口的大小如何变化,该元素都会始终显示在浏览器窗口的固定位置。

固定定位有两点:

  1. 固定定位的元素跟父亲没有任何关系,只认浏览器。
  2. 固定定位完全脱标,不占有位置,不随着滚动条滚动。

记忆法: 就类似于孙猴子, 无父无母,好不容易找到一个可靠的师傅(浏览器),就听的师傅的,别的都不听。

ie6等低版本浏览器不支持固定定位。

叠放次序(z-index)

当对多个元素同时设置定位时,定位元素之间有可能会发生重叠。

在CSS中,要想调整重叠定位元素的堆叠顺序,可以对定位元素应用z-index层叠等级属性,其取值可为正整数、负整数和0。

比如: z-index: 2;

注意:

  1. z-index的默认属性值是0,取值越大,定位元素在层叠元素中越居上。
  2. 如果取值相同,则根据书写顺序,后来居上。
  3. 后面数字一定不能加单位。
  4. 只有相对定位,绝对定位,固定定位有此属性,其余标准流,浮动,静态定位都无此属性,亦不可指定此属性。

四种定位总结

家好,我是IT共享者,人称皮皮。这篇文章我们来讲讲CSS的文本样式。

一、文本颜色Color

颜色属性被用来设置文字的颜色。

颜色是通过CSS最经常的指定:

  • 十六进制值 - 如"#FF0000"。
  • 一个RGB值 - "RGB(255,0,0)"。
  • 颜色的名称 - 如"红"。

一个网页的文本颜色是指在主体内的选择:

<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=640, user-scalable=no">
        <title>项目</title>
        <style>
            body {
                color: blue;
            }


            h1 {
                color: #00ff00;
            }


            h2 {
                color: rgb(255, 0, 0);
            }
</style>
    </head>


    <body>
        <h2>hello world</h2>
        <h1>welcome to CaoZhou</h1>
    </body>


</html>

注:对于W3C标准的CSS:如果你定义了颜色属性,你还必须定义背景色属性。


二、属性

1. text-align 文本的对齐方式

文本排列属性是用来设置文本的水平对齐方式。

文本可居中或对齐到左或右,两端对齐。

当text-align设置为"justify",每一行被展开为宽度相等,左,右外边距是对齐(如杂志和报纸)。

<!doctype html>
<html lang="en">


    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            h1 {
                text-align: center;
            }


            p.date {
                text-align: right;
            }


            p.main {
                text-align: justify;
            }
</style>
    </head>


    <body>


        <p class="date">2015 年 3 月 14 号</p>
        <p class="main"> 从前有个书生,和未婚妻约好在某年某月某日结婚。到那一天,未婚妻却嫁给了别人。书生受此打击, 一病不起。  这时,路过一游方僧人,从怀里摸出一面镜子叫书生看。书生看到茫茫大海,一名遇害的女子一丝不挂地躺在海滩上。路过一人, 看一眼,摇摇头,走了。又路过一人,将衣服脱下,给女尸盖上,走了。再路过一人,过去,挖个坑,小心翼翼把尸体掩埋了。  僧人解释道, 那具海滩上的女尸,就是你未婚妻的前世。你是第二个路过的人,曾给过他一件衣服。她今生和你相恋,只为还你一个情。但是她最终要报答一生一世的人,是最后那个把她掩埋的人,那人就是他现在的丈夫。书生大悟,病愈。


        </p>
        <p><b>注意:</b> 重置浏览器窗口大小查看 "justify" 是如何工作的。</p>
    </body>


</html>

2. text-decoration文本修饰

text-decoration 属性用来设置或删除文本的装饰。

从设计的角度看 text-decoration属性主要是用来删除链接的下划线:

<!doctype html>
<html lang="en">


    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            .none {}


            .del {
                text-decoration: none;
            }
</style>
    </head>


    <body>
        <p>原来的样子</p>
        <a href="#" class="none">wwwwwwwwwwwwwwwwww</a>
        <p>去掉下划线</p>
        <a href="#" class="del">wwwwwwwwwwwwwwwwwwwww</a>
    </body>


</html>

也可以这样装饰文字:

<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=640, user-scalable=no">
        <title>项目</title>
        <style>
            h1 {
                text-decoration: overline;
            }


            h2 {
                text-decoration: line-through;
            }


            h3 {
                text-decoration: underline;
            }
</style>
    </head>


    <body>
        <h1>This is heading 1</h1>
        <h2>This is heading 2</h2>
        <h3>This is heading 3</h3>
    </body>


</html>

注:不建议强调指出不是链接的文本,因为这常常混淆用户。


3. text-transform文本转换

text-transform文本转换属性是用来指定在一个文本中的大写和小写字母。

  • uppercase:转换为全部大写。
  • lowercase:转换为全部小写。
  • capitalize :每个单词的首字母大写。
<!DOCTYPE html>
<html>


    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=640, user-scalable=no">
        <title>项目</title>
        <style>
            p.uppercase {
                text-transform: uppercase;
            }


            p.lowercase {
                text-transform: lowercase;
            }


            p.capitalize {
                text-transform: capitalize;
            }
</style>
    </head>


    <body>
        <p class="uppercase">This is some text.</p>
        <p class="lowercase">This is some text.</p>
        <p class="capitalize">This is some text.</p>
    </body>


</html>

4. text-indent文本缩进

text-indent文本缩进属性是用来指定文本的第一行的缩进。

p {text-indent:50px;}

5. letter-spacing 设置字符间距

增加或减少字符之间的空间。

<style>
     h1 {
       letter-spacing:2px;
}
      h2 {
        letter-spacing:-3px;
}
</style>

6. line-height设置行高

指定在一个段落中行之间的空间。

<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=640, user-scalable=no">
        <title>项目</title>
        <style>
            p.small {
                line-height: 70%;
            }


            p.big {
                line-height: 200%;
            }
</style>
    </head>


    <body>
        <p>
            This is a paragraph with a standard line-height.<br> This is a paragraph with a standard line-height.<br> The default line height in most browsers is about 110% to 120%.<br>
        </p>


        <p class="small">
            This is a paragraph with a smaller line-height.<br> This is a paragraph with a smaller line-height.<br> This is a paragraph with a smaller line-height.<br> This is a paragraph with a smaller line-height.<br>
        </p>


        <p class="big">
            This is a paragraph with a bigger line-height.<br> This is a paragraph with a bigger line-height.<br> This is a paragraph with a bigger line-height.<br> This is a paragraph with a bigger line-height.<br>
        </p>


    </body>


</html>

7. word-spacing 设置字间距

增加一个段落中的单词之间的空白空间。

<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=640, user-scalable=no">
        <title>项目</title>
        <style type="text/css">
            p {
                word-spacing: 30px;
            }
</style>
    </head>


    <body>


        <p>
            This is some text. This is some text.
        </p>


    </body>


</html>

8. vertical-align 设置元垂直居中

设置文本的垂直对齐图像。

<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=640, user-scalable=no">
        <title>项目</title>
        <style>
            img{
                width: 200px;
                height: 100px;
            }
            img.top {
                vertical-align: text-top;


            }


            img.bottom {
                vertical-align: text-bottom;


            }
</style>
    </head>


    <body>
        <p>An <img src="img/logo.png"  /> image with a default alignment.</p>
        <p>An <img class="top" src="img/logo.png" /> image with a text-top alignment.</p>
        <p>An <img class="bottom" src="img/logo.png" /> image with a text-bottom alignment.</p>
    </body>


</html>

9. text-shadow 设置文本阴影

设置文本阴影。

<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=640, user-scalable=no">
        <title>项目</title>
        <style>
         h1{
            text-shadow: 2px 2px #FF0000;
     }
</style>
    </head>


    <body>
    <h1>Text-shadow effect</h1>
    </body>


</html>

三、总结

本文主要介绍了CSS文本样式实际应用中应该如何去操作,通过讲解文本中对应的属性去改变文本的表现形式。使用丰富的效果图的展示,能够更直观的看到运行的效果,能够更好的理解。使用Html语言,代码结构更佳的清晰,能够帮助你更好的学习。