position定位
说我们相对定位前,我们先说一下我们使用HBuilder的一个技巧,我们创建一个分组为box的div的途径,如果我们要创建一个class名为box的div,我们可以这样敲div.box + tab。
要是3个或是更多个可以这样div.box$*3 + tab。
好了我们现在说一个问题,我们创建了三个盒子,我们想这样改变盒子的位置:
我们可以把这个动作分为两步。
- 将box2向右移动200px。
- 再将box2向下移动200px。
我们执行第一步给box2设置一个左外边距margin-left:200px
。
成功了,那我们继续第二步。给box2设置一个上外边距margin-top:200px
。
我们发现没能达到预期效果。。。那我们继续调整,我们将box3向上调整200px。
好像可以了奥,但是好像很麻烦,我们只想调整box2的位置,却还要去调整box3,真麻烦。所以我们引出定位!!!
- 我们说下什么是定位:
- 定位指的就是将指定的元素摆放到页面的任意位置。
- 通过定位可以任意的摆放元素。
- 怎么设置定位呢?
- 通过position属性!!
我们查看菜鸟教程的参考手册,查找可能的值:
值 | 描述 |
---|---|
absolute | 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。元素的位置通过 “left”, “top”, “right” 以及 “bottom” 属性进行规定。 |
fixed | 生成固定定位的元素,相对于浏览器窗口进行定位。元素的位置通过 “left”, “top”, “right” 以及 “bottom” 属性进行规定。(固定定位也是决定定位的一种) |
relative | 生成相对定位的元素,相对于其正常位置进行定位。因此,“left:20” 会向元素的 LEFT 位置添加 20 像素。 |
static | 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。 |
sticky | 粘性定位,该定位基于用户滚动的位置。它的行为就像 position:relative; 而当页面滚动超出目标区域时,它的表现就像 position:fixed;,它会固定在目标位置。注意: Internet Explorer, Edge 15 及更早 IE 版本不支持 sticky 定位。 Safari 需要使用 -webkit- prefix (查看以下实例)。 |
inherit | 规定应该从父元素继承 position 属性的值。 |
initial | 设置该属性为默认值,详情查看 CSS initial 关键字。 |
relative相对定位
当元素的position设置为relative时,将元素设置为相对定位。特点:
- 当开启了元素的相对定位以后,而不设置偏移量,元素不会产生任何变化。
- 相对定位是相对与元素在文档流中员原来的位置进行定位。
- 相对定位的元素不会脱离文档流。
- 相对定位会使我们的元素提升一个层级。
- 相对定位不会改变元素的性质,块还是块,内联还是内联。(其实与第三点性质是一回事)
当开启了元素的定位(position属性值是一个非static的值)时,可以通过left、right、top、bottom四个属性来设置元素的偏移量。
- left:元素相对与其定位位置左侧偏移量。
- right:元素相对与其定位位置右侧偏移量。
- top:元素相对与其定位位置上侧偏移量。
- bottom:元素相对与其定位位置下侧偏移量。
现在我们看下使用相对定位来解决我们上面描述的问题。
第四个特点,会提升我们的元素的一个层级什么意思呢?我们来看一下:
通常偏移量只需要使用两个就可以对一个元素进行定位。一般选择水平方向的一个偏移量和垂直方向的一个偏移量来为一个元素进行定位。
我们在设置相对定位的时候只需要想象一个平面坐标系。
absolute绝对定位
当position属性值设置为absolute时,则开启了元素的绝对定位。特点:
-
开启绝对定位会使元素脱离文档流。
-
开启绝对定位以后如果不设置偏移量,则元素的位置不会发生变化。(开启后不设置,浏览器会自动给元素添加默认的偏移量,就是当前位置)
- 绝对定位是相对于离他最近的开启了定位的祖先元素进行定位的。如果所有的祖先元素都没有开启定位,则会相对于浏览器窗口进行定位。(一般情况,开启了子元素的绝对定位都会同时开启父元素的相对定位。)
- 绝对定位会使元素提升一个层级。
- 绝对定位会改变元素性质,内联元素变成块元素,块元素的宽度和高度默认都被内容撑开。
fixed固定定位
当元素的position属性设置为fixed时,则开启了元素的固定定位。固定定位也是一种绝对定位,它的大部分特点都和绝对定位一样。
不同的是:
- 固定定位永远都是相对于浏览器窗口定位的。
- 固定定位会固定在浏览器窗口的某个位置不会随滚动条滚动。eg:广告。(IE6不支持固定定位)
z-index层级问题
我们开启定位后会使元素提升一个层级。
那如果将box1和box3也开启定位,提升到相同层级呢?
我们说,如果定位元素的层级是一样的,则结构上在下面的元素会盖住上面的元素。
那我们能不能再调整层级呢??
可以的!!!
- 通过z-index属性可以用来设置元素的层级。
- 可以为z-index制定一个正整数作为值,该值将会作为当前元素的层级。
- 层级越高,越优先显示。
- z-index对于没有开启position定位的元素没用。
- 父元素的层级再高也不会盖住子元素。(可以理解为父爱比较伟大)
opacity设置元素的透明背景
opacity可以用来设置元素背景的透明,它需要一个0~1之间的值。
- 0表示完全透明。
- 1表示完全不透明。
- 0.5表示半透明。
<span style="color:#000000"><code class="language-html"><span style="color:#61aeee"><!DOCTYPE html></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>html</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>head</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>meta</span> <span style="color:#d19a66">charset</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>UTF-8<span style="color:#999999">"</span></span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>title</span><span style="color:#999999">></span></span><span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>title</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>style</span> <span style="color:#d19a66">type</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>text/css<span style="color:#999999">"</span></span><span style="color:#999999">></span></span>
<span style="color:#669900">.box1</span><span style="color:#999999">{</span>
<span style="color:#98c379">width</span><span style="color:#999999">:</span> 200px<span style="color:#999999">;</span>
<span style="color:#98c379">height</span><span style="color:#999999">:</span> 200px<span style="color:#999999">;</span>
<span style="color:#98c379">background-color</span><span style="color:#999999">:</span> red<span style="color:#999999">;</span>
<span style="color:#5c6370">/*开启相对定位*/</span>
<span style="color:#98c379">position</span><span style="color:#999999">:</span> relative<span style="color:#999999">;</span>
<span style="color:#98c379">z-index</span><span style="color:#999999">:</span> 1<span style="color:#999999">;</span>
<span style="color:#5c6370">/*设置半透明*/</span>
<span style="color:#98c379">opacity</span><span style="color:#999999">:</span> 0.5<span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#669900">.box2</span><span style="color:#999999">{</span>
<span style="color:#98c379">width</span><span style="color:#999999">:</span> 200px<span style="color:#999999">;</span>
<span style="color:#98c379">height</span><span style="color:#999999">:</span> 200px<span style="color:#999999">;</span>
<span style="color:#98c379">background-color</span><span style="color:#999999">:</span> yellow<span style="color:#999999">;</span>
<span style="color:#5c6370">/*开启绝对定位*/</span>
<span style="color:#98c379">position</span><span style="color:#999999">:</span> absolute<span style="color:#999999">;</span>
<span style="color:#5c6370">/*设置偏移量*/</span>
<span style="color:#98c379">top</span><span style="color:#999999">:</span> 100px<span style="color:#999999">;</span>
<span style="color:#98c379">left</span><span style="color:#999999">:</span> 100px<span style="color:#999999">;</span>
<span style="color:#98c379">z-index</span><span style="color:#999999">:</span> 2<span style="color:#999999">;</span>
<span style="color:#5c6370">/*设置半透明*/</span>
<span style="color:#98c379">opacity</span><span style="color:#999999">:</span> 0.5<span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#669900">.box3</span><span style="color:#999999">{</span>
<span style="color:#98c379">width</span><span style="color:#999999">:</span> 200px<span style="color:#999999">;</span>
<span style="color:#98c379">height</span><span style="color:#999999">:</span> 200px<span style="color:#999999">;</span>
<span style="color:#98c379">background-color</span><span style="color:#999999">:</span> aqua<span style="color:#999999">;</span>
<span style="color:#5c6370">/*开启绝对定位*/</span>
<span style="color:#98c379">position</span><span style="color:#999999">:</span> absolute<span style="color:#999999">;</span>
<span style="color:#98c379">left</span><span style="color:#999999">:</span> 200px<span style="color:#999999">;</span>
<span style="color:#98c379">top</span><span style="color:#999999">:</span> 200px<span style="color:#999999">;</span>
<span style="color:#98c379">z-index</span><span style="color:#999999">:</span> 3<span style="color:#999999">;</span>
<span style="color:#5c6370">/*设置半透明*/</span>
<span style="color:#98c379">opacity</span><span style="color:#999999">:</span> 0.5<span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>style</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>head</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>body</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>div</span> <span style="color:#d19a66">class</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>box1<span style="color:#999999">"</span></span><span style="color:#999999">></span></span><span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>div</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>div</span> <span style="color:#d19a66">class</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>box2<span style="color:#999999">"</span></span><span style="color:#999999">></span></span><span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>div</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>div</span> <span style="color:#d19a66">class</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>box3<span style="color:#999999">"</span></span><span style="color:#999999">></span></span><span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>div</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>body</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>html</span><span style="color:#999999">></span></span>
</code></span>
我么可以通过opacity来设置透明度,产生朦胧的感觉。
注意:opacity属性,在IE8及以下的浏览器不支持,需要使用如下属性代替filter:alpha(opacity=50);
。