非常教程

CSS参考手册

杂项 | Miscellaneous

All About The Containing Block

元素的大小和位置通常受其含块包的影响。大多数情况下,包含块是元素最近的块级祖先的内容区域,但情况并非总是如此。

当用户代理(如浏览器)布局文档时,它会为每个元素生成一个框。每个盒子分为四个区域:

  1. 内容区域
  2. 填充区域
  3. 边区
  4. 保证金面积

许多开发人员认为,元素的包含块始终是其父项的内容区域。但这是错误的!继续阅读...

为什么识别包含块很重要?

元素的大小和位置通常受其包含块的影响。被施加到所述百分比值widthheightpaddingmargin,和offset绝对定位的元素(即,其具有它的性能position设置为absolutefixed)从元件的包含块计算的。

我们如何识别containing block

标识包含块的过程完全取决于元素position属性的值:

  1. 如果position属性为staticrelative,则包含块由作为块容器的最近的祖先元素(例如内嵌块,块或列表项元素)的内容框的边缘形成,或者其建立格式化上下文(如表格容器,弹性容器,网格容器或块容器本身)。
  2. 如果position属性是absolute,含块由的边缘形成填充箱,其具有最近的祖先元素的position比其他值staticfixedabsoluterelative,或sticky)。
  3. 如果该position属性为fixed,则包含块由视口(在连续媒体的情况下)或页面区域(在分页媒体的情况下)建立。
  4. 如果position属性为absolutefixed,则包含块也可以由具有以下内容的最近的祖先元素的填充框的边缘形成:
    1. transformperspective其他值none
    2. will-change价值transformperspective
    3. filter比其他值nonewill-changefilter(仅适用于Firefox浏览器)。

注意:根元素(<html>)所在的包含块是一个称为初始包含块的矩形。它具有视口的尺寸(用于连续媒体)或页面区域(用于分页媒体)。

计算来自包含块的百分比值

如上所述,当给定某个属性的百分比值时,计算值取决于该元素的包含块。以这种方式工作的属性是框模型属性和偏移属性:

  1. heighttopbottomproperties计算包含块的_height_的百分比值。如果heightof包含块取决于它的内容,这些值成为0当含块具有positionrelativestatic
  2. widthleftrightpadding,和margin性能计算从_width_of包含块百分比值。

例子

我们所有例子的HTML代码是:

<body>
  <section>
    <p>This is a paragraph!</p>
  </section>
</body>

例1

在这个例子中,段落是静态定位的,所以它的包含块是<section>因为它是最接近块的容器的先例。

body {
  background: beige;
}

section {
  display: block;
  width: 400px;
  height: 160px;
  background: lightgray;
}

p {
  width: 50%;   /* == 400px * .5 = 200px */
  height: 25%;  /* == 160px * .25 = 40px */
  margin: 5%;   /* == 400px * .05 = 20px */
  padding: 5%;  /* == 400px * .05 = 20px */
  background: cyan;
}

例2

在这个例子中,段落的包含块是<body>元素,因为<section>它不是块容器,并且不建立格式化上下文。

body {
  background: beige;
}

section {
  display: inline;
  background: lightgray;
}

p {
  width: 50%;     /* == half the body's width */
  height: 200px;  /* Note: a percentage would be 0 */
  background: cyan;
}

例3

在这个例子中,段落的包含块是<section>,因为后者的positionabsolute。段落的百分比值受其包含块的填充影响,但如果包含块的box-sizing值是border-box这种情况,情况就不会如此。

body {
  background: beige;
}

section {
  position: absolute;
  left: 30px;
  top: 30px;
  width: 400px;
  height: 160px;
  padding: 30px 20px;
  background: lightgray;
}

p {
  position: absolute;
  width: 50%;   /* == (400px + 20px + 20px) * .5 = 220px */
  height: 25%;  /* == (160px + 30px + 30px) * .25 = 55px */
  margin: 5%;   /* == (400px + 20px + 20px) * .05 = 22px */
  padding: 5%;  /* == (400px + 20px + 20px) * .05 = 22px */
  background: cyan;
}

例4

在这个例子中,段落positionfixed,所以它的包含块是初始包含块(在屏幕上,视口)。因此,段落的尺寸会根据浏览器窗口的大小而变化。

