<div id="g0rjr"></div>
                                                 
                                                首页
                                                外贸B2C模板开发
                                                zencart 开发
                                                Magento开发
                                                经典客户案例
                                                zencart 报价
                                                外贸主机
                                                联系我们
                                                 
                                                 
                                                首页 ::  zencart知识 ::  Zen Cart常见问题 ::  CSS中position属性( absolute | relative | static | fixed )详解
                                                 
                                                CSS中position属性( absolute | relative | static | fixed )详解

                                                  作者: zen cart   |   2015-06-16     阅读次数:1150     关键字:广东zencart模版

                                                CSS中position属性( absolute | relative | static | fixed )详解


                                                我们先来看看CSS3 Api中对position属性的相关定义:

                                                • static:无特殊定位,对象遵循正常文档流。top,right,bottom,left等属性不会被应用。
                                                •  relative:对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置。而其层叠通过z-index属性定义。
                                                •  absolute:对象脱离正常文档流,使用top,right,bottom,left等属性进行绝对定位。而其层叠通过z-index属性定义。
                                                •  fixed:对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。而其层叠通过z-index属性定义。

                                                怎么样,是不是还是很迷糊~~ 没关系,下面就从几个基础概念一一给大家详述:


                                                什么是文档流?

                                                      将窗体自上而下分成一行行, 并在每行中按从左至?#19994;?#39034;序排放元素,?#27425;?#25991;档流。

                                                      只有三种情况会使?#36855;?#32032;脱离文档流,分别是:浮动绝对定位相对定位

                                                 

                                                静态定位(static) :

                                                      static,无特殊定位,它是html元素默认的定?#29615;?#24335;,?#27425;?#20204;不设定元素的position属性时默认的position值就是static,它遵 循正常的文档流对象,对象占用文档空间,该定?#29615;?#24335;下,top、right、bottom、left、z-index等属性是无效的。

                                                 

                                                相对定位(relative) :

                                                      relative定位,又称为相对定位,从字面上来解析,我们就可以看出该属性的主要特性?#21512;?#23545;。但是它相对的又是相对于什么地方而言的呢?#31354;?#20010;是个重点,也是最让我迷糊的一个地方,现在让我们来做个测试,我想大家都会明白?#27169;?/p>

                                                (1) 初始未定位

                                                1. /******初始*********/  
                                                2. <style type="text/css">  
                                                3.     #first { width: 200px; height: 100px; border: 1px solid red; }  
                                                4.     #second{ width: 200px; height: 100px; border: 1px solid blue;}  
                                                5. </style>  
                                                6. <body>  
                                                7.    <div id="first"> first</div>  
                                                8.    <div id="second">second</div>  
                                                9. </body>  
                                                 初始原图:

                                                (2) 我们修改first元素的position属性:

                                                1. <style type="text/css">  
                                                2.     #first{ width: 200px; height: 100px; border: 1px solid red; position: relative; top: 20px; left: 20px;} /*add position*/  
                                                3.     #second{width: 200px; height: 100px; border: 1px solid blue;}  
                                                4. </style>  
                                                  相对偏移20px后:

                                                -- >> 虚线是初始的位置空间

                                                      现在看明白了吧,相对定位相对的是它原本在文档流中的位置而进行的偏移,而我们也知道relative定位也是遵循正常的文档流,它没有脱离文档流,但是它的top/left/right/bottom属性是生效?#27169;?#21487;以说它是static到absoult的一个中间过渡属性,最重要的是它还占有文档空间,而且占据的文档空间不会随 top / right / left / bottom 等属性的偏移而发生变动,也就是说它后面的元素是依据虚线位置( top / left / right / bottom 等属性生效之前)进行的定位,这点一定要理解。

                                                     那好,我们知道了top / right / left / bottom 属性是不会对relative定位的元素所占据的文档空间产生偏移,那么margin / padding会让该文档空间产生偏移吗?#30475;?#26696;是肯定?#27169;?#25105;们一起来做个试验吧:

                                                (3)   添加margin属性:

                                                1. <style type="text/css">  
                                                2.     #first{width: 200px;height: 100px;border: 1px solid red;position: relative;top: 20px;left: 20px;margin: 20px;} /* add margin*/  
                                                3.     #second{width: 200px;height:100px;border: 1px solid blue;}  
                                                4. </style>  
                                                  设置margin:20px后:

                                                 

                                                     对比一下,是不是就很清晰了,我们先将first元素外边距设为20px,那么second元素就得向下偏移40px,所以margin是占据文档空间!同理,大家可以自己动手测下padding的效果吧!

                                                 

                                                绝对定位(absoulte) :

                                                       absoulte定位,也称为绝对定位,虽然它的名字号曰“绝对”,但是它的功能却更接近于"相对"一词,为什么这么讲呢?原来,使用absoult定位 的元素脱离文档流后,就只能根据祖先类元素(父类以上)进行定位,而这个祖先类还必须是以postion非static方式定位?#27169;? 举个例子,a元素使用absoulte定位,它会从父类开始?#31227;穡?#23547;找以position非static方式定位的祖先类元素(注意,一定要是直系祖先才 算哦~),直到<html>标签为止,这里还需要注意的是,relative和static方式在最外层时是以<body>标签为定位原点?#27169;?#32780;absoulte方式在无父级是position非static定位时是以<html>作为原点定位。<html>和<body>元素相差9px左右。我们来看下效果:

                                                (4) 添加absoulte属性:

                                                1. <html>  
                                                2. <style type="text/css">  
                                                3.     html{border:1px dashed green;}  
                                                4.     body{border:1px dashed  purple;}  
                                                5.     #first{ width: 200px;height: 100px;border: 1px solid red;position: relative;}  
                                                6.     #second{ width: 200px;height: 100px;border: 1px solid blue;position: absolute;top :0;left : 0;}  
                                                7. </style>  
                                                8. <body>  
                                                9.   <div id="first">relative</div>  
                                                10.   <div id="second">absoult</div>  
                                                11. </body>  
                                                12. </html>  
                                                效果图:

                                                 

                                                        哈哈,看了上面的代码后,细心的朋友肯定要问了,为什么absoulte定位要加 top:0; left:0; 属性,这不是多此一举呢?

                                                       其实加上这两个属性是完全必要?#27169;?#22240;为我们如果使用 absoulte或fixed定位的话,必须指定 left、right、 top、 bottom 属性中的至少一个,否则left/right/top/bottom属性会使用它们的默?#29616;?auto ,这将导致对象遵从正常的HTML布?#27490;?#21017;,在前一个对象之后立即被?#23454;?/span>简单讲就是都变成relative,会占用文档空间,这点非常重要,很多人使用absolute定位后发?#32622;?#26377;脱离文档流就是这个原因,这里要特别注意~~~

                                                 

                                                少了left/right/top/bottom属性不行,那如果我们多设了呢?例如,我们同时设置了top和bottom的属性值,那元素又该往哪偏移好呢?#32771;?#20303;下面的规则:

                                                • 如果top和bottom一同存在的话,那么只有top生效。
                                                • 如果left和right一同存在的话,那么只有left生效。

                                                ?#28909;籥bsoulte是根据祖先类中的position非static元素进行定位?#27169;?#37027;么祖先类中的margin/padding会不会对position产生影响呢?看个例子先:

                                                (5) 在absoulte定位中添加margin / padding属性:

                                                1. #first{width: 200px;height: 100px;border: 1px solid red;position: relative;margin:40px;padding:40px;}  
                                                2. #second{width: 200px;height:100px;border: 1px solid blue;position: absolute;top:20px;left:20px;}  
                                                3.      
                                                4. <div id="first">first  
                                                5.     <div id="second">second</div>  
                                                6. </div>  
                                                效果图:

                                                             看懂了,祖先类的margin会让子类的absoulte跟着偏移,而padding却不会让子类的absoulte发生偏移。总结一下,就是absoulte是根据祖先类的border进行的定位。

                                                Note : 绝对(absolute)定位对象在可视区域之外会导致滚动条出现。而放置相对(relative)定位对象在可视区域之外,滚动条不会出现。

                                                 

                                                固定定位(fixed):

                                                       fixed定位,又称为固定定位,它和absoult定位一样,都脱离了文档流,并且能够根据top、right、left、bottom属性进行定位,但不同的是fixed是根据窗口为原点进行偏移定位?#27169;?#20063;就是说它不会根据滚动条的滚动而进行偏移。

                                                 

                                                z-index属性:

                                                       z-index,又称为对象的层叠顺序,它用一个整数来定义堆叠的层次,整数值越大,则被层叠在越上面,当然这是指同?#23545;?#32032;间的堆叠,如果两个对象的此属 性具有同样的值,那么将依据它们在HTML文档中流的顺序层叠,写在后面的将会覆盖前面的。需要注意的是,父子关系是无法用z-index来设定上下关系 ?#27169;?#19968;定是子?#23545;?#19978;父?#23545;?#19979;。

                                                Note:使用static 定位或无position定位的元素z-index属性是无效的。

                                                 






                                                Zen Cart常见问题的相关新闻


                                                更早的新闻

                                                 
                                                 
                                                ?
                                                外贸网站模板??|??关于我们??|??核心技术??|??人才招聘??|??帮助中心??|??zencart下载??|??付款方式??|??公司地图??|??联系我们


                                                粤ICP备15004589号-1
                                                深圳市迅捷网络技术有限公司 Copyright ? 2004-2016 All Rights Reserved. 版权所有
                                                总公司:深圳市龙华新区民治?#20540;?#20154;民路中航天逸大厦A3栋15层 ? ? 网址:www.etlq.icu  电话:0755-28107785
                                                分公司:惠州市惠城区港惠新天地商业大厦2B栋19层 网址:www.0752web.com 电话:0752-2695554  2065565
                                                全国服务热线:137 14307967   售后服务热线:159 19478387 客服QQ: 1512144 408079953 MSN:[email protected]
                                                幸运飞艇计划软件免费

                                                                                              <div id="g0rjr"></div>

                                                                                                                                            <div id="g0rjr"></div>
                                                                                                                                            皇家社会又叫什么名字 皇马瓦伦西亚欧冠 陕西11选5投注 丧尸来袭电影在线观看 篮球巨星游戏网站 复方斑蝥胶囊陕西方舟 老船长游戏 广东彩票兑奖时间 bet365体育在线开户 0809火箭76人视频 尤文图斯vs弗罗西诺内集锦 09年尼克斯vs小牛 幸运盖尔电子游戏 福建快3和值尾遗漏值尾走势图 bbin电子平台 合肥麻将技巧