最近发现 ★ wizard zines 中的这本 《Hell Yes! CSS!》 对于理解 CSS 的核心概念特别有用。结合 DeepSeek 的解释,对于理解 CSS 似乎非常有帮助,因此结合原文核心内容和 DeepSeek 的解释汇集为本文。

Hell Yes! CSS!》是一本杂志,短短几十页将 CSS 的核心概念用n漫画的形式讲述清楚,是我在看 《Modern CSS with Tailwind Flexible Styling Without the Fuss - Second Edition (beta B3.0) (Noel Rappin)》这本书时推荐的。本文不会带有全部的原文内容,而只会有一些关键的页面,如需查看原文请自行寻找或购买。

Hell Yes! CSS!

Hell Yes CSS (Julia Evans) (Z-Library)-01

P3-TOC

Hell Yes CSS (Julia Evans) (Z-Library)-03

这是《Hell Yes CSS》小册子的目录部分,列出了书中涵盖的主要主题和章节。以下是对每个主题的简要解释:

ATTITUDE(态度)

  1. CSS isn’t easy: CSS 并不容易掌握,尤其是对于初学者来说,理解和应用 CSS 可能需要时间和实践。
  2. CSS isn’t design: CSS 是一种实现设计的工具,但它本身并不等同于设计。设计是关于视觉和用户体验的决策,而 CSS 是实现这些决策的技术手段。
  3. CSS specifications: CSS 规范是由 W3C(万维网联盟)制定的标准文档,定义了 CSS 的各种特性和行为。
  4. backwards compatibility: 向后兼容性指的是新版本的 CSS 特性在旧浏览器中仍然能够正常工作或优雅降级。

BASICS(基础)

  1. selectors: 选择器用于选择 HTML 元素并应用样式。常见的选择器包括元素选择器、类选择器、ID 选择器等。
  2. specificity: 特异性是决定哪个 CSS 规则将应用于元素的规则。特异性较高的规则会覆盖特异性较低的规则。
  3. default stylesheets: 默认样式表是浏览器为 HTML 元素提供的默认样式。不同的浏览器可能有不同的默认样式。
  4. units: CSS 单位用于定义长度、宽度、间距等。常见的单位包括像素(px)、百分比(%)、em、rem 等。

LAYOUT(布局)

  1. inline vs block: 行内元素(inline)和块级元素(block)是 HTML 元素的两种基本显示方式。行内元素不会独占一行,而块级元素会。
  2. the box model: 盒模型是 CSS 布局的基础,每个元素都被视为一个矩形盒子,包括内容、内边距(padding)、边框(border)和外边距(margin)。
  3. padding & margin: 内边距(padding)是内容与边框之间的空间,外边距(margin)是元素与其他元素之间的空间。
  4. borders: 边框是围绕元素内容和内边距的线条,可以设置宽度、样式和颜色。
  5. flexbox basics: Flexbox 是一种用于创建灵活布局的 CSS 模块,特别适合一维布局(行或列)。
  6. CSS grid: areas: CSS 网格布局(Grid)是一种用于创建复杂二维布局的 CSS 模块,网格区域(areas)是网格布局中的一个概念。
  7. centering: 居中是 CSS 布局中的常见需求,可以通过多种方式实现,如使用 Flexbox 或 Grid。
  8. position: absolute: 绝对定位(absolute positioning)允许元素相对于其最近的定位祖先元素进行定位。

GETTING FANCY(高级技巧)

  1. hiding elements: 隐藏元素可以通过多种方式实现,如设置 display: nonevisibility: hidden
  2. stacking contexts: 堆叠上下文(stacking context)是 CSS 中用于管理元素层叠顺序的概念。
  3. CSS variables: CSS 变量允许你在样式表中定义可重用的值,并在整个文档中使用。
  4. transitions: 过渡(transitions)允许你在 CSS 属性值变化时创建平滑的动画效果。

MAKING IT WORK(实际应用)

  1. media queries: 媒体查询(media queries)用于根据设备的特性(如屏幕宽度)应用不同的样式,常用于响应式设计。
  2. the CSS inspector: CSS 检查器是浏览器开发者工具的一部分,用于检查和调试网页的 CSS。
  3. testing checklist: 测试清单是一系列步骤或检查点,用于确保 CSS 在不同浏览器和设备上正常工作。

这个目录涵盖了从基础到高级的 CSS 主题,适合不同水平的读者学习和参考。如果你对某个具体主题有疑问或需要更详细的解释,请告诉我!

P6-CSS specifications

Hell Yes CSS (Julia Evans) (Z-Library)-06

这段内容介绍了 CSS 规范(CSS specifications)的基本概念和相关信息。以下是对内容的详细解释:

CSS 规范(CSS Specifications)

  1. CSS 规范的定义:

    • CSS 规范是由 W3C(万维网联盟)制定的标准文档,详细描述了 CSS 的各种特性和行为。
    • 每个 CSS 特性(如 max-widthflexboxtransforms 等)都有其独立的规范文档。
  2. CSS 2:

    • CSS 2 是早期的 CSS 规范版本,发布于 1998 年。它包含了 CSS 的基础特性,如盒模型、选择器、文本样式等。
    • 尽管现在有很多新的 CSS 特性,CSS 2 仍然是学习 CSS 基础的重要参考。
  3. 现代 CSS 规范:

    • 如今,每个 CSS 特性都有独立的规范文档。例如,flexboxgridtransforms 等都有各自的规范。
    • 你可以在 W3C 的 CSS 规范页面 找到所有这些规范。
  4. 浏览器对规范的实现:

    • 主流浏览器(如 Chrome、Firefox、Safari、Edge)通常会遵循 CSS 规范来实现 CSS 特性。
    • 但有时浏览器可能存在 bug 或未完全实现某些特性,导致行为与规范不一致。
  5. CSS 版本(Levels):

    • CSS 的版本被称为“级别”(Levels),例如 CSS Level 1、CSS Level 2、CSS Level 3 等。
    • 新的 CSS 级别只会添加新特性,而不会改变现有 CSS 代码的行为。这意味着旧代码在新版本中仍然有效。
  6. 新特性的实现:

    • 新的 CSS 特性需要时间才能被浏览器广泛支持。你可以使用 Can I use 网站来查看某个 CSS 特性在不同浏览器版本中的支持情况。

关键术语解释

  1. max-width: 一个 CSS 属性,用于设置元素的最大宽度。如果内容超过这个宽度,元素会自动调整大小以适应。
  2. flexbox: 一种 CSS 布局模块,用于创建灵活的、响应式的布局。
  3. transforms: 一种 CSS 特性,允许你对元素进行旋转、缩放、倾斜等变换。
  4. Can I use: 一个网站,用于检查不同浏览器对 CSS、HTML5 和 JavaScript 特性的支持情况。

这段内容强调了 CSS 规范的重要性,并解释了如何通过规范文档和工具(如 Can I use)来学习和使用 CSS。

P7-backwards compatibility

Hell Yes CSS (Julia Evans) (Z-Library)-07

这段内容讨论了 CSS 的向后兼容性(backwards compatibility),并解释了它对开发者的影响。以下是对内容的详细解释:

