【CSS全解】CSS定位

137 阅读3分钟

div的分层

Pasted image 20220620153803.png

  • 定位元素(z-index≥0)>内联子元素>浮动元素>块级子元素>border>background>定位元素(z-index<0)
  • 布局和定位的区别是什么?
    • 布局是屏幕上的,定位是垂直于屏幕的。
  • background的范围是从哪到哪?
    • border的外边沿围成的区域。
  • 文字和border谁在上面?
    • 文字在上面。
  • 同一元素层级上的文字,后出现的盖住先出现的。
  • 浮动元素脱离文档流:本质是比文档流内的元素高了一些。

position属性

  • postion取值
    • static:默认。待在文档流内。
    • relative:相对定位,但不脱离文档流,在不影响文档流页面布局的情况下调整元素位置。
    • absolute:绝对定位,定位基准是祖先里的非static。
    • fixed:固定定位,定位基准是viewport。
    • sticky:粘滞定位,可以用于写导航。
  • 定位元素:非positon: static;的元素。
  • 注意
    • 如果写了absolute,一般要添上relative。
    • 如果写了absolute或fixed,一般要补top和left。
    • sticky兼容性很差,一般不用。

position: relative;

  • 在static元素看来,relative元素实际位置没有改变,但显示的位置改变了。
  • 使用场景
    • 用于做位移(不推荐)。
    • 用于给absolute元素做父元素。
  • 配合z-index,值更大的元素在上方。
    • z-index: auto;默认,不创建新层叠上下文。
    • z-index: 0/1/2;
    • z-index: -1/-2;
  • 注意
    • 不要写z-index: 9999。
    • 子元素的z-index不能比层叠上下文中上一层的z-index要低。
    • 学会管理z-index。

position: absolute;

  • absolute的使用必须要配合一个position: relative;的父元素。
  • 使用场景
    • 脱离原来的位置,另起一层,比如关闭按钮。
      .close {
      	position: absolute;
      	top: 0;
      	right: 0;
      }
      
    • 鼠标提示。
      button span {
      	position: absolute;
      	white-space: nowrap;
      	/* 让提示出现在父元素上方+10px的位置 */
      	bottom: calc(100% + 10px); 
      	/* 让元素出现在父元素上方中间 */
      	left: 50%;
      	transform: translateX(-50%);
      	display: none;
      }
      
      span:hover 子元素{
      	display: inlne-block;
      }
      
  • 配合z-index。
  • 注意
    • absolute不是相对于relative父元素定位的。而是相对于父元素中最近的一个定位元素来定位的。
    • 部分浏览器在不写top/left,会位置错乱(四个位置至少要写两个)。
    • 善用100%。left: 100%顶到右边,right: 100%顶到左边,top: 100%顶到最下面,bottom: 100%顶到最上面。
    • 善用50%和负magin。
      left: 50%;
      transform: translateX(-50%);
      

position: fixed;

  • 相对于视口定位。
  • 使用场景
    • 广告。
    • 回到顶部按钮。
  • 配合z-index。
  • 注意
    • 如果父元素有一些特殊的属性(如transform),那fixed属性就不是相对于视口定位了。
    • 手机上尽量不要用这个属性(详情搜索“移动端fixed”)。

层叠上下文

  • 只要写了z-index属性,就会形成层叠上下文,产生一个单独的作用域。
  • 处在同一个作用域内的z-index才能比较,在作用域内的z-index与作用域外无关。
  • 未标注z-index的情况下,默认的层叠上下文顶层为<html>
  • 其他可以创建层叠上下文的属性:z-index≠auto、flex、opacity≠1、transform
  • 层叠上下文 MDN文档

负z-index

  • 子元素的z-index不能比父元素的z-index要低,不然前者会无效。也因此,一个子元素不一定能通过z-index<0的方式逃出一个盒子的范围,因为它的父元素可能也是定位元素。

拓展

white-space属性

  • white-space: nowrap;:文字内容不准换行。

一直显示hover

  • 控制台→选中对应元素→Style→Force element state→:hover

opacity和rbga的区别

  • opacity影响整个元素。
  • rbga只会影响部分属性,如background-color和color。