CSS—定位


CSS有三种基本的定位机制:普通流、浮动、绝对定位。

除非专门指定,否则所有框都在普通流中定位。也就是说,普通流中的元素的位置由元素在 (X)HTML 中的位置决定。


没有任何定位修饰效果
  • 块级元素从上到下一个接一个地排列,元素之间的垂直距离是由元素的垂直外边距计算出来。
  • 行内元素在一行中水平布置。如图中P标签内的span,超链接,图片。

  • <h2>行内元素的布局</h2>
    可以使用水平内边距padding-left padding-right、边框border-left border-right和外边距margin-left margin-right调整它们的间距。
    但是,垂直(top bottom方向)内边距、边框和外边距不影响行内框的高度。这句话的意思是,在上图中如果定义span垂直方向上的边距,不会因此而扩充P的高度。还要铭记一点,行内元素没有高度。
    span{
    background: blue;
    padding-left: 20px;
    padding-right: 20px;
    border: 10px solid yellow;
    margin-right: 20px;
    margin-left: 20px;
    }
    <div>
    <p><span>hi</span>hello</p>
    </div>
    左:IE6 右:IE8

    调整水平方向的间距,是可以有效果的。
    IE6出现上边距被隐藏,是因为p在IE6内是没有默认margin-top。所以p的顶部与body的顶部重合,并没有空余的位置供span的上边距展示。
    但是无论怎么样,P的高度也没有因此被扩大。
    再设置一下垂直边距,再加一个pspan,增强一下效果。
    发现第二行的p中的span增大内边距后占据上一行中的span
    <span>
    padding-top: 30px;
    padding-bottom: 20px;
    margin-bottom: 20px;
    margin-top: 20px;
    </span>
效果

不过,设置行高可以增加这个框的高度。
默认情况下,p中的span是继承其父元素的line-height的,但是我们单独设置line-height也会影响p的行高。span{ line-height: 100px;}

效果

  • <h2>块级元素的定位</h2>

  • static
    默认。参照正常的文档流。当未对元素设置定位时,元素的默认的位置,即是按照static定位的。
    div{
    font-family: "微软雅黑";
    color:white;
    font-weight: bold;
    line-height: 100px;
    text-align: center;
    font-size: 30px;
    width: 100px;
    height:100px;
    }
    #d1{
    background: pink;
    }
    #d2{
    background: yellow;
    }
    <div id='d1'>第一</div>
    <div id='d2'>第二</div>

    position:static 默认效果

  • relative
    生成相对定位的元素,相对于其正常位置进行定位。它原本所占的空间仍保留。
    #d2{
    background: yellow;
    position: relative;
    top:30px;
    left: 20px;
    }

    position:relative

    需要注意的是,在定义完位置的属性为relative是,需要为元素指定top、left、right、bottom。上例子中,div2在左面,上面有div1,所以需要为div2设置left、top。
    #d1{
    background: pink;
    position: relative;
    top: 20px;
    left: 20px;
    }
    position:relaitive

    发现div1参照其初始位置的顶部向下移动20px,但是并没有导致div2向下移动。div2由于其在文档流的下面,所以会覆盖div1。
    #d1{
    background: pink;
    position: relative;
    bottom: 50px;
    }
    #d3{
    float: left;
    }
    加了一个浮动后

    虽然div1设置了bottom: 50px;所以空出来50px的位置,但是当增加一个#d3(即那个长的),并被设置为浮动后,发现,他并没有向上浮动挨着div1,说明原本所占空间被默认保留。

  • absolute
    元素框从文档流完全删除,并相对于其包含块(父级元素)定位。
    包含块可能是文档中的另一个元素或者是初始包含块。
    #d2{
    height: 120px;
    background: yellow;
    position: absolute;
    top:50px;
    left: 50px;
    }
    <body>//包含块
    <div id='d1'>第一</div>
    <div id='d2'>第二</div>
    <div id='d3'>第三</div>
    </body>

    # d2 position: absolute;

    元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。如图,d3占据了div2的位置,div2相对于父级元素body定位。
    元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。
    span{
    line-height: 2rem;
    background:url(bac1.jpg);
    position: absolute;
    top: 50px;
    left: 50px;
    }
    <div id='d3'><span id="">插入的span</span>第三</div>
    效果

    上图是在ie9及现代浏览器中的结果。即使是内联元素,当position:absolute;之后,也会生成一个块级框。
    有这样的效果,前提是span的父级元素,没有定位,即没有设置position:除了默认,那么span就根据最外层以定位的元素定位,都没有就可以根据根元素html定位。
    注意
    position:absolute时,可以使用clip剪裁clip:rect(top right bottom left);
    分别指当元素定位后,(元素不能动了)
    详细

  • fixed
    元素框的表现类似于将 position 设置为 absolute,不过其包含块是视窗本身。
    img{
    position: fixed;
    width: 40px;
    bottom: 10px;
    left: 10px;
    }

    小花

    图像小花的设置,是相对于视窗本身,观察垂直滚动条已经在最下面了,小花依旧保持在最下面的位置。(IE6以前不兼容)

【z-index】
前提:position:absolute;position:fixed;(默认与relative不可以)
并且:设置完left、right、bottom、top
这样就可以使用z-index了,其默认是0,正值的话会在上面,负值的话会在下面。
#d3{
position: absolute;
left: 0px;
top: 0px;
z-index: -1;
width: 400px;
background: #FFFFA0;
}


效果

欢迎补充与指正哦☺
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 当在这一个页面上实现布局和定位有几种不同的技术。使用哪种技术,很大程序上取决于内容和目标页面,因为有很多技术比别人...
    lulu_c阅读 4,837评论 0 5
  • 在CSS中关于定位的内容是:position:relative | absolute | static | fix...
    feelinghappy618阅读 3,853评论 0 0
  • 各种纯css图标 CSS3可以实现很多漂亮的图形,我收集了32种图形,在下面列出。直接用CSS3画出这些图形,要比...
    剑残阅读 13,304评论 0 8
  • 定位 相对定位 什么是相对定位? 对定位就是相对于自己以前在标准流中的位置来移动 格式: position: re...
    Jackson_yee_阅读 2,732评论 0 0
  • 最近家里那棵发财树总觉得哪里不对劲,很多老叶子上都有牙印,被咬个尖尖掉了,刚发的嫩叶更是刚长几天就莫名的消失......
    张小雏阅读 2,593评论 14 5

友情链接更多精彩内容