向后兼容性(Backwards Compatibility)

  1. 定义:

    • 向后兼容性指的是浏览器能够支持旧的 HTML 和 CSS 代码,即使这些代码是多年前编写的。
    • 例如,1988 年编写的 CSS 代码在现代浏览器中仍然可以正常运行。
  2. 优点:

    • 长期稳定性: 由于浏览器支持旧的代码,开发者可以放心地编写 CSS,而不必担心未来的浏览器更新会破坏现有的样式。
    • 投资价值: 花费时间调试和编写的 CSS 代码在未来仍然有效,这使得学习和使用 CSS 成为一项值得的投资。
  3. 挑战:

    • 奇怪的 CSS 单位: 由于 CSS 需要支持旧的行为,一些 CSS 单位(如 pxemrem 等)可能看起来很奇怪或难以理解。这些单位的设计考虑了历史兼容性。
    • 复杂性: 为了确保兼容性,CSS 的某些部分可能变得复杂,开发者需要花费更多时间调试和适配。
  4. 标准和实验性特性:

    • 如果开发者使用了非标准的或实验性的 CSS 特性,可能会失去向后兼容性。例如,某些浏览器可能会停止支持实验性特性,导致网站样式失效。
    • 示例:如果 Firefox 停止支持某个实验性特性,依赖该特性的网站可能会“崩溃”。

现代 CSS 开发建议

  1. 不需要支持所有旧浏览器:

    • 开发者不需要确保 CSS 在 1988 年的浏览器中正常工作,只需关注用户实际使用的浏览器即可。
    • 使用工具(如 Can I use)检查目标浏览器的支持情况。
  2. 新特性的优势:

    • 新的 CSS 特性通常更易于使用,并且能够更好地满足现代网页设计的需求。
    • 例如,现代 CSS 特性(如 flexboxgridmedia queries)使得响应式设计(responsive design)变得更加简单。
  3. 用户期望的变化:

    • 自 1988 年以来,用户对网站的期望发生了巨大变化。现代网站需要适应多种设备和屏幕尺寸,而新的 CSS 特性正是为此设计的。

关键术语解释

  1. CSS 单位:

    • CSS 单位用于定义长度、宽度、间距等。常见的单位包括:

      • px(像素):绝对单位。
      • em:相对于父元素的字体大小。
      • rem:相对于根元素(<html>)的字体大小。
      • %:百分比单位,相对于父元素的尺寸。
  2. 响应式设计(Responsive Design):

    • 一种网页设计方法,使网站能够根据设备的屏幕尺寸自动调整布局和样式。
  3. 实验性特性:

    • 浏览器引入的新特性,可能尚未成为标准。这些特性通常带有浏览器前缀(如 -webkit--moz-),并且可能在未来被修改或移除。

这段内容强调了 CSS 向后兼容性的重要性,同时也提醒开发者不必过度关注旧浏览器的支持。现代 CSS 特性更易于使用,并且能够更好地满足现代网页设计的需求。

P8-a few CSS selectors

Hell Yes CSS (Julia Evans) (Z-Library)-08

这段内容介绍了一些常见的 CSS 选择器(CSS Selectors),这些选择器用于选择 HTML 元素并应用样式。以下是对每个选择器的详细解释:


1. .button

  • 作用: 选择所有具有 class="button" 的元素。
  • 示例:

    <a class="button">Click me</a>
    .button { color: red; }

2. div > .button

  • 作用: 选择所有作为 div 元素直接子元素.button 元素。
  • 示例:

    <div>
      <a class="button">Click me</a> <!-- 匹配 -->
      <span>
        <a class="button">Not matched</a> <!-- 不匹配 -->
      </span>
    </div>

3. :checked

  • 作用: 选择所有被选中的复选框(<input type="checkbox">)或单选按钮(<input type="radio">)。
  • 示例:

    <input type="checkbox" id="agree">
    <label for="agree">I agree</label>
    :checked { background-color: yellow; }

4. div

  • 作用: 选择所有 <div> 元素。
  • 示例:

    <div>This is a div</div>
    div { border: 1px solid black; }

5. div .button

  • 作用: 选择所有作为 div 元素后代.button 元素(不一定是直接子元素)。
  • 示例:

    <div>
      <a class="button">Click me</a> <!-- 匹配 -->
      <span>
        <a class="button">Also matched</a> <!-- 匹配 -->
      </span>
    </div>

6. .button, #welcome

  • 作用: 选择所有 .button 元素和 id="welcome" 的元素(逗号表示“或”)。
  • 示例:

    <a class="button">Click me</a>
    <div id="welcome">Welcome!</div>
    .button, #welcome { color: blue; }

7. a:hover

  • 作用: 选择所有鼠标悬停在其上的 <a> 元素。
  • 示例:

    <a href="#">Hover over me</a>
    a:hover { color: green; }

8. #welcome

  • 作用: 选择具有 id="welcome" 的元素。
  • 示例:

    <div id="welcome">Welcome!</div>
    #welcome { font-size: 20px; }

9. div.button

  • 作用: 选择所有具有 class="button"<div> 元素。
  • 示例:

    <div class="button">Click me</div>
    div.button { background-color: yellow; }

10. [href^="http"]

  • 作用: 选择所有 href 属性值以 http 开头的 <a> 元素。
  • 示例:

    <a href="http://example.com">External link</a>
    <a href="/about">Internal link</a> <!-- 不匹配 -->
    [href^="http"] { color: purple; }

11. tr:nth-child(odd)

  • 作用: 选择表格中所有奇数行(<tr> 元素)。
  • 示例:

    <table>
      <tr><td>Row 1</td></tr>
      <tr><td>Row 2</td></tr>
      <tr><td>Row 3</td></tr>
    </table>
    tr:nth-child(odd) { background-color: lightgray; }

这些选择器是 CSS 中非常常用的工具,能够帮助你精确地选择并样式化 HTML 元素。

P9-specificity

Hell Yes CSS (Julia Evans) (Z-Library)-09

这段内容详细解释了 CSS 特异性(Specificity) 的概念,即当多个 CSS 规则应用于同一个元素时,浏览器如何决定使用哪个规则。以下是对内容的详细解释:


1. 什么是特异性(Specificity)?

  • 当多个 CSS 规则为同一个元素的同一个属性设置不同的值时,浏览器需要决定使用哪个规则。
  • 特异性 是浏览器用来确定哪个规则优先级更高的机制。特异性越高的规则,优先级越高。

2. 特异性的计算规则

  • 特异性是基于选择器的类型和组合来计算的。以下是选择器的优先级(从高到低):

    1. !important: 最高优先级,但应谨慎使用,因为它难以覆盖。
    2. 内联样式(Inline Styles): 直接在 HTML 元素中使用的 style 属性。
    3. ID 选择器(#id): 如 #start-link
    4. 类选择器(.class)、伪类选择器(:pseudo-class): 如 .button:hover
    5. 元素选择器(element): 如 diva

3. 示例解析

  • 示例 1:

    a:visited {
        color: purple;
        font-size: 1.2em;
    }
    #start-link {
        color: orange;
    }
    • 对于 <a id="start-link" href="#"> 元素:

      • color: orange 会被应用,因为 #start-link(ID 选择器)比 a:visited(伪类选择器)具有更高的特异性。
      • font-size: 1.2em 仍然会从 a:visited 规则中应用,因为没有其他规则覆盖它。
  • 示例 2:

    .sidebar .link {
        color: orange;
    }
    #header a {
        color: purple;
    }
    • 对于 <div id="header"><a class="link"> 元素:

      • color: purple 会被应用,因为 #header a(ID + 元素选择器)比 .sidebar .link(类 + 类选择器)具有更高的特异性。

