CSS 布局 - position 属性

position 属性规定应用于元素的定位方法的类型(static、relative、fixed、absolute 或 sticky)。


position 属性

position 属性规定应用于元素的定位方法的类型。有五个不同的位置值:

  • static
  • relative
  • fixed
  • absolute
  • sticky

元素其实是使用 top、bottom、left 和 right 属性定位的。但是,除非首先设置了 position 属性,否则这些属性将不起作用。根据不同的 position 值,它们的工作方式也不同。


position: static;

HTML 元素默认情况下的定位方式为 static(静态)。

静态定位的元素不受 top、bottom、left 和 right 属性的影响。

position: static; 的元素不会以任何特殊方式定位;它始终根据页面的正常流进行定位:

这个 <div> 元素设置了 position: static;

这是所用的 CSS:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. div.static {
  6. position: static;
  7. border: 3px solid #73AD21;
  8. }
  9. </style>
  10. </head>
  11. <body>
  12. <h1>position: static;</h1>
  13. <p>设置 position: static; 的元素不会以任何特殊方式定位;它是始终根据页面的正常流进行定位:</p>
  14. <div class="static">
  15. 这个 div 元素设置 position: static;
  16. </div>
  17. </body>
  18. </html>

position: relative;

position: relative; 的元素相对于其正常位置进行定位。

设置相对定位的元素的 top、right、bottom 和 left 属性将导致其偏离其正常位置进行调整。不会对其余内容进行调整来适应元素留下的任何空间。

这个 <div> 元素设置了 position: relative;

这是所用的 CSS:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. div.relative {
  6. position: relative;
  7. left: 30px;
  8. border: 3px solid #73AD21;
  9. }
  10. </style>
  11. </head>
  12. <body>
  13. <h1>position: relative;</h1>
  14. <p>设置 position: relative; 的元素相对于其正常位置进行定位:</p>
  15. <div class="relative">
  16. 这个 div 元素设置 position: relative;
  17. </div>
  18. </body>
  19. </html>

position: fixed;

position: fixed; 的元素是相对于视口定位的,这意味着即使滚动页面,它也始终位于同一位置。 top、right、bottom 和 left 属性用于定位此元素。

固定定位的元素不会在页面中通常应放置的位置上留出空隙。

请注意页面右下角的这个固定元素。这是所用的 CSS:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. div.fixed {
  6. position: fixed;
  7. bottom: 0;
  8. right: 0;
  9. width: 300px;
  10. border: 3px solid #73AD21;
  11. }
  12. </style>
  13. </head>
  14. <body>
  15. <h1>position: fixed;</h1>
  16. <p>设置 position: fixed; 的元素会相对视口定位,这意味着即使页面滚动也会停留在某个位置:</p>
  17. <div class="fixed">
  18. 这个 div 元素设置 position: fixed;
  19. </div>
  20. </body>
  21. </html>

这个 <div> 元素设置了 position: fixed;


position: absolute;

position: absolute; 的元素相对于最近的定位祖先元素进行定位(而不是相对于视口定位,如 fixed)。

然而,如果绝对定位的元素没有祖先,它将使用文档主体(body),并随页面滚动而一起移动。

注意:“被定位的”元素是其位置除 static 以外的任何元素。

这是一个简单的例子:

这个 <div> 元素设置了 position: relative;
这个 <div> 元素设置了 position: absolute;

这个 <div> 元素设置了 position: relative;这个 <div> 元素设置了 position: absolute;

