Skip to main content

4 posts tagged with "CSS"

View All Tags

CSS 子元素满足某个条件如何改变父元素样式?

· 6 min read

input:checked 改成父元素边框高亮、img 存在时父容器切两栏布局、表单校验状态动态联动——以前这些都需要 JS 去监听子元素状态再回头改父元素。:has() 的出现,把"子元素状态驱动父元素样式"这件事直接搬进了 CSS。

  1. 核心能力:has() 是名副其实的父选择器,根据子元素/后代/兄弟的状态反向匹配父元素或前面的兄弟。
  2. 浏览器覆盖:Chrome 105+、Safari 15.4+、Firefox 121+ 已全部支持,2024 年底起可以在生产环境放心用。
  3. 性能真相:锚定到具体类(.card:has(img))的开销是微秒级;只有 div:has(...) 这种宽泛选择器 + 频繁 DOM 变更时才是问题。
  4. 能用 CSS 就别用 JS:表单校验态切换、空状态检测、数量查询这些场景,:has() 替代 JS 后代码量减半、不会漏同步。

性能提醒:has() 选择器锚定越具体越好,避免 body:has()*:has() 这种全局监听。

Tailwindcss preflight 是做什么用的?

· 3 min read

Preflight 是 Tailwind CSS 内置的「基础样式重置/规范化」工具,基于 modern-normalize,抹平浏览器默认样式差异,统一基线,让你只用工具类就能一致地控制布局与外观。

核心做了 5 件事:

  1. 全局 box-sizing:所有元素默认 border-box,保证 padding/border 不会撑宽元素

  2. 清空默认边距:清除 h1~h6、p、ul、blockquote 等默认 margin/padding,避免意外留白

  3. 语义化但无外观:标题不再自带大小/加粗,列表去掉项目符号,只保留语义

  4. 媒体默认 block:img、svg、video、canvas 默认 display: block,避免底部空白间隙

  5. 表单元素统一:修复 Safari 等浏览器的控件样式差异,继承字体

注入到 base 层,优先级低于 components/utilities,完全不影响你写的样式。