4. !important 的作用

  • !important 是 CSS 中的一种强制优先级机制,它会覆盖其他所有规则。
  • 示例:

    a {
        color: blue !important;
    }
    #start-link {
        color: orange;
    }
    • 即使 #start-link 具有更高的特异性,color: blue 仍然会被应用,因为它使用了 !important
  • 注意: 过度使用 !important 会导致代码难以维护,应尽量避免。

5. 内联样式的优先级

  • 内联样式(直接在 HTML 元素中使用 style 属性)的优先级高于外部或内部样式表中的规则。
  • 示例:

    <a id="start-link" href="#" style="color: green;">Link</a>
    • 即使有 #start-link { color: orange; }color: green 仍然会被应用,因为内联样式的优先级更高。

6. 总结

  • 特异性 是 CSS 中非常重要的概念,它决定了当多个规则冲突时,哪个规则会被应用。
  • 优先级顺序:!important > 内联样式 > ID 选择器 > 类/伪类选择器 > 元素选择器。
  • 尽量避免使用 !important,以保持代码的可维护性。

P10-default stylesheets

Hell Yes CSS (Julia Evans) (Z-Library)-10

这段内容介绍了 默认样式表(Default Stylesheets) 和 CSS 属性的优先级。以下是对内容的详细解释:


1. 默认样式表(Default Stylesheet)

  • 定义: 每个浏览器都有一个默认样式表(也称为“用户代理样式表”),用于为 HTML 元素提供基本的样式。
  • 作用: 默认样式表确保即使没有自定义 CSS,HTML 元素也能以合理的方式显示。
  • 示例:

    h1 {
        font-size: 2em;
        font-weight: bold;
    }
    • 这是 Firefox 默认样式表中对 <h1> 元素的定义。

2. 不同浏览器的默认样式

  • 不同浏览器(如 Chrome、Firefox、Safari、Edge)的默认样式表可能有所不同。
  • 常见差异: 按钮(<button>)和表单元素(如 <input><select>)的默认样式差异较大。

3. 查看默认样式表

  • 你可以查看浏览器的默认样式表。例如,Firefox 的默认样式表位于:

    resource://gre-resources/
  • 这些文件定义了浏览器如何在没有自定义 CSS 的情况下渲染 HTML 元素。

4. 初始值(Initial Value)

  • 每个 CSS 属性都有一个默认的 初始值,这是在 CSS 规范中定义的。
  • 如果没有样式表(包括默认样式表和自定义样式表)为某个属性设置值,浏览器会使用该属性的初始值。
  • 示例:

    • background-color 的初始值是 transparent(透明)。
    • font-size 的初始值通常是 medium

5. CSS 属性的优先级

CSS 属性可以通过以下 5 种方式设置,优先级从低到高依次为:

  1. 初始值(Initial Value):

    • 如果没有任何样式表设置属性值,浏览器会使用初始值。
  2. 浏览器的默认样式表(User Agent Stylesheet):

    • 浏览器为 HTML 元素提供的默认样式。
  3. 网站的样式表(Author Stylesheet):

    • 开发者编写的 CSS 文件或 <style> 标签中的样式。
  4. 用户样式表(User Stylesheet):

    • 用户自定义的样式表(较少见)。
  5. 内联样式(Inline Styles):

    • 直接在 HTML 元素中使用 style 属性设置的样式,优先级最高。

6. 示例

  • HTML:

    <h1 style="color: red;">Hello World</h1>
  • CSS:

    h1 {
        color: blue;
    }
  • 结果: <h1> 的文字颜色为红色,因为内联样式的优先级高于网站的样式表。

7. 总结

  • 默认样式表确保 HTML 元素在没有自定义 CSS 时也能正常显示。
  • 不同浏览器的默认样式可能有所不同,尤其是按钮和表单元素。
  • CSS 属性的优先级从低到高依次为:初始值 < 默认样式表 < 网站样式表 < 用户样式表 < 内联样式。
  • 了解这些优先级有助于更好地控制网页的样式。

P11-units

Hell Yes CSS (Julia Evans) (Z-Library)-11

这段内容介绍了 CSS 单位(Units),包括绝对单位和相对单位,并解释了它们的用途和区别。以下是对内容的详细解释:


1. CSS 单位的分类

CSS 单位分为两类:

  • 绝对单位(Absolute Units): 固定大小的单位,不随其他因素变化。
  • 相对单位(Relative Units): 相对于其他值(如字体大小或视口大小)的单位,具有灵活性。

2. 绝对单位

  • 常见绝对单位:

    • px(像素)
    • pt(点,1pt = 1/72 英寸)
    • pc(派卡,1pc = 12pt)
    • in(英寸)
    • cm(厘米)
    • mm(毫米)
  • 特点:

    • 绝对单位的大小是固定的,不会随页面缩放或用户设置变化。
    • 示例:font-size: 16px; 表示字体大小为 16 像素。

3. 相对单位

  • 常见相对单位:

    • em: 相对于父元素的字体大小。
    • rem: 相对于根元素(<html>)的字体大小。
    • vw: 相对于视口宽度的 1%。
    • vh: 相对于视口高度的 1%。
    • %: 相对于父元素的尺寸。
  • 特点:

    • 相对单位具有灵活性,能够根据上下文动态调整大小。

4. rem 单位

  • 定义: rem 是相对于根元素(<html>)的字体大小的单位。
  • 特点:

    • 1rem 等于根元素的字体大小(通常为 16px,除非显式修改)。
    • rem 是设置字体大小的好单位,因为它在整个文档中保持一致。
  • 示例:

    html {
        font-size: 16px;
    }
    .model {
        width: 20rem; /* 20 * 16px = 320px */
    }

5. em 单位

  • 定义: em 是相对于父元素的字体大小的单位。
  • 特点:

    • 如果父元素的字体大小为 16px1.5em 就是 24px
    • em 的值会随着父元素的字体大小变化。
  • 示例:

    .parent {
        font-size: 16px;
    }
    .child {
        font-size: 1.5em; /* 1.5 * 16px = 24px */
    }

6. 0 的特殊性

  • 0 在所有单位中相同:

    • 无论使用 pxemrem 还是其他单位,0 的值都是相同的。
    • 示例:margin: 0; 表示外边距为 0。
  • 0none 的区别:

    • border: 0; 设置边框宽度为 0。
    • border: none; 设置边框样式为无。

7. 绝对单位的实际大小

  • 1 inch = 96px:

    • 在屏幕上,CSS 中的 1 inch 并不等于实际的 1 英寸,1px 也不一定等于屏幕的物理像素。
    • 这与 设备像素比(Device Pixel Ratio) 有关,高分辨率屏幕可能会将 1 个 CSS 像素映射为多个物理像素。

8. remem 的辅助功能

  • 优势:

    • 使用 remem 可以使页面更好地适应不同的用户设置。
    • 如果用户增加了浏览器的默认字体大小,使用 remem 的元素会自动缩放,提升可访问性。
  • 示例:

    .model {
        width: 20rem; /* 根据根元素字体大小动态调整 */
    }

9. 总结

  • 绝对单位(如 pxin)适合需要固定大小的场景。
  • 相对单位(如 remem%)适合需要灵活性和响应式设计的场景。
  • remem 有助于提升页面的可访问性,特别是在用户调整字体大小时。

