CSS之position用法测试归纳
来源:互联网 发布:淘宝店铺三个月未经营 编辑:程序博客网 时间:2024/06/06 15:41
前言
在工作中经常遇到一些元素的定位问题,很多对css不熟悉的朋友甚是头痛,我整理了自己对position用法的理解,并通过demo演示让大家有个较好的理解,也顺带巩固一下自己对position的认识。
简介
关于position的介绍请参考:
w3c菜鸟教程 :http://www.runoob.com/css/css-positioning.html
或 W3CSchool的官网:http://www.w3school.com.cn/css/css_positioning.asp
这里我简单介绍position的用法,建议先阅读W3C的内容了解基本概念(我个人感觉W3C对position这边的讲解不够详细,不够形象,所以我自己又做了一些测试)。
position属性有四个可选值,分别为:fixed 、absolute、relative、static
下面我开始通过不同的demo来演示position的一些特性及用法。
position中不同属性的定位规律
元素的叠放次序
下面两段代码样式完全一样,只是div的次序不一样,比较一下它们的叠放次序;
demo001.html
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title></title> <script src="" type="text/javascript"></script> <style> .s-div { width: 200px; height: 100px; } .rel-1 { border: 1px solid red; background-color: red; position: relative; top: 10px; left: 10px; } .abs-1 { border: 1px solid yellow; background-color: yellow; position: absolute; top: 50px; left: 50px; } .fix-1 { border: 1px solid blue; background-color: blue; position: fixed; top: 100px; left: 100px; } </style></head><body><!--注意对比这里--><div class="s-div rel-1"></div><div class="s-div abs-1"></div><div class="s-div fix-1"></div></body></html>
demo002.html
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title></title> <script src="" type="text/javascript"></script> <style> .s-div { width: 200px; height: 100px; } .rel-1 { border: 1px solid red; background-color: red; position: relative; top: 10px; left: 10px; } .abs-1 { border: 1px solid yellow; background-color: yellow; position: absolute; top: 50px; left: 50px; } .fix-1 { border: 1px solid blue; background-color: blue; position: fixed; top: 100px; left: 100px; } </style></head><body><!--注意对比这里--><div class="s-div fix-1"></div><div class="s-div abs-1"></div><div class="s-div rel-1"></div></body></html>
这是上面两段代码的效果对比展示:
由对比图可见,当使用了position定位时,不会影响文档的叠放次序,所有元素将按照代码编写时的先后顺序依次往上层叠加(即先写的元素在后写的元素下层,后写的可以覆盖先写出来的元素)
元素相对父容器的定位方式
当三个元素被赋予不同的position值定位时,展示出不同的效果。
先看一段代码:
父容器没有添加position属性
demo003.html
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title></title> <script src="" type="text/javascript"></script> <style> .s-div { width: 200px; height: 100px; } .rel-1 { border: 1px solid red; background-color: red; position: relative; top: 10px; left: 10px; } .abs-1 { border: 1px solid yellow; background-color: yellow; position: absolute; top: 50px; left: 50px; } .fix-1 { border: 1px solid blue; background-color: blue; position: fixed; top: 100px; left: 100px; } .p-div { width: 600px; height: 1200px; border: 1px solid green; } </style></head><body><div class="p-div"> <div class="s-div fix-1"></div> <div class="s-div abs-1"></div> <div class="s-div rel-1"></div></div></body></html>
移动父元素对比效果:
由上图可知,当移动父元素时:
relative元素会跟随父元素移动;
absolute的元素不会随着父元素移动,但会随着滚动条的滚动向上移动;
fixed的元素始终与文档的左上角顶点保持相对静止,不会随着父元素的移动而移动,也不会随着滚动条的滚动而移动;(是不是想到了很多网站右下角的广告?滚动条怎么滚动,它都在那)
父容器添加了absolute属性
demo004.html
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title></title> <script src="" type="text/javascript"></script> <style> .rel-1 { width: 100px; height: 100px; border: 1px solid red; background-color: red; position: relative; top: 10px; left: 10px; } .abs-1 { width: 150px; height: 100px; border: 1px solid yellow; background-color: yellow; position: absolute; top: 50px; left: 50px; } .fix-1 { width: 200px; height: 100px; border: 1px solid blue; background-color: blue; position: fixed; top: 100px; left: 100px; } .p-div-2 { border: 1px solid green; position: absolute; left: 0; top: 0; } </style></head><body><div class="p-div p-div-2"> <div class="s-div fix-1"></div> <div class="s-div abs-1"></div> <div class="s-div rel-1"></div></div></body></html>
父容器大小变化:
当父容器添加了position属性后,父容器(div)变成了行内元素(不占一整行),且大小为relative元素的大小+自身边框大小,即父元素大小再在受absolute、fixed元素的影响。
父容器位置移动:
当父容器移动时,relative元素和absolute元素均跟着父元素一起移动,fixed元素始终未改变位置。
父容器添加了relative属性时
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title></title> <script src="" type="text/javascript"></script> <style> .rel-1 { width: 100px; height: 100px; border: 1px solid red; background-color: red; position: relative; top: 10px; left: 10px; } .abs-1 { width: 150px; height: 100px; border: 1px solid yellow; background-color: yellow; position: absolute; top: 50px; left: 50px; } .fix-1 { width: 200px; height: 100px; border: 1px solid blue; background-color: blue; position: fixed; top: 100px; left: 100px; } .p-div-2 { border: 1px solid green; position: relative; left: 0; top: 0; } </style></head><body><div class="p-div p-div-2"> <div class="s-div fix-1"></div> <div class="s-div abs-1"></div> <div class="s-div rel-1"></div></div></body></html>
父容器大小变化:
当父容器添加了relative属性后,父容器(div)仍是块元素(占一整行,但宽度不再是100%,而是100%减去左边缩进的距离剩下的宽度);
父容器位置移动:
当父容器移动时,relative元素和absolute元素均跟着父元素一起移动,fixed元素始终未改变位置。
父容器添加了fixed属性时
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title></title> <script src="" type="text/javascript"></script> <style> .rel-1 { width: 100px; height: 100px; border: 1px solid red; background-color: red; position: relative; top: 10px; left: 10px; } .abs-1 { width: 150px; height: 100px; border: 1px solid yellow; background-color: yellow; position: absolute; top: 50px; left: 50px; } .fix-1 { width: 200px; height: 100px; border: 1px solid blue; background-color: blue; position: fixed; top: 100px; left: 100px; } .p-div-2 { border: 1px solid green; position: fixed; left: 0; top: 0; } </style></head><body style="height: 1200px"><div class="p-div p-div-2"> <div class="s-div fix-1"></div> <div class="s-div abs-1"></div> <div class="s-div rel-1"></div></div></body></html>
当父容器添加了fixed属性时,其效果与absolute类似:
宽度变成了relative子元素的宽度(不受absolute、fixed元素大小影响);
当父容器位置移动时,relative及absolute元素跟随移动,fixed元素不跟随移动。
此外,fixed父元素还多了一个特点:其中所有子元素均不随滚动条滚动而移动
元素相对兄弟元素的定位方式
元素不增加position属性
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title></title> <script src="" type="text/javascript"></script> <style> .p-div{ width: 800px; } .s-div{ width: 300px; height: 100px; } .s-div-1{ background-color: #0089d1; } .s-div-2{ background-color: #5522dd; } .s-div-3{ background-color: #dd5522; } </style></head><body style="height: 1200px"><div class="p-div"> <div class="s-div s-div-1"></div> <div class="s-div s-div-2"></div> <div class="s-div s-div-3"></div></div></body></html>
由图可见,当不增加position属性时,若修改了div元素的margin值,该元素会覆盖先前的元素,且后续元素会跟随该元素移动,且父容器大小也会跟着所有元素的总大小而变化:
修改margin-top值,后续元素会跟随该元素上下移动,父容器高度变小;
修改margin-left值,后续浮动元素(与该元素在同一行的元素)会跟随该元素左右移动,父容器宽度固定,元素宽度总和大于父容器大小时,元素自动换行(这里不清楚请转float属性的介绍);
由于行内元素不能指定宽度,这里暂不介绍;
元素增加relative属性
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title></title> <script src="" type="text/javascript"></script> <style> .p-div{ width: 800px; } .s-div{ width: 300px; height: 100px; } .s-div-1{ background-color: #0089d1; } .s-div-2{ background-color: #5522dd; position: relative; top: 0; left: 0; } .s-div-3{ background-color: #dd5522; } </style></head><body style="height: 1200px"><div class="p-div"> <div class="s-div s-div-1"></div> <div class="s-div s-div-2"></div> <div class="s-div s-div-3"></div></div></body></html>
当元素增加了relative属性后,修改元素的margin值时,同上一例类似:
该元素可覆盖先前元素,后续元素跟随该元素移动;
由于增加了relative属性,我们可以修改top、left等属性的值,见下图:
可发现,当修改了top值时,该元素会覆盖先前的元素,后续元素也不会跟随该元素上下移动;
当后续元素和该元素在同一行时,修改left值,后续元素也不会跟随该元素左右移动;
元素增加absolute属性
由前面的absolute属性测试,我们这里可以猜测:
元素增加了absolute属性后不会对兄弟元素及父容器产生影响。
接下来看代码及效果:
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title></title> <script src="" type="text/javascript"></script> <style> .p-div{ width: 1000px; border: 1px solid green; } .s-div{ width: 300px; height: 100px; /*float: left;*/ } .s-div-1{ background-color: #0089d1; } .s-div-2{ background-color: #5522dd; position: absolute; top: 0; left: 0; } .s-div-3{ background-color: #dd5522; } </style></head><body style="height: 1200px"><div class="p-div"> <div class="s-div s-div-1"></div> <div class="s-div s-div-2"></div> <div class="s-div s-div-3"></div></div></body></html>
由图可知,修改了margin-top和top值均没有对父容器和后续元素的位置和大小产生影响,可见我们的猜想是正确的。
剩下的还有fixed 和static我就不一一尝试了,根据前面的测试也大致可以猜测结果,而且我的测试结果也如我所料。
具体想知道的就动手试试,这样印象更深刻。
关于float用法
float的用法,我感觉W3C的说明足够用,我的理解感觉也不会比它好很多,所以这里就只贴一些W3C的链接,不做赘述。
W3C官网:http://www.w3school.com.cn/css/css_positioning_floating.asp
W3C菜鸟:http://www.runoob.com/css/css-float.html
结束语
至此demo的演示及对比结束,这里主要介绍了position中relative、absolute、fixed的用法,static属性我很少用到,这里暂不介绍(W3C文档中static :元素框正常生成。块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其父元素中。)
关于position属性可能还有其它特性,我暂时还没发现,欢迎补充,且本文为笔者个人理解,如有错误,还望指出。
- CSS之position用法测试归纳
- 浅谈 css 之 position用法
- CSS position 属性用法
- css position用法
- css中的position用法
- CSS background-position用法
- css 之 position属性
- CSS 之Position详解
- CSS之Position详解
- CSS之Position详解
- CSS之Position详解
- CSS之Position详解
- CSS之Position详解
- Css 之 position 定位
- CSS之Position详解
- CSS之Position详解
- CSS之Position详解
- CSS之Position详解
- 数据清洗小记(10):清洗字典数据把“A1B1C1”翻译成对应中文字段
- HTML--内联元素与块级元素
- Linux中Workqueue机制分析
- Excel实战之JXL解析
- 网络编程
- CSS之position用法测试归纳
- WEB前端学习 Day 1(DIV+盒子模型+CSS文本+实例)
- 第一次开通博客啊,哈哈 发一篇。
- 十六进制中,快速取某位数值
- ScrollView中嵌套ListView的问题
- 10010---SpringMVC ModelAttribute
- *** -[AlwayedDownVC tableView:canEditRowAtIndexPath:]: message sent to deallocated instance 0x17a971
- 机器学习读书笔记(一) 概述
- Excel实战之POI创建