body {
  background: beige;
}

section {
  width: 400px;
  height: 480px;
  margin: 30px;
  padding: 15px;
  background: lightgray;
}

p {
  position: fixed;
  width: 50%;   /* == (50vw - (width of vertical scrollbar)) */
  height: 50%;  /* == (50vh - (height of horizontal scrollbar)) */
  margin: 5%;   /* == (5vw - (width of vertical scrollbar)) */
  padding: 5%;  /* == (5vw - (width of vertical scrollbar)) */
  background: cyan;
}

例5

在这个例子中,段落的positionabsolute,所以它的包含块是<section>,这是最近的先例与一个transform属性不是none

body {
  background: beige;
}

section {
  transform: rotate(0deg);
  width: 400px;
  height: 160px;
  background: lightgray;
}

p {
  position: absolute;
  left: 80px;
  top: 30px;
  width: 50%;   /* == 200px */
  height: 25%;  /* == 40px */
  margin: 5%;   /* == 20px */
  padding: 5%;  /* == 20px */
  background: cyan;
}
CSS

层叠样式表( Cascading Style Sheets )是一种用来表现 HTML 或 XML 等文件样式的计算机语言。CSS 不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。

CSS目录

1.动画和转换 | Animations & Transitions
2.背景和边框 | Backgrounds & Borders
3.基本框模型 | Basic Box Model
4.基本用户界面 | Basic User Interface
5.框对齐 | Box Alignment
6. 级联和继承 | Cascading & Inheritance
7.颜色 | Color
8. 合成与混合 | Compositing & Blending
9.条件和规则 | Conditional Rules
10.计数器样式 | Counter Styles
11.设备适配 | Device Adaptation
12.扩展 | Extensions
13.滤镜效果 | Filter Effects
14.灵活的框布局 | Flexible Box Layout
15.字体 | Fonts
16.片段模块 | Fragmentation
17.全屏 API | Fullscreen API
18. 生成内容 | Generated Content
19.网格布局 | Grid Layout
20.图像值 | Image Values
21.初始线格局 | Inline Layout
22.列表和计数器 | Lists & Counters
23.逻辑属性 | Logical Properties
24.面具 | Masking
25.媒体查询 | Media Queries
26.杂项 | Miscellaneous
27.Miscellaneous Level 1
28.Miscellaneous Level 2
29.运动路径 | Motion Path
30. 多列布局 | Multi-column Layout
31.命名空间 | Namespaces
32.项目模型 | Object Model View
33.网页媒体 | Paged Media
34.定位布局 | Positioned Layout
35.伪元素 | Pseudo-
36.节奏大小 | Rhythmic Sizing
37. Ruby布局 | Ruby Layout
38.可缩放矢量图形 | Scalable Vector Graphics
39.滚动快照 | Scroll Snap
40.选择 | Selectors
41.形状 | Shapes
42.文本 | Text
43.文字装饰 | Text Decoration
44.变换 | Transforms
45.值和单位 | Values & Units
46.变量 | Variables
47.写入模型 | Writing Modes
48.CSS 教程
49.CSS 创建
50.CSS Id 和 Class选择器
51.CSS 简介
52.CSS 盒子模型
53.CSS Table(表格)
54.CSS 列表样式(ul)
55.CSS 链接(link)
56.CSS Fonts(字体)
57.CSS Text(文本)
58.CSS Backgrounds(背景)
59.CSS Display(显示) 与 Visibility(可见性)
60.CSS 尺寸 (Dimension)
61.CSS 分组和嵌套
62.CSS 轮廓(outline)属性
63.CSS Border(边框)
64.CSS 图像透明/不透明
65.CSS 导航栏
66.CSS 伪元素
67.CSS 伪类
68.CSS Float(浮动)
69.CSS Position(定位)
70.CSS 总结
71.CSS 属性选择器
72.CSS 媒体类型
73.CSS 图像拼合技术
74.CSS 实例
75.CSS 组合选择符
76.响应式 Web 设计 – 框架
77.响应式 Web 设计 – 视频(Video)
78.CSS 提示工具(Tooltip)
79.CSS 布局 Overflow
80.CSS 计数器
81.CSS 表单