P12-inline vs block

Hell Yes CSS (Julia Evans) (Z-Library)-12

这段内容详细解释了 内联元素(Inline Elements)块级元素(Block Elements) 的区别,以及如何使用 display 属性来控制元素的布局行为。以下是对内容的详细解释:


1. 内联元素(Inline Elements)

  • 特点:

    • 默认情况下,内联元素在页面上水平排列。
    • 它们不会独占一行,而是与其他内联元素共享同一行。
    • 内联元素忽略 widthheight 属性(除非使用 line-height 调整高度)。
  • 常见内联元素:

    • <a><span><strong><i><small><abbr><img><q><code> 等。
  • 示例:

    <a href="#">Link</a>
    <span>Text</span>
    <img src="image.jpg" alt="Image">

2. 块级元素(Block Elements)

  • 特点:

    • 默认情况下,块级元素在页面上垂直排列,每个元素独占一行。
    • 块级元素可以设置 widthheight 属性。
  • 常见块级元素:

    • <p><div><ol><ul><li><h1><h6><blockquote><pre> 等。
  • 示例:

    <div>Block 1</div>
    <p>Block 2</p>

3. display 属性

  • 作用: display 属性用于控制元素的布局行为,包括:

    1. 元素本身是内联、块级还是其他类型。
    2. 子元素的布局方式(如 flexgrid 等)。
  • 常见值:

    • inline: 元素表现为内联元素。
    • block: 元素表现为块级元素。
    • inline-block: 元素表现为内联元素,但可以设置 widthheight
    • flex: 元素表现为弹性盒子容器。
    • grid: 元素表现为网格容器。

4. inline-block 的特殊性

  • 特点:

    • inline-block 使块级元素像内联元素一样水平排列,同时保留块级元素的特性(如可以设置 widthheight)。
  • 示例:

    .box {
        display: inline-block;
        width: 100px;
        height: 100px;
        background-color: lightblue;
    }
    <div class="box">Box 1</div>
    <div class="box">Box 2</div>

5. 内联元素的例外情况

  • <img> 元素:

    • <img> 是内联元素,但它是一个 替换元素(Replaced Element),可以设置 widthheight
  • line-height:

    • 对于其他内联元素,可以通过 line-height 调整高度。

6. 布局的灵活性

  • 如果需要更复杂的布局,可以使用 display: flexdisplay: grid
  • 示例:

    .container {
        display: flex;
        justify-content: space-between;
    }
    <div class="container">
        <div>Item 1</div>
        <div>Item 2</div>
    </div>

7. 总结

  • 内联元素 水平排列,适合用于文本或小部件。
  • 块级元素 垂直排列,适合用于布局容器。
  • 使用 display 属性可以灵活控制元素的布局行为,如 inline-blockflexgrid

P13-the box model

Hell Yes CSS (Julia Evans) (Z-Library)-13

这段内容详细解释了 CSS 盒模型(Box Model),包括盒模型的组成部分及其行为。以下是对内容的详细解释:


1. 盒模型的基本概念

  • 定义: 每个 HTML 元素都被视为一个矩形盒子,这个盒子由以下部分组成:

    1. 内容(Content): 元素的实际内容(如文本、图片等)。
    2. 内边距(Padding): 内容与边框之间的空间。
    3. 边框(Border): 围绕内容和内边距的线条。
    4. 外边距(Margin): 盒子与其他元素之间的空间。

2. 盒模型的组成部分

  • 内容(Content):

    • widthheight 属性定义。
  • 内边距(Padding):

    • 使用 padding 属性设置。
    • 示例:padding: 10px;
  • 边框(Border):

    • 使用 border 属性设置。
    • 示例:border: 1px solid black;
  • 外边距(Margin):

    • 使用 margin 属性设置。
    • 示例:margin: 20px;

3. widthheight 的行为

  • 默认情况下,widthheight 只定义内容区域的大小,不包括内边距、边框和外边距。
  • 示例:

    .box {
        width: 100px;
        height: 100px;
        padding: 10px;
        border: 5px solid black;
        margin: 20px;
    }
    • 实际占用的总宽度 = width + padding + border + margin = 100px + 20px + 10px + 40px = 170px

4. box-sizing: border-box

  • 作用: 将 widthheight 定义为包括内容、内边距和边框的总大小。
  • 示例:

    .box {
        box-sizing: border-box;
        width: 100px;
        height: 100px;
        padding: 10px;
        border: 5px solid black;
    }
    • 实际内容区域的宽度 = width - padding - border = 100px - 20px - 10px = 70px
  • 优点: 使用 border-box 可以更直观地控制元素的总大小。

5. 外边距合并(Margin Collapse)

  • 定义: 当两个垂直相邻的元素都有外边距时,它们的外边距会合并为一个外边距(取较大的值)。
  • 示例:

    .box1 {
        margin-bottom: 20px;
    }
    .box2 {
        margin-top: 30px;
    }
    • box1box2 之间的实际外边距为 30px(而不是 50px)。
  • 注意: 外边距合并只发生在垂直方向上,水平方向不会合并。

6. 事件触发的范围

  • 内边距和边框: 点击内边距或边框会触发元素的 onclick 事件。
  • 外边距: 点击外边距不会触发元素的 onclick 事件。

7. 总结

  • 盒模型 是 CSS 布局的基础,理解其组成部分(内容、内边距、边框、外边距)非常重要。
  • 使用 box-sizing: border-box 可以更直观地控制元素的总大小。
  • 外边距合并 是 CSS 中的一个常见现象,特别是在垂直布局中。

P14-padding + margin syntax

Hell Yes CSS (Julia Evans) (Z-Library)-14
这段内容详细介绍了 内边距(Padding)外边距(Margin) 的语法及其区别。以下是对内容的详细解释:


1. 内边距(Padding)的语法

  • 定义: 内边距是内容与边框之间的空间,可以使用 padding 属性设置。
  • 四种设置方式:

    1. 所有边相同:

      padding: 1em;
      • 上下左右的内边距均为 1em
    2. 垂直和水平:

      padding: 1em 2em;
      • 上下内边距为 1em,左右内边距为 2em
    3. 上、水平、下:

      padding: 1em 2em 3em;
      • 上内边距为 1em,左右内边距为 2em,下内边距为 3em
    4. 上、右、下、左:

      padding: 1em 2em 3em 4em;
      • 上内边距为 1em,右内边距为 2em,下内边距为 3em,左内边距为 4em
  • 记忆技巧:

    • TRBL: 顺序为 Top(上)、Right(右)、Bottom(下)、Left(左)。
    • 顺时针方向: 从顶部开始,顺时针依次设置。

2. 单独设置某一边的内边距

  • 可以使用以下属性单独设置某一边的内边距:

    padding-top: 1em;
    padding-right: 10px;
    padding-bottom: 3em;
    padding-left: 4em;

3. 外边距(Margin)的语法

  • 定义: 外边距是元素与其他元素之间的空间,可以使用 margin 属性设置。
  • 语法与 padding 相同:

    margin: 1em; /* 所有边相同 */
    margin: 1em 2em; /* 垂直和水平 */
    margin: 1em 2em 3em; /* 上、水平、下 */
    margin: 1em 2em 3em 4em; /* 上、右、下、左 */
  • 单独设置某一边的外边距:

    margin-top: 1em;
    margin-right: 10px;
    margin-bottom: 3em;
    margin-left: 4em;

