媒体查询生成器
样式所有处理都在浏览器本地完成,数据不上传服务器
选一个条件,得到一段可以直接粘进样式表的 `@media` 块。 ⚠️ 断点的归属要有规矩。 `max-width: 767.98px` 与 `min-width: 768px` 相接,而不是 `max-width: 767px` —— 少那 `0.02` 会让 767.5px 的视口两个规则都不命中,而那个宽度在现实中是存在的(浏览器缩放、分数像素)。所以这里生成的区间一律用「上界 − 0.02」。两个数字填反了也会自动换过来,而不是生成一条永不命中的查询。 ⚠️ 两个容易被误解的查询: · `prefers-color-scheme: dark` 表示「用户表达过偏好暗色」,不是「用户现在用的是暗色」。一个只在 `dark` 里写样式的页面,在用户没表态时是白的 —— 而作者以为它「自动适配了」。 · `prefers-reduced-motion` 只是告诉你用户要求少动,它不会替你停掉任何动画。写了这个查询但没在里面真的把动画关掉,等于没写。 ⚠️ 预览显示的是「括号里面那份声明」的效果 —— 媒体查询是一个条件,没法直接应用到一个元素上。要复制的是右边那段。
功能
- 宽度断点:`min-width`、`max-width`、区间
- ⚠️ 区间的上界自动减 0.02,与下一个 `min-width` 严丝合缝,不留「谁都不管」的一段
- ⚠️ 两个数字填反时自动换过来,不生成永不命中的查询
- 偏好类:暗色 / 浅色模式、减少动效、更高对比度
- 设备类:横竖屏、是否支持悬停、主输入是不是触摸
- 打印
- 实时预览(显示的是括号里面那份声明的效果)
- ⚠️ 暗色模式那条说明它不是「现在是暗色」;减少动效那条说明它不会自动停掉动画
- 复制的是完整的 `@media … { }` 块
使用方法
- 选一个查询条件
- 宽度类的填断点;区间再填上界
- 复制右边那段,把选择器与声明改成你自己的
常见问题
- 为什么 max-width 是 767.98px 而不是 767px?
- 为了让区间严丝合缝。`max-width: 767px` 与 `min-width: 768px` 之间留下了 `767px ~ 768px` 那一段 —— 两个规则都不命中,于是某些窗口宽度下样式莫名其妙不对。而那一段在现实中是存在的:浏览器缩放到 110%、设备像素比不是整数、或者用了 `clamp()` 算出来的布局,都会产生分数像素的视口宽度。减 0.02 是社区通行的做法(Bootstrap 就是这么做的),它比任何整数都小,又比 767.98 之后的第一个分数大。
- `prefers-color-scheme: dark` 为什么没生效?
- 因为它表示的是「用户表达过偏好暗色」,不是「用户现在是暗色」。用户从没在系统里设置过主题偏好时,这个查询不命中 —— 于是只在 `dark` 里写了样式的页面,在这些人眼里是白底黑字(也就是你的默认样式)。正确的做法是先写浅色的默认样式,再在 `dark` 里覆盖,而不是把深色当默认、把浅色放进 `light`。后一种写法在「未表态」的用户那里会得到一份既不是深色也不是浅色设计过的样式。
- `prefers-reduced-motion` 写了之后动画怎么还在动?
- 因为这个查询本身什么都不做 —— 它只是一个条件,告诉你用户要求减少动效。要真的生效,得在它里面把动画关掉:`animation: none;`、`transition: none;`,或者把时长压到接近零。只写一个空的 `@media (prefers-reduced-motion: reduce) { }` 块等于没写,而它在代码里看着像是处理过了 —— 这是这个特性最常见的误用。
- 该用 `min-width` 还是 `max-width`?
- 优先用 `min-width`(移动优先)。理由不是风格,是层叠:`min-width` 的规则写在后面会自然覆盖前面的,加一个新断点只需要往后追加;而 `max-width` 的规则得插在正确的位置,越加越容易乱。而且「先给手机写基础样式、再为大屏加东西」这个顺序逼着你面对「小屏上放不下什么」,比「先做好桌面版再想办法塞进手机」更容易做对。
- 媒体查询能判断「用户用的是不是触摸设备」吗?
- 不能可靠地判断,只能问对问题。`(pointer: coarse)` 问的是「主输入设备是不是粗糙的(手指)」,`(hover: hover)` 问的是「能不能悬停」。但混合设备(带触摸屏的笔记本、平板接了鼠标)两个答案可以同时成立,而且用户随时可能切换输入方式。所以别用它来猜设备,用它来给能力做增强:`@media (hover: hover)` 里才写 `:hover` 的样式 —— 那才是它准确的用法,因为在触摸屏上「悬停」这个概念本身就不存在。
相关工具
Flex 布局
样式点按钮调 flex-direction、justify-content、align-items 等属性,实时看到布局怎么变,复制完整的 CSS 与配套 HTML。
文字竖排
样式调方向、字号、列间距与高度,实时预览竖排文字并复制 CSS。高度决定列在哪里折,是竖排必填的一项。
鼠标指针预览
样式把鼠标移到预览块上就能看到每个 cursor 关键字的样子。cursor 有三十多个取值,其中一半光看名字猜不出来。
CSS 渐变生成器
样式调角度、颜色与形状,实时预览渐变效果,一键复制 CSS。支持线性、径向与锥形三种渐变,可选中间色标。
CSS 圆角生成器
样式调四个角的圆角值,实时预览并复制 CSS。支持 px、rem 与百分比 —— 百分比在非正方形盒子上是椭圆,预览区里一眼就能看出来。
毛玻璃效果生成器
样式调模糊、透明度、饱和度与边框,实时预览毛玻璃效果并复制 CSS。代码含 -webkit- 前缀,iOS 上也能真的出现模糊。