这是所用的 CSS:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. div.relative {
  6. position: relative;
  7. width: 400px;
  8. height: 200px;
  9. border: 3px solid #73AD21;
  10. }
  11. div.absolute {
  12. position: absolute;
  13. top: 80px;
  14. right: 0;
  15. width: 200px;
  16. height: 100px;
  17. border: 3px solid #73AD21;
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <h1>position: absolute;</h1>
  23. <p>设置 position: absolute; 的元素会相对于最近的定位祖先进行定位(而不是相对于视口进行定位,比如 fixed):</p>
  24. <div class="relative">这个 div 元素设置 position: relative;
  25. <div class="absolute">这个 div 元素设置 position: absolute;</div>
  26. </div>
  27. </body>
  28. </html>

position: sticky;

position: sticky; 的元素根据用户的滚动位置进行定位。

粘性元素根据滚动位置在相对(relative)和固定(fixed)之间切换。起先它会被相对定位,直到在视口中遇到给定的偏移位置为止 - 然后将其“粘贴”在适当的位置(比如 position:fixed)。

注意:Internet Explorer、Edge 15 以及更早的版本不支持粘性定位。 Safari 需要 -webkit- 前缀(请参见下面的实例)。您还必须至少指定 toprightbottomleft 之一,以便粘性定位起作用。

在此例中,在到达其滚动位置时,sticky 元素将停留在页面顶部(top: 0):

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. div.sticky {
  6. position: -webkit-sticky;
  7. position: sticky;
  8. top: 0;
  9. padding: 5px;
  10. background-color: #cae8ca;
  11. border: 2px solid #4CAF50;
  12. }
  13. </style>
  14. </head>
  15. <body>
  16. <p>请试着在这个框架内<b>滚动</b>页面,以理解粘性定位的原理。</p>
  17. <div class="sticky">我是有粘性的!</div>
  18. <div style="padding-bottom:2000px">
  19. <p>在此例中,当您到达元素的滚动位置时,粘性元素将停留在页面顶部(top: 0)。</p>
  20. <p>向上滚动以消除粘性。</p>
  21. <p>一些启用滚动的文本.. 这是一段很长的文本。这是一段很长的文本。这是一段很长的文本。这是一段很长的文本。这是一段很长的文本。这是一段很长的文本。这是一段很长的文本。</p>
  22. <p>一些启用滚动的文本.. 这是一段很长的文本。这是一段很长的文本。这是一段很长的文本。这是一段很长的文本。这是一段很长的文本。这是一段很长的文本。这是一段很长的文本。这是一段很长的文本。这是一段很长的文本。这是一段很长的文本。这是一段很长的文本。</p>
  23. </div>
  24. </body>
  25. </html>

重叠元素

在对元素进行定位时,它们可以与其他元素重叠。

z-index 属性指定元素的堆栈顺序(哪个元素应放置在其他元素的前面或后面)。

元素可以设置正或负的堆叠顺序:

这是一个标题

因为图像的 z-index 为-1,所以它将被放置在文本后面。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. img {
  6. position: absolute;
  7. left: 0px;
  8. top: 0px;
  9. z-index: -1;
  10. }
  11. </style>
  12. </head>
  13. <body>
  14. <h1>这是标题</h1>
  15. <img src="/znadmin/md/1236/0.png" width="267" height="188">
  16. <p>由于图像的 z-index 为 -1,它将被置于文本之后。</p>
  17. </body>
  18. </html>

具有较高堆叠顺序的元素始终位于具有较低堆叠顺序的元素之前。

注意:如果两个定位的元素重叠而未指定 z-index,则位于 HTML 代码中最后的元素将显示在顶部。


定位图像中的文本

如何在图片上放置文字:

实例

Cinque Terre
左下
左上
右上
右下
居中

上述效果代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. .container {
  6. position: relative;
  7. }
  8. .topleft {
  9. position: absolute;
  10. top: 8px;
  11. left: 16px;
  12. font-size: 18px;
  13. }
  14. img {
  15. width: 100%;
  16. height: auto;
  17. opacity: 0.3;
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <h2>图片文本</h2>
  23. <p>在图片的四个角落和正中央添加文本</p>
  24. <div class="container">
  25. <img src="/znadmin/md/1236/1.jpg" alt="Cinque Terre" style="width:100%;height:auto;opacity:0.3">
  26. <div style="position:absolute;bottom:8px;left:16px;font-size:18px">左下</div>
  27. <div style="position:absolute;top:8px;left:16px;font-size:18px">左上</div>
  28. <div style="position:absolute;top:8px;right:16px;font-size:18px">右上</div>
  29. <div style="position:absolute;bottom:8px;right:16px;font-size:18px">右下</div>
  30. <div style="position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);font-size:18px">居中</div>
  31. </div>
  32. </body>
  33. </html>

所有 CSS 定位属性

属性描述
bottom设置定位框的底部外边距边缘。
clip剪裁绝对定位的元素。
left设置定位框的左侧外边距边缘。
position规定元素的定位类型。
right设置定位框的右侧外边距边缘。
top设置定位框的顶部外边距边缘。
z-index设置元素的堆叠顺序。