4. 内边距与外边距的区别

  1. 位置:

    • 内边距 在元素内部,背景颜色会覆盖内边距。
    • 外边距 在元素外部,背景颜色不会覆盖外边距。
  2. 点击事件:

    • 点击内边距会触发元素的点击事件,点击外边距不会。
  3. 居中:

    • 可以使用 margin: auto; 实现水平居中,但 padding 不能用于居中。
  4. 负值:

    • 外边距可以为负值(如 margin: -10px;),但内边距不能为负值。

5. 边框宽度(Border Width)的语法

  • 边框宽度的设置顺序与 paddingmargin 相同:

    border-width: 1em 2em 3em 4em; /* 上、右、下、左 */

6. 总结

  • 内边距外边距 的语法非常相似,都可以通过简写形式或单独属性设置。
  • 内边距在元素内部,外边距在元素外部。
  • 外边距可以用于居中,且支持负值;内边距不支持负值。

P15-borders

Hell Yes CSS (Julia Evans) (Z-Library)-15

这段内容详细介绍了 边框(Border) 及其相关属性,包括边框样式、圆角、阴影和轮廓。以下是对内容的详细解释:


1. 边框的组成部分

  • 定义: 边框由三个部分组成:

    1. 边框宽度(Border Width): 如 2px
    2. 边框样式(Border Style): 如 solid(实线)。
    3. 边框颜色(Border Color): 如 black(黑色)。
  • 简写语法:

    border: 2px solid black;

    等同于:

    border-width: 2px;
    border-style: solid;
    border-color: black;

2. 边框样式(Border Style)

  • 常见样式:

    • solid: 实线。
    • dotted: 点线。
    • dashed: 虚线。
    • double: 双线。
    • 其他样式:inset(内嵌)、groove(凹槽)等。
  • 示例:

    border-style: dotted;

3. 单独设置某一边的边框

  • 可以使用以下属性单独设置某一边的边框:

    border-bottom: 2px solid black;

    其他属性:

    • border-top
    • border-right
    • border-left

4. 圆角(Border Radius)

  • 定义: border-radius 用于设置元素的圆角。
  • 示例:

    border-radius: 10px; /* 圆角半径为 10px */
    border-radius: 50%; /* 将正方形变为圆形 */
  • 特点:

    • 可以使用百分比或固定值(如 pxem)。
    • 设置为 50% 时,正方形元素会变为圆形。

5. 阴影(Box Shadow)

  • 定义: box-shadow 用于为元素添加阴影。
  • 语法:

    box-shadow: 5px 5px 8px black;
    • 5px: 水平偏移(x 轴)。
    • 5px: 垂直偏移(y 轴)。
    • 8px: 模糊半径(blur radius)。
    • black: 阴影颜色。
  • 示例:

    box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); /* 带透明度的阴影 */

6. 轮廓(Outline)

  • 定义: outline 类似于边框,但它不会影响元素的尺寸。
  • 特点:

    • 轮廓不占用空间,不会改变布局。
    • 常用于 :hover:focus 状态,提升可访问性。
  • 示例:

    outline: 2px solid blue;
  • 可访问性:

    • 在键盘导航时,轮廓可以帮助用户识别当前聚焦的元素。

7. 总结

  • 边框 由宽度、样式和颜色组成,可以使用简写语法或单独属性设置。
  • 圆角 通过 border-radius 实现,支持百分比和固定值。
  • 阴影 通过 box-shadow 添加,可以设置偏移、模糊半径和颜色。
  • 轮廓 类似于边框,但不影响布局,常用于提升可访问性。

P16-flexbox basics

Hell Yes CSS (Julia Evans) (Z-Library)-16

这段内容介绍了 Flexbox 的基础知识,包括如何使用 display: flex 创建弹性布局,以及常见的 Flexbox 属性。以下是对内容的详细解释:


1. Flexbox 的基本概念

  • 定义: Flexbox 是一种用于创建灵活布局的 CSS 模块,特别适合一维布局(行或列)。
  • 使用方法: 在父元素上设置 display: flex;,其子元素会自动成为弹性项目(flex items)。

2. flex-direction 属性

  • 作用: 定义子元素的排列方向。
  • 默认值: flex-direction: row;(子元素水平排列)。
  • 其他选项:

    • row: 子元素从左到右排列。
    • row-reverse: 子元素从右到左排列。
    • column: 子元素从上到下排列。
    • column-reverse: 子元素从下到上排列。
  • 示例:

    .container {
        display: flex;
        flex-direction: row;
    }

3. flex-wrap 属性

  • 作用: 控制子元素是否换行。
  • 默认值: flex-wrap: nowrap;(子元素不换行,可能会溢出容器)。
  • 其他选项:

    • wrap: 子元素在容器宽度不足时换行。
    • wrap-reverse: 子元素换行,但顺序相反。
  • 示例:

    .container {
        display: flex;
        flex-wrap: wrap;
    }

4. justify-content 属性

  • 作用: 控制子元素在主轴(水平方向)上的对齐方式。
  • 常见值:

    • center: 子元素居中对齐。
    • flex-start: 子元素向主轴起点对齐(默认值)。
    • flex-end: 子元素向主轴终点对齐。
    • space-between: 子元素均匀分布,首尾元素贴边。
    • space-around: 子元素均匀分布,周围留有相等空间。
  • 示例:

    .container {
        display: flex;
        justify-content: center;
    }

5. align-items 属性

  • 作用: 控制子元素在交叉轴(垂直方向)上的对齐方式。
  • 常见值:

    • center: 子元素居中对齐。
    • flex-start: 子元素向交叉轴起点对齐。
    • flex-end: 子元素向交叉轴终点对齐。
    • stretch: 子元素拉伸以填满容器高度(默认值)。
  • 示例:

    .container {
        display: flex;
        align-items: center;
    }

6. 嵌套 Flexbox

  • 特点: 可以在一个 Flexbox 容器中嵌套另一个 Flexbox 容器,以实现更复杂的布局。
  • 示例:

    <div class="container">
        <div class="item">Item 1</div>
        <div class="item">Item 2</div>
        <div class="nested-container">
            <div class="nested-item">Nested Item 1</div>
            <div class="nested-item">Nested Item 2</div>
        </div>
    </div>
    .container {
        display: flex;
    }
    .nested-container {
        display: flex;
    }

7. 总结

  • Flexbox 是一种强大的布局工具,适合创建灵活的、响应式的一维布局。
  • 常用属性包括 flex-directionflex-wrapjustify-contentalign-items
  • 可以通过嵌套 Flexbox 容器实现更复杂的布局。

P17-CSS grid! areas!

Hell Yes CSS (Julia Evans) (Z-Library)-17

这段内容介绍了 CSS Grid 中的一个强大功能:网格区域(Grid Areas)。通过网格区域,你可以以直观的方式定义复杂的布局。以下是对内容的详细解释:


1. CSS Grid 的基本概念

  • 定义: CSS Grid 是一种用于创建二维布局的 CSS 模块,适合复杂的网页布局。
  • 网格区域(Grid Areas): 网格区域允许你为布局中的每个部分命名,并通过名称来放置元素。

