CSS Position(定位)详解

CSS中的定位使用来布局的熟练应用对页面美化有很好的帮助,下面就进行详细介绍:定位分为静态定位,相对定位,绝对定位,固定定位,粘性定位这五种,定位有不同的参数,例如:leftrighttopbottomz-index等。

一、position 属性指定了元素的定位类型。position 属性的五个值:

  • static(静态定位)
  • relative(相对定位)
  • absolute(绝对定位)
  • fixed(固定定位)
  • sticky(粘性定位)

1、static 定位

HTML 元素的默认值,即没有定位,遵循正常的文档流对象。

静态定位的元素不会受到 top, bottom, left, right影响。

  1. <style>
  2. div.static {
  3. position: static;
  4. border: 3px solid #73AD21;
  5. }
  6. </style>
  7. <p>使用 position: static; 定位的元素,无特殊定位,遵循正常的文档流对象:</p>
  8. <div class="static">
  9. 该元素使用了 position: static;
  10. </div>

2、relative 定位

相对定位元素的定位是相对其正常位置。。它必须搭配topbottomleftright这四个属性一起使用,用来指定偏移的方向和距离。

  1. <style>
  2. h2.pos_left
  3. {
  4. position:relative;
  5. left:-20px;
  6. }
  7. h2.pos_right
  8. {
  9. position:relative;
  10. left:20px;
  11. }
  12. </style>
  13. <h2>这是位于正常位置的标题</h2>
  14. <h2 class="pos_left">这个标题相对于其正常位置向左移动</h2>
  15. <h2 class="pos_right">这个标题相对于其正常位置向右移动</h2>

移动相对定位元素,但它原本所占的空间不会改变。
相对定位元素经常被用来作为绝对定位元素的容器块。

3、absolute 定位

absolute表示,相对于上级元素(一般是父元素)进行偏移,即定位基点是父元素。
它有一个重要的限制条件:定位基点(一般是父元素)不能是static定位,否则定位基点就会变成整个网页的根元素html。另外,absolute定位也必须搭配topbottomleftright这四个属性一起使用。

  1. <style>
  2. h2
  3. {
  4. position:absolute;
  5. left:100px;
  6. top:150px;
  7. }
  8. </style>
  9. <h2>这是一个绝对定位了的标题</h2>

absolute 定位使元素的位置与文档流无关,因此不占据空间。

  1. <style>
  2. .one{
  3. width: 20rem;
  4. height: 20rem;
  5. left: 50%;
  6. position: relative;
  7. background: skyblue;
  8. }
  9. .two{
  10. width: 10rem;
  11. height: 10rem;
  12. position: absolute;
  13. top:30px;
  14. left: 30px;
  15. background: violet;
  16. }
  17. </style>
  18. <div class="one">
  19. <div class="two"></div>
  20. </div>

上面代码中,父元素是relative定位,子元素是absolute定位,所以子元素的定位基点是父元素,相对于父元素的顶部向下偏移30px,相右偏移30px

4、fixed 定位

fixed表示,相对于视口(viewport,浏览器窗口)进行偏移,即定位基点是浏览器窗口。这会导致元素的位置不随页面滚动而变化,好像固定在网页上一样。

  1. <style>
  2. h2{
  3. position: fixed;
  4. top: 2rem;
  5. right: 2rem;
  6. }
  7. </style>
  8. <h2>固定定位演示</h2>

5、sticky定位

sticky跟前面四个属性值都不一样,它会产生动态效果,很像relativefixed的结合:一些时候是relative定位(定位基点是自身默认位置),另一些时候自动变成fixed定位(定位基点是视口)。
因此,它能够形成”动态固定”的效果。比如,网页的搜索工具栏,初始加载时在自己的默认位置(relative定位)。
页面向下滚动时,导航栏变成固定位置,始终停留在页面头部(fixed定位)。
等到页面重新向上滚动回到原位,导航栏也会回到默认位置。

  1. <style>
  2. .sticky {
  3. position: -webkit-sticky;
  4. position: sticky;
  5. top: 0;
  6. padding: 5px;
  7. background-color: #cae8ca;
  8. border: 2px solid #4CAF50;
  9. }
  10. </style>
  11. <p>尝试滚动页面。</p>
  12. <p>注意: IE/Edge 15 及更早 IE 版本不支持 sticky 属性。</p>
  13. <div class="sticky">
  14. <a href="#">首页</a>
  15. </div>
  16. <div style="padding-bottom:2000px">
  17. <p>滚动我</p>
  18. <p>来回滚动我</p>
  19. <p>滚动我</p>
  20. <p>来回滚动我</p>
  21. <p>滚动我</p>
  22. <p>来回滚动我</p>
  23. </div>

sticky生效的前提是,必须搭配topbottomleftright这四个属性一起使用,不能省略,否则等同于relative定位,不产生”动态固定”的效果。原因是这四个属性用来定义”偏移距离”,浏览器把它当作sticky的生效门槛。
它的具体规则是,当页面滚动,父元素开始脱离视口时(即部分不可见),只要与sticky元素的距离达到生效门槛,relative定位自动切换为fixed定位;等到父元素完全脱离视口时(即完全不可见),fixed定位自动切换回relative定位。
请看下面的示例代码。(注意,除了已被淘汰的 IE 以外,其他浏览器目前都支持sticky。但是,Safari 浏览器需要加上浏览器前缀-webkit-。)

6、z-index(重叠的元素)

元素的定位与文档流无关,所以它们可以覆盖页面上的其它元素
z-index属性指定了一个元素的堆叠顺序(哪个元素应该放在前面,或后面)
一个元素可以有正数或负数的堆叠顺序

  1. <style>
  2. div{
  3. width: 10rem;
  4. height: 10rem;
  5. }
  6. .one{
  7. position: relative;
  8. background: skyblue;
  9. }
  10. .two{
  11. position: absolute;
  12. top:30px;
  13. left: 30px;
  14. background: violet;
  15. z-index: -1;
  16. }
  17. </style>
  18. <div class="one"></div>
  19. <div class="two"></div>

*注意:
如果两个定位元素重叠,没有指定z - index,最后定位在HTML代码中的元素将被显示在最前面。
因为two元素设置了 z-index 属性值为 -1, 所以它会显示在one之后。
具有更高堆叠顺序的元素总是在较低的堆叠顺序元素的前面。

更多相关文章

  1. 盒模型,伪类与媒体查询
  2. 绝对定位、固定定位及flex,grid属性
  3. 做SEO时,需要了解哪些HTML标签 ?
  4. CSS 元素样式来源
  5. CSS 常用伪类简介
  6. CSS 盒子模型理解
  7. html表单、元素的来源及csss外部样式和上下文选择器
  8. 学习基本元素布局视窗
  9. 初识HTML元素——列表

随机推荐

  1. 理解onMeasure
  2. Android 中文 API (29) —— CompoundButto
  3. android 6.0-高通视频通话拨打流程
  4. Android.Tools.Summary
  5. Android 设置EditText光标Curso颜色及粗
  6. Android B/S 关于系统兼容性相关问题
  7. Android(安卓)获取目录下所有文件、获取
  8. Android(安卓)Studio 2.0 正式版发布啦 (
  9. Android(安卓)Bug记:'Canvas:trying to us
  10. Android特殊字符