学习笔记 CSS权威指南 第11章 定位

206 阅读4分钟

11.1 基本概念

11.1.1 定位的类型

  • static: 生成正常的元素框
    • 块级元素生成矩形框
    • 行内元素生成1/多个行框,随父元素流动
  • relative: 元素框偏移,但形状与位置不变
  • absolute: 元素脱离文档流
    • 相对容纳块定位
    • 生成的是块级框
  • fixed: 同absolute
    • 容纳块是视区
  • sticky: 触发粘滞条件时,从常规文档流中移除
    • 常规文档流中的空间保留

11.1.2 容纳块

jsfiddle.net/ranwawa/dqu…

对非根元素来说

  • position为relative/static时,由最近的块级/行内块级/单元格
    • 内容边界划定
  • position为absolute时,由position属性不为static的最近祖辈元素确定
    • 如果是块级元素,由内边距边界划定
    • 如果是行内元素,由内容边界划定
    • 如果没有祖辈,就是初始容纳块

对于粘滞元素来说

  • 由粘滞限定矩形确定

11.2 偏移属性

  • 正值是内向偏移,负值是外向偏移
  • 百分数相对于容纳块的高度/宽度

11.3 宽度和高度

11.3.1 设置宽度和高度

除了直接设置,height和width也可以从偏移值中推导出来

11.3.2 限制宽度和高度

其值也是相对于容纳块的宽/高

  • min-width/min-height
  • max-width/max-height

11.4 内容举出和裁剪

11.4.1 溢出Overflow

jsfiddle.net/ranwawa/bmg…

  • visible: 超出元素框的内容可见
    • 对元素框的形状没有影响
  • scroll: 规范要求,始终渲染滚动条
  • hidden: 元素框处裁剪
  • auto: 只在需要时滚动,一般用这个还是好一些

11.5 元素的可见性 visibility

注意这个值是可以继承的

  • visible: 默认值,可见
  • hidden: 不可见,但还占用文档流
    • 注意和display:none;的区别
  • collapse

11.6 绝对定位

11.6.1 绝对定位元素的容纳块

绝对定位元素的容纳块是position属性的值不为static的最近的祖辈元素.

  • 如果文档滚动,绝对定位的元素将随之滚动

11.6.2 绝对定位元素的位置和尺寸

没啥好记得

11.6.3 自动确定边界的位置

静态位置: 元素在常规文档流行中的位置.

jsfiddle.net/ranwawa/sbw…

如果偏移距离设置为auto

  • 除bottom外,边界将会和静态位置对齐

如果设置为0

  • 边界和容纳块左边界生命

11.6.4 非置换元素的位置和尺寸

基本规则是,定位元素的maring+border+padding+width要等于容纳块的宽.高度同样的道理

jsfiddle.net/ranwawa/sbw…

如果left,right,width都为auto时

  • 左边界在静态位置
  • 元素宽度自动缩放到内容宽度

如果margin为auto,其他有值时

  • 会居中显示

如果所有长度都有值,且加起来不足容纳宽宽度

  • 则会忽略right属性,让其补足差值

如果只有一个值是auto,且加起来不足容纳块宽度

  • 则这个值会自动补足差值

如果过约束了(类似约束不足)

  • 横向上的right会被忽略
  • 纵向上的bottom会被忽略

11.6.5 置换元素的位置和尺寸

  • width如果为auto,则是自身宽度
  • 如果left为0,则替换为静态位置
  • 如果left/right为auto,且未设置margin,那么margin的auto会设置为0
  • 如果显示设置margin为auto,则会居中显示

11.6.7 Z轴上的位置z-index

堆叠次序: 叠放的优选级

  • 设置了z-index后,元素便确立了自己的局部堆叠上下文,所有后代元素都相对于它来渲染
  • 可以设置为负值
  • 子元素不能在父元素的背后绘制
    • 即,父元素为1,子元素为-1,照样在父元素上方显示

11.7 固定定位

和绝对定位一样,只是容纳块是视区

11.8 相对定位

除了不脱离文档流以外,最大的区别就是过约束处理

  • 相对过约束时,会把right/bottom重置为left/top相反的值
    • 如top: 10px; bottom: 20px;最终bottom是-10px.其实就相当于忽略了

11.9 粘滞定位

当元素的边界和粘滞边界接触后,元素会相对于粘滞矩形定位.但是文档流中的位置依然保留.

  • 不仅是上边,每条边都可以设置粘滞定位