2. 使用网格区域的步骤

  • 步骤 1: 编写 HTML 结构

    <div class="grid">
        <div class="top">Header</div>
        <div class="side">Sidebar</div>
        <div class="main">Content</div>
    </div>
  • 步骤 2: 定义网格区域

    .grid {
        display: grid;
        grid-template-columns: 200px 800px; /* 定义两列,宽度分别为 200px 和 800px */
        grid-template-areas:
            "header header"  /* 第一行:header 占据两列 */
            "sidebar content"; /* 第二行:sidebar 和 content 各占一列 */
    }
    • grid-template-areas 通过直观的方式定义布局,类似于绘制布局图。
  • 步骤 3: 为每个元素分配网格区域

    .top {
        grid-area: header; /* 将 .top 元素放置在 header 区域 */
    }
    .side {
        grid-area: sidebar; /* 将 .side 元素放置在 sidebar 区域 */
    }
    .main {
        grid-area: content; /* 将 .main 元素放置在 content 区域 */
    }

3. 布局效果

  • 最终布局:

    ---------------------
    |       Header       |
    ---------------------
    | Sidebar | Content  |
    ---------------------
  • 解释:

    • header 区域占据整个第一行。
    • sidebarcontent 区域分别占据第二行的两列。

4. 网格区域的优势

  • 直观性: 通过 grid-template-areas,你可以以近乎视觉化的方式定义布局,便于理解和维护。
  • 灵活性: 网格区域可以轻松调整布局结构,只需修改 grid-template-areas 的值即可。

5. 总结

  • CSS Grid 的网格区域功能非常适合创建复杂的二维布局。
  • 通过 grid-template-areasgrid-area,你可以直观地定义和分配布局区域。
  • 这种方法使布局代码更易读、更易维护。

P18-centering

Hell Yes CSS (Julia Evans) (Z-Library)-18

这段内容介绍了如何在 CSS 中实现 文本居中块级元素居中,并提供了多种方法。以下是对内容的详细解释:


1. 文本居中

  • 方法: 使用 text-align 属性。
  • 示例:

    h2 {
        text-align: center;
    }
  • 效果: 文本在容器中水平居中。

2. 块级元素水平居中

  • 方法: 使用 margin: auto;
  • 示例:

    <div class="parent">
        <div class="child"></div>
    </div>
    .child {
        width: 400px;
        margin: auto; /* 水平居中 */
    }
  • 注意: margin: auto; 只能实现水平居中,不能实现垂直居中。

3. 块级元素垂直居中

  • 方法 1: 使用 Grid 布局

    .parent {
        display: grid;
        place-items: center; /* 水平和垂直居中 */
    }
    • 解释: place-items: center;justify-itemsalign-items 的简写,用于在 Grid 容器中居中子元素。
  • 方法 2: 使用 Flexbox 布局

    .parent {
        display: flex;
        justify-content: center; /* 水平居中 */
        align-items: center; /* 垂直居中 */
    }
    • 解释: justify-content 控制主轴(水平方向)的对齐,align-items 控制交叉轴(垂直方向)的对齐。

4. 使用 Flexbox 或 Grid 仅居中一个元素

  • 示例:

    <div class="parent">
        <div class="child">Centered!</div>
    </div>
    .parent {
        display: flex; /* 或 display: grid; */
        justify-content: center;
        align-items: center;
    }
  • 效果: 即使只有一个子元素,也可以使用 Flexbox 或 Grid 轻松实现居中。

5. 总结

  • 文本居中: 使用 text-align: center;
  • 块级元素水平居中: 使用 margin: auto;
  • 块级元素垂直居中: 使用 Grid 的 place-items: center; 或 Flexbox 的 justify-content: center; align-items: center;
  • Flexbox 和 Grid 不仅适用于复杂布局,也适合简单的居中需求。

P19-position:absolute

Hell Yes CSS (Julia Evans) (Z-Library)-19

这段内容详细介绍了 position: absolute 的使用方法及其行为。以下是对内容的详细解释:


1. position: absolute 的基本概念

  • 定义: position: absolute; 用于将元素从文档流中移除,并相对于其 包含块(containing block) 进行定位。
  • 包含块: 包含块是距离该元素最近的、position 不为 static 的祖先元素。如果没有这样的祖先元素,则包含块为 <body>

2. position: absolute 的使用

  • 示例:

    <div id="parent">
        <div id="square"></div>
    </div>
    #parent {
        position: relative; /* 设置包含块 */
    }
    #square {
        position: absolute;
        top: 1em;
        left: 1em;
    }
  • 解释:

    • #parent 设置了 position: relative;,因此 #square 会相对于 #parent 进行定位。
    • #square 的左上角距离 #parent 的左上角分别为 1em

3. topbottomleftright 属性

  • 作用: 这些属性用于设置绝对定位元素相对于包含块的位置。
  • 示例:

    #square {
        position: absolute;
        top: 50%; /* 距离包含块顶部 50% */
        bottom: 2em; /* 距离包含块底部 2em */
        right: 30px; /* 距离包含块右侧 30px */
        left: -3em; /* 距离包含块左侧 -3em */
    }
  • 注意:

    • 可以使用负值(如 left: -3em;)。
    • 如果同时设置 leftright,元素的宽度会根据包含块的宽度自动调整。

4. 绝对定位元素的行为

  • 脱离文档流: 绝对定位元素会从文档流中移除,不会影响其他元素的布局。
  • 父元素是否扩展: 父元素不会扩展以适应绝对定位的子元素。绝对定位元素的位置和大小不会影响父元素的尺寸。

5. 常见问题

  • 宽度计算:

    • 默认情况下,width 不包括边框和内边距。如果设置了 width: 100%;,元素可能会超出包含块的范围。
    • 可以使用 box-sizing: border-box; 来使 width 包括边框和内边距。
  • 包含块的设置:

    • 如果未设置包含块(即所有祖先元素的 position 均为 static),绝对定位元素会相对于 <body> 进行定位。

6. 总结

  • position: absolute 用于将元素从文档流中移除,并相对于包含块进行定位。
  • 包含块是距离该元素最近的、position 不为 static 的祖先元素。
  • 使用 topbottomleftright 可以精确控制绝对定位元素的位置。
  • 绝对定位元素不会影响父元素的尺寸。

P20-hiding elememts

Hell Yes CSS (Julia Evans) (Z-Library)-20

这段内容介绍了在 CSS 中隐藏元素的几种方法,并解释了它们的区别。以下是对内容的详细解释:


1. display: none;

  • 作用: 完全隐藏元素,元素不会占据任何空间。
  • 特点:

    • 元素从文档流中移除,其他元素会重新排列以填补空白。
    • 元素不可见,也无法通过点击或屏幕阅读器访问。
  • 示例:

    .hidden {
        display: none;
    }

2. visibility: hidden;

  • 作用: 隐藏元素,但元素仍占据空间。
  • 特点:

    • 元素不可见,但仍会占据布局空间。
    • 元素无法通过点击访问,但对屏幕阅读器可见。
  • 示例:

    .hidden {
        visibility: hidden;
    }

3. opacity: 0;

  • 作用: 使元素完全透明,但仍占据空间。
  • 特点:

    • 元素不可见,但仍会占据布局空间。
    • 元素可以通过点击访问,对屏幕阅读器也可见。
    • 可以与 transition 结合使用,实现淡出效果。
  • 示例:

    .fade-out {
        opacity: 0;
        transition: opacity 1s ease;
    }
    .fade-out:hover {
        opacity: 1;
    }

