惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Blog — PlanetScale
Blog — PlanetScale
Jina AI
Jina AI
MyScale Blog
MyScale Blog
N
Netflix TechBlog - Medium
月光博客
月光博客
云风的 BLOG
云风的 BLOG
T
The Blog of Author Tim Ferriss
博客园_首页
GbyAI
GbyAI
The Cloudflare Blog
博客园 - 叶小钗
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
Y
Y Combinator Blog
博客园 - 三生石上(FineUI控件)
量子位
博客园 - Franky
WordPress大学
WordPress大学
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
人人都是产品经理
人人都是产品经理
F
Fortinet All Blogs
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
M
MIT News - Artificial intelligence
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
InfoQ
Google DeepMind News
Google DeepMind News
S
SegmentFault 最新的问题
大猫的无限游戏
大猫的无限游戏
Apple Machine Learning Research
Apple Machine Learning Research
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Stack Overflow Blog
Stack Overflow Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Last Week in AI
Last Week in AI
J
Java Code Geeks
腾讯CDC
aimingoo的专栏
aimingoo的专栏
C
Check Point Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
Vulnerabilities – Threatpost
S
Schneier on Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
Lohrmann on Cybersecurity
S
Securelist
F
Full Disclosure
Cisco Talos Blog
Cisco Talos Blog
小众软件
小众软件
The GitHub Blog
The GitHub Blog

Oskyla 烹茶室

修复 Joplin on KDE 菜单栏显示问题 Copy Fail:Linux 内核 2017 年至今的高危漏洞(附临时缓解方案) | CVE-2026-31431 Hermes Agent — 在 K3s / K8s 中运行指南 在 K3s 节点上安装并使用 nerdctl Mouser:轻量开源的罗技鼠标驱动替代方案 Claude Opus 4.7:优缺点与评测信息汇总 openFuyao NPU-Operator故障排查 openFuyao 2603 共测测试报告 openFuyao InferNex AI推理集成部署 310P(300I Pro) 环境问题记录及解决 ceph mon Operation not permitted 问题解决 Ascend 310P + openFuyao + NPU-Operator 故障排查 KDE Plasma6 禁用全局菜单,恢复正常应用菜单 终极指南:在 Linux 裸机服务器上快速部署 Moltbot (原 Clawbot) 并集成飞书 Windows 配置 Claude Code 解决 settings.json 不生效 Windows 配置 Claude Code 全流程 2025-12-31 | 年终总结 AI 生图精品提示词|第二期:城市星球 AI 生图精品提示词|第一期 Kubernetes kubectl --raw 使用指南 彻底解决阿里云和 tailscale 冲突 2025-10-21 | 沉淀思维 macOS 单独为鼠标或触控板开启自然滚动 2025-10-16 | 负载高低 2025-10-15 | 睡眠周期 2025-10-14 | 转换情绪与独立观点 go 拉取 gitcode.com 私有 mod Git 将某个文件恢复到其他分支的状态 SSH 通过跳板机连接 lxc 使用 chronyc 构建 ntp 服务 2025-10-13 | 独立思考于未来能源 2025-10-12|AI Review 及高质量工作流 2025-10-11 | 人生阶段 2025-10-10 | AI Logo | 远程操控 AI 2025-10-09 | 去班味|银杏|域名 2025-10-08 2025-10-07 2025-10-06 2025-10-05 优秀的 SubReddit 清单 Synology 群晖重置 Syncthing 密码 让 LLM 看到真实世界的 Playwright MCP 磁盘占用分析利器 ncdu 自建 gitlab 徽标问题导致项目 500 问题解决 harbor Chartmuseum helm 图表缓存刷新 grep exclude 排除 Debian 11 + PVE LACP Mac 冲突问题调查与解决方案 Claude Code 实用技巧 CentOS 7 重置 root 密码 telnet 如何退出 kubernetes 的挂载传播(mount propagation)机制 vim 将命令输出到当前位置 harbor 替换 ssl 证书 AI提效之使用 cherry-studio + k8sgpt 实现 AI 巡检 k8s Claude Code Subagents 快速开始 《我看见的世界:李飞飞自传》 Lyra - AI Prompt Optimization Specialist Linux 自签名 CA 证书安装方法 超级玛丽、魂斗罗等经典小游戏聚合站 | PlayUnb 个人业余开发项目清单 快速选出收益最高的理财产品 | finance-calculator 苹果液态玻璃风格图像生成和模拟器 | LiquedGlass.icu Linux 进程绑定NUMA节点或CPU核心 判断GPT是否降智的几个问题 Harmony next hap 安装 名侦探柯南贝尔摩德出场集数 k3s k8s 快速部署轻量节点监控方案 beszel k3s-k8s 实现 DevOps 方案横向对比 k8s 配置访问私有镜像仓库 GoAccess 分析多网站日志方法 Octant - 以开发人员为中心的开源 Kubernetes Web 界面 Tailscale 自建 DERP 并配置 SSL 完整教程 OpenManus 使用记录 Plausible 缺失 location 信息的研究 解决 Nginx Ingress returns 413 Entity Too Large 绘图模型效果对比之城市气象 【转】k8s 认知路线 OpenFOAM 两大分支的详细比较 第一个 CUDA 程序之矩阵运算计算效能对比 Archlinux KDE Apache JMeter 配置高分屏缩放 解决 gitlab-runner 移除残留文件 permission denied nginx-ingress 配置路由 302 k8s 触发 pod 重新拉取镜像平滑升级的方法 Clickhouse 迁移后 permission denied 问题解决 Linux CPU 运行模式及功耗分析 Linux vim vi 翻页跳转命令快捷键 git 拉取所有 branch 和 tag 到本地并推送到远程 Rails 性能分析工具 rack-mini-profiler 和 bullet 全球国家、城市、地区开源数据库 Rails Active Record 常用命令 Rails Rake 简介与编写 如何调试 Vim 脚本 名侦探柯南松田阵平出场集数(最新1069话) 名侦探柯南妃英理出场集数(最新1069话) 《名侦探柯南》官方人气投票结果 名侦探柯南TV安室透出场集数(最新1110话) 名侦探柯南TV赤井秀一出场集数(更新至1194话) [转]名侦探柯南TV主线集数整理(截止1165集) 架构风格总结 [转译] 如何成为一个好的开发者? 【影评】名侦探柯南·零的执行人
跟着 《Hell Yes! CSS!》和 AI 学 CSS
Tianlun Song · 2025-01-20 · via Oskyla 烹茶室

本文 首发于 🌱 煎茶转载 请注明 来源

最近发现 ★ 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 (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>
    

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 { 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> 的文字颜色为红色,因为内联样式的优先级高于网站的样式表。

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. 所有边相同:
      • 上下左右的内边距均为 1em
    2. 垂直和水平:
      • 上下内边距为 1em,左右内边距为 2em
    3. 上、水平、下:
      • 上内边距为 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-width: 2px;
    border-style: solid;
    border-color: black;
    

2. 边框样式(Border Style)

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

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 状态,提升可访问性。
  • 示例:
  • 可访问性:
    • 在键盘导航时,轮廓可以帮助用户识别当前聚焦的元素。

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)无法过渡。

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