AI智能
改变未来

CSS中的四种定位


定位(positio)

简介

  • 定位是一种更加高级的布局手段,通过定位可以将元素摆放到页面的任意位置
  • 使用position属性来设置定位static 默认值,元素是静止的没有开启定位
  • relative 开启元素的相对定位
  • absolute 开启元素的绝对定位
  • fixed 开启元素的固定定位
  • sticky 开启元素的粘滞定位
  • 偏移量:当元素开启了定位以后,可以通过偏移量来设置元素的位置
      top:定位元素和定位位置上边的距离
    • bottom:定位元素和定位位置下边的距离
    • left:定位元素和定位位置的左侧距离
    • right:定位元素和定位位置的右侧距离

    相对定位

    • 当元素的position属性值设置为relative时则开启了元素的相对定位
    • 特点元素开启相对定位以后,如果不设置偏移量元素不会发生任何的变化
    • 相对定位是参照于元素在文档流中的位置进行定位的
    • 相对定位会提升元素的层级
    • 相对定位不会使元素脱离文档流
    • 相对定位不会改变元素的性质块还是块,行内还是行内
    ### 定位(positio)#### 简介- 定位是一种更加高级的布局手段,通过定位可以将元素摆放到页面的任意位置- 使用position属性来设置定位- static 默认值,元素是静止的没有开启定位- relative 开启元素的相对定位- absolute 开启元素的绝对定位- fixed 开启元素的固定定位- sticky 开启元素的粘滞定位- 偏移量:当元素开启了定位以后,可以通过偏移量来设置元素的位置- top:定位元素和定位位置上边的距离- bottom:定位元素和定位位置下边的距离- left:定位元素和定位位置的左侧距离- right:定位元素和定位位置的右侧距离#### 相对定位- 当元素的position属性值设置为relative时则开启了元素的相对定位- 特点- 元素开启相对定位以后,如果不设置偏移量元素不会发生任何的变化- 相对定位是参照于元素在文档流中的位置进行定位的- 相对定位会提升元素的层级- 相对定位不会使元素脱离文档流- 相对定位不会改变元素的性质块还是块,行内还是行内```css<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\"><title>Document</title><style>body{font-size: 60px;}.box1{width: 200px;height: 200px;background-color: #bfa;}​.box2{width: 200px;height: 200px;background-color: orange;position: relative;left: 100px;top: -200px;​}​.box3{width: 200px;height: 200px;background-color: yellow;​}</style></head><body>​<div class=\"box1\">1</div><div class=\"box2\">2</div><div class=\"box3\">3</div></body></html>

    绝对定位

    • 当元素的position属性值设置为absolute时,则开启了元素的绝对定位
    • 特点:开启绝对定位后,如果不设置偏移量元素的位置不会发生变化
    • 开启绝对定位后,元素会从文档流中脱离
    • 绝对定位会改变元素的性质,行内变成块,块的宽高被内容撑开
    • 绝对定位会使元素提升一个层级
    • 绝对定位元素是相对于其包含块进行定位的
  • 包含块
      正常情况下:包含块就是离当前元素最近的祖先块元素
    • 绝对定位的包含块:包含块就是离它最近的开启了定位的祖先元素,如果所有的祖先元素都没有开启定位则根元素就是它的包含块
    • html(根元素、初始包含块)
  • 布局
      left + margin-left + border-left + padding-left + width + padding-right + border-right + margin-right + right = 包含块的内容区的宽度
    <!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\"><title>Document</title><style>body{font-size: 60px;}.box1{width: 200px;height: 200px;background-color: #bfa;}​.box2{width: 200px;height: 200px;background-color: orange;​position: absolute;/* left: 0;top: 0; */bottom: 0;right: 0;}​.box3{width: 200px;height: 200px;background-color: yellow;​}​.box4{width: 400px;height: 400px;background-color: tomato;position: relative;}.box5{width: 300px;height: 300px;background-color: aliceblue;/* position: relative; */}</style></head><body>​<div class=\"box1\">1</div>​<div class=\"box4\">4<div class=\"box5\">5<div class=\"box2\">2</div></div></div><div class=\"box3\">3</div></body></html>

    固定定位

    • 将元素的position属性设置为fixed则开启了元素的固定定位
    • 固定定位也是一种绝对定位,所以固定定位的大部分特点都和绝对定位一样
    • 唯一不同的是固定定位永远参照于浏览器的视口进行定位,固定定位的元素不会随网页的滚动条滚动
    <!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\"><title>Document</title><style>body{font-size: 60px;height: 2000px;}.box1{width: 200px;height: 200px;background-color: #bfa;}​.box2{width: 200px;height: 200px;background-color: orange;position: fixed;​left: 0;top: 0;​​​}​.box3{width: 200px;height: 200px;background-color: yellow;​}​.box4{width: 400px;height: 400px;background-color: tomato;​}.box5{width: 300px;height: 300px;background-color: aliceblue;}</style></head><body>​<div class=\"box1\">1</div>​<div class=\"box4\">4<div class=\"box5\">5<div class=\"box2\">2</div>​</div></div>​<div class=\"box3\">3</div>​</body></html>

    粘滞定位

    • 当元素的position属性设置为sticky时则开启了元素的粘滞定位
    • 粘滞定位和相对定位的特点基本一致,不同的是粘滞定位可以在元素到达某个位置时将其固定
    <!DOCTYPE html><html lang=\"en\">​<head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\"><title>导航条</title><link rel=\"stylesheet\" href=\"./css/reset.css\"><style>​body{height: 3000px;}/* 设置nav的大小 */.nav{​/* 设置宽度和高度 */width: 1210px;height: 48px;/* 设置背景颜色 */background-color: #E8E7E3;​margin:100px auto;position: sticky;top: 10px;​}​/* 设置nav中li */.nav li{/* 设置li向左浮动,已使菜单横向排列 */float: left;/* 设置li的高度 *//* height: 48px; *//* 将文字在父元素中垂直居中 */line-height: 48px;​}​/* 设置a的样式 */.nav a{/* 将a转换为块元素 */display: block;/* 去除下划线 */text-decoration: none;/* 设置字体颜色 */color: #777777;/* 修改字体大小 */font-size: 18px;​padding: 0 39px;}​.nav li:last-child a{padding: 0 42px 0 41px;}​/* 设置鼠标移入的效果 */.nav a:hover{background-color: #3F3F3F;color: #E8E7E3;}</style></head>​<body><!-- 创建导航条的结构 --><ul class=\"nav\"><li><a href=\"#\">HTML/CSS</a></li><li><a href=\"#\">Browser Side</a></li><li><a href=\"#\">Server Side</a></li><li><a href=\"#\">Programming</a></li><li><a href=\"#\">XML</a></li><li><a href=\"#\">Web Building</a></li><li><a href=\"#\">Reference</a></li></ul>​</body>​</html>

    元素的层级

    • 对于开启了定位元素,可以通过z-index属性来指定元素的层级
    • z-index需要一个整数作为参数,值越大元素的层级越高,元素的层级越高越优先显示
    • 如果元素的层级一样,则优先显示靠下的元素,祖先的元素的层级再高也不会盖住后代元素
  • 赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » CSS中的四种定位