4. z-index

  • 作用: 控制重叠元素的堆叠顺序。
  • 特点:

    • 仅对定位元素(position 不为 static)有效。
    • 可以与其他隐藏方法结合使用,控制元素的可见性和堆叠顺序。
  • 示例:

    .overlay {
        position: absolute;
        z-index: -1; /* 将元素置于其他元素下方 */
    }

5. 如何选择隐藏方法

  • display: none;:

    • 适用于完全移除元素,且不需要保留空间的情况。
  • visibility: hidden;:

    • 适用于需要保留元素空间的情况。
  • opacity: 0;:

    • 适用于需要实现淡出效果或保留交互性的情况。

6. 总结

  • display: none;: 完全隐藏元素,不占据空间。
  • visibility: hidden;: 隐藏元素,但保留空间。
  • opacity: 0;: 使元素透明,保留空间和交互性。
  • z-index: 控制重叠元素的堆叠顺序。

P21-stacking contexts

Hell Yes CSS (Julia Evans) (Z-Library)-21

这段内容详细介绍了 堆叠上下文(Stacking Contexts) 的概念及其对 z-index 的影响。以下是对内容的详细解释:


1. 堆叠上下文的基本概念

  • 定义: 堆叠上下文是 CSS 中用于管理元素层叠顺序的一种机制。每个堆叠上下文都是一个独立的层叠环境,元素在同一个堆叠上下文中的层叠顺序由 z-index 决定。
  • 类比: 堆叠上下文类似于 Photoshop 中的图层,每个图层(堆叠上下文)内部有自己的层叠顺序。

2. z-index 的作用

  • 作用: z-index 用于控制元素在堆叠上下文中的层叠顺序。
  • 示例:

    .first {
        z-index: 3;
    }
    .second {
        z-index: 0;
    }
    • .first 元素会显示在 .second 元素的上方,因为它的 z-index 值更大。

3. z-index 的限制

  • 问题: 有时即使一个元素的 z-index 值更大,它也可能不会显示在另一个元素的上方。
  • 原因: 元素可能位于不同的堆叠上下文中。z-index 只在同一个堆叠上下文中有效。
  • 示例:

    .parent1 {
        z-index: 0;
    }
    .parent2 {
        z-index: 10;
    }
    .child {
        z-index: 2;
    }
    • 如果 .child 位于 parent1 的堆叠上下文中,而 parent2 位于另一个堆叠上下文中,parent2z-index: 10 会使整个堆叠上下文位于 parent1 的上方,即使 .childz-index 更大。

4. 创建堆叠上下文

  • 方法: 以下属性会创建新的堆叠上下文:

    • positionabsoluterelativefixedsticky,并且 z-index 不为 auto
    • opacity 小于 1。
    • transformfilterwill-change 等属性。
  • 示例:

    #modal {
        z-index: 5;
        position: absolute; /* 创建新的堆叠上下文 */
    }

5. 堆叠上下文的嵌套

  • 默认行为: 元素的子元素会共享其堆叠上下文。
  • 示例:

    <div class="parent">
        <div class="child"></div>
    </div>
    .parent {
        z-index: 1;
        position: relative; /* 创建堆叠上下文 */
    }
    .child {
        z-index: 10;
    }
    • .childz-index 只在 .parent 的堆叠上下文中有效。

6. 总结

  • 堆叠上下文 是 CSS 中管理元素层叠顺序的重要机制。
  • z-index 只在同一个堆叠上下文中有效。
  • 通过 positionopacitytransform 等属性可以创建新的堆叠上下文。
  • 如果 z-index 没有按预期工作,可能是因为元素位于不同的堆叠上下文中。

P22-CSS cariables

Hell Yes CSS (Julia Evans) (Z-Library)-22

这段内容介绍了 CSS 变量(CSS Variables) 的基本用法,包括如何定义、使用和动态修改变量。以下是对内容的详细解释:


1. CSS 变量的定义

  • 语法: 使用 -- 前缀定义变量。
  • 作用域: 变量可以在任何选择器中定义,其作用域为定义它的选择器及其子元素。
  • 示例:

    body {
        --text-color: #f79; /* 定义变量 --text-color */
    }
    #header {
        --text-color: #c50; /* 在 #header 及其子元素中覆盖 --text-color */
    }

2. CSS 变量的使用

  • 语法: 使用 var() 函数引用变量。
  • 示例:

    body {
        color: var(--text-color); /* 使用变量 --text-color */
    }
  • 注意: 变量名必须以 -- 开头。

3. 在 CSS 中进行数学运算

  • 方法: 使用 calc() 函数对变量进行数学运算。
  • 示例:

    #sidebar {
        width: calc(var(--my-var) + 1em); /* 计算宽度 */
    }

4. 通过 JavaScript 动态修改变量

  • 方法: 使用 JavaScript 动态修改 CSS 变量的值。
  • 示例:

    let root = document.documentElement;
    root.style.setProperty('--text-color', 'black'); /* 将 --text-color 修改为黑色 */
  • 效果: 修改后的变量值会立即应用到所有使用该变量的元素。

5. CSS 变量的优势

  • 复用性: 可以在多个地方使用同一个变量,便于统一管理和修改。
  • 动态性: 通过 JavaScript 可以动态修改变量的值,实现实时样式更新。
  • 作用域: 变量的作用域可以限制在特定的选择器及其子元素中,避免全局污染。

6. 总结

  • CSS 变量 通过 -- 前缀定义,使用 var() 函数引用。
  • 可以在 CSS 中使用 calc() 对变量进行数学运算。
  • 通过 JavaScript 可以动态修改变量的值,实现实时样式更新。
  • CSS 变量提高了样式的复用性和灵活性。

P23-transitions

Hell Yes CSS (Julia Evans) (Z-Library)-23

这段内容详细介绍了 CSS 过渡(Transitions) 的基本概念和使用方法。以下是对内容的详细解释:


1. CSS 过渡的基本概念

  • 定义: CSS 过渡用于在元素的样式发生变化时,创建平滑的动画效果。
  • 触发条件: 样式变化可以通过伪类(如 :hover)或 JavaScript 代码触发。

2. 过渡的使用

  • 语法: 使用 transition 属性定义过渡效果。
  • 示例:

    a {
        color: blue;
        transition: all 2s; /* 所有属性变化在 2 秒内完成 */
    }
    a:hover {
        color: red; /* 鼠标悬停时颜色变为红色 */
    }
  • 效果: 当鼠标悬停在链接上时,颜色从蓝色平滑过渡到红色,持续 2 秒。

3. 过渡的三个部分

  • transition 属性 包含三个部分:

    1. 属性: 指定要过渡的 CSS 属性(如 colorwidth 等)。
    2. 持续时间: 指定过渡的持续时间(如 1s)。
    3. 时间函数: 指定过渡的速度曲线(如 ease)。
  • 示例:

    a {
        transition: color 1s ease; /* 颜色变化在 1 秒内以 ease 速度曲线完成 */
    }

4. 可过渡的属性

  • 可过渡的属性: 大多数数值和颜色属性都可以过渡,例如:

    • font-size
    • rotate
    • width
  • 不可过渡的属性: 一些属性(如 list-style-type)无法过渡。
  • 示例:

    .box {
        width: 100px;
        transition: width 1s ease;
    }
    .box:hover {
        width: 200px; /* 宽度从 100px 过渡到 200px */
    }

5. 过渡的优势

  • 平滑动画: 过渡可以使样式变化更加平滑和自然。
  • 提升用户体验: 通过过渡效果,可以增强用户交互的视觉反馈。

6. 总结

  • CSS 过渡 通过 transition 属性实现,用于在样式变化时创建平滑的动画效果。
  • 过渡包含三个部分:属性、持续时间和时间函数。
  • 大多数数值和颜色属性都可以过渡,但某些属性(如 list-style-type)无法过渡。

P24-media queries

Hell Yes CSS (Julia Evans) (Z-Library)-24

这段内容详细介绍了 媒体查询(Media Queries) 的基本概念和使用方法,以及如何通过媒体查询实现响应式设计。以下是对内容的详细解释:


1. 媒体查询的基本概念

  • 定义: 媒体查询允许你根据设备的特性(如屏幕宽度、设备类型等)应用不同的 CSS 样式。
  • 语法: 使用 @media 规则定义媒体查询。
  • 示例:

    @media print {
        #footer {
            display: none; /* 打印时隐藏页脚 */
        }
    }

2. 基于屏幕宽度的媒体查询

  • max-width: 应用于屏幕宽度小于或等于指定值的情况。

    @media (max-width: 500px) {
        /* 小屏幕样式 */
    }
  • min-width: 应用于屏幕宽度大于或等于指定值的情况。

    @media (min-width: 950px) {
        /* 大屏幕样式 */
    }

3. 设备类型

  • screen: 用于计算机和移动设备的屏幕。
  • print: 用于打印网页时的样式。
  • 其他类型: 还包括 tvttyspeechbraille 等。

4. 可访问性相关的媒体查询

  • prefers-reduced-motion: 检测用户是否偏好减少动画。

    @media (prefers-reduced-motion: reduce) {
        /* 减少动画的样式 */
    }
  • prefers-color-scheme: 检测用户是否偏好深色模式。

    @media (prefers-color-scheme: dark) {
        /* 深色模式样式 */
    }

5. 组合媒体查询

  • 语法: 可以使用 and 组合多个条件。
  • 示例:

    @media screen and (max-width: 1024px) {
        /* 屏幕宽度小于等于 1024px 时的样式 */
    }

6. Viewport Meta 标签

  • 作用: 确保网页在移动设备上正确显示。
  • 示例:

    <meta name="viewport" content="width=device-width, initial-scale=1">
  • 解释:

    • width=device-width: 使页面的宽度与设备的屏幕宽度一致。
    • initial-scale=1: 设置页面的初始缩放比例为 1。

7. 总结

  • 媒体查询 允许你根据设备的特性应用不同的 CSS 样式,是实现响应式设计的关键工具。
  • 常见的媒体查询包括基于屏幕宽度、设备类型和用户偏好的查询。
  • 使用 viewport meta 标签可以确保网页在移动设备上正确显示。

P25-the CSS inspector

Hell Yes CSS (Julia Evans) (Z-Library)-25

这段内容介绍了 CSS 检查器(CSS Inspector) 的功能及其在调试和开发中的重要性。以下是对内容的详细解释:


1. CSS 检查器的基本概念

  • 定义: CSS 检查器是浏览器开发者工具的一部分,用于检查和调试网页的 CSS。
  • 主要功能:

    • 查看和编辑元素的 CSS 属性。
    • 查看被覆盖的 CSS 属性。
    • 查看计算样式(Computed Styles)。
    • 调试布局(如盒模型、Flexbox、Grid 等)。

2. 如何使用 CSS 检查器

  • 打开方式:

    • 通常可以通过右键点击页面元素并选择“检查”(Inspect)来打开。
    • 不同浏览器可能有不同的快捷键或菜单选项。
  • 示例:

    <button>Click me</button>
    • 右键点击按钮并选择“检查”,可以查看和编辑按钮的 CSS 属性。

3. 查看和编辑 CSS 属性

  • 功能: 在 CSS 检查器中,可以直接编辑元素的 CSS 属性,并实时查看效果。
  • 示例:

    button {
        display: inline-block;
        color: var(--orange);
        border: 1px solid black;
    }
    • 在检查器中,可以修改 colorborder 属性,并立即看到按钮样式的变化。

4. 查看被覆盖的 CSS 属性

  • 功能: CSS 检查器会显示哪些样式被覆盖,并解释原因(如更高的特异性或 !important)。
  • 示例:

    button {
        color: red; /* 被覆盖 */
    }
    button.special {
        color: blue; /* 实际应用的样式 */
    }
    • 检查器会显示 color: red;color: blue; 覆盖。

5. 查看计算样式(Computed Styles)

  • 功能: 计算样式显示了元素最终应用的所有 CSS 属性值。
  • 示例:

    • 如果某个链接的 font-size 最终计算为 12px,检查器会显示这一结果。

6. 调试布局

  • 盒模型(Box Model):

    • 检查器可以显示元素的内边距(padding)、边框(border)和外边距(margin)。
  • Flexbox 和 Grid:

    • 一些浏览器(如 Firefox)提供了专门的工具来调试 Flexbox 和 Grid 布局。

7. 不同浏览器的工具

  • 浏览器差异: 不同浏览器的 CSS 检查器可能有不同的功能和界面。

    • Firefox: 提供强大的 Flexbox 和 Grid 调试工具。
    • Chrome: 提供详细的盒模型和计算样式查看功能。

8. 总结

  • CSS 检查器 是开发和调试网页样式的强大工具。
  • 主要功能包括查看和编辑 CSS 属性、查看被覆盖的样式、查看计算样式以及调试布局。
  • 不同浏览器的检查器可能有不同的功能和工具。

P27-thanks for reading

Hell Yes CSS (Julia Evans) (Z-Library)-27

这段内容总结了 CSS 学习资源,并感谢了参与制作这本小册子的人员。以下是对内容的详细解释:


1. CSS 学习资源推荐

  • CSS Tricks:

    • 网站: css-tricks.com
    • 特点: 提供数百篇有用的博客文章和指南,例如关于居中和 Flexbox 的指南。
  • Can I use...:

    • 网站: caniuse.com
    • 特点: 提供浏览器对 CSS 特性的支持情况,帮助你了解哪些浏览器版本支持特定的 CSS 功能。
  • Mozilla Developer Network (MDN):

    • 网站: developer.mozilla.org
    • 特点: 提供关于 CSS、JavaScript、HTML 和 HTTP 的详细参考文档。
  • W3C CSS 规范:

    • 网站: w3.org/TR/css
    • 特点: 提供 CSS 规范的官方文档,适合作为参考工具。

2. 感谢参与人员

  • 封面设计: Vladimir Kasikovic
  • 编辑: Dolly Lanuza, Kamal Marhubi
  • 技术审阅: Melody Starling
  • 感谢所有测试读者: 感谢他们的反馈和支持。

3. 总结

  • CSS 是一个庞大的主题,这本小册子只是冰山一角。
  • 推荐了一些高质量的学习资源,帮助你进一步深入学习 CSS。
  • 感谢所有为这本小册子做出贡献的人员。

总结

这本书内容涵盖了 CSS 基础知识布局技巧调试工具学习资源,对于了解 CSS 核心知识很有用,部分内容不易理解的,结合 DeepSeek 的解释能够帮助快速理解。

References

最后修改:2025 年 01 月 20 日
如果觉得我的文章对你有用,请随意赞赏