d-sm-none在手机上不生效是因为sm断点为≥576px,而手机竖屏宽度360–414px属于xs断点;正确写法需用d-none配合更高断点反向激活,如d-none d-lg-block。

直接用 d-{breakpoint}-{value} 类组合,别写 d-sm-none 期待它在手机上生效——它根本不会匹配 iPhone 竖屏(375px),因为 sm 断点是 min-width: 576px,而手机属于 xs(无前缀)断点。
为什么写了 d-sm-none 手机上还是显示
这不是 Bug,是断点机制决定的:sm 表示「视口宽度 ≥576px 时才激活」,而绝大多数手机竖屏宽度在 360–414px 之间,压根不进 sm 区间,CSS 规则根本没加载。DevTools 里拖动宽度到 576px 以上才能看到它起效。
-
d-none d-md-block是「仅中屏及以上显示」的标准写法,生效范围是 ≥768px -
d-block d-md-none是「仅小屏显示」,覆盖 xs + sm(即 ≤767.98px) - 想覆盖真手机,必须用
d-none+ 更高断点反向激活,比如d-none d-lg-block(≥992px 显示)
d-none 和带断点类共存时谁生效
不是“覆盖”,是 CSS 层叠按断点顺序逐级激活:高断点类优先级更高,且只在对应 min-width 区间内起作用。
-
d-none d-md-block d-xl-none的行为是:d-none先全局隐藏 →d-md-block在 ≥768px 设为display: block→d-xl-none在 ≥1200px 再设为display: none - 最终生效区间是 768px 至 1199.98px(即 md 到 xl 之前)
- 注意边界:
xl是min-width: 1200px,所以 1199.98px 仍属lg,d-xl-none不触发
怎么让元素只在特定断点区间内显示
Bootstrap 没有内置「仅在 md 到 lg 之间」这种区间类,得靠组合逻辑:先隐藏所有,再按需开启;或先全局显示,再在不需要的断点关闭。
- 推荐写法:
d-none d-md-block d-xl-none(默认隐藏,中屏起显示,超大屏又隐藏) - 别依赖
d-lg-block d-xl-none表达「只在 lg 显示」——它实际覆盖 992px–1199.98px,但容易误判边界 - 需要精确控制(比如只在 992px–1199.98px),建议手写媒体查询:
@media (min-width: 992px) and (max-width: 1199.98px)
容易被忽略的兼容性细节
动态插入的元素、SSR 渲染或未正确加载 Bootstrap CSS 时,d-md-none 这类类名即使写对了也不会生效——浏览器根本没见过对应样式规则。
-
d-none移除渲染流,不占空间、子元素不渲染、无法聚焦;visibility: hidden仍占位,不能用于响应式显隐 - 表格列级隐藏必须同步处理
<th> 和所有同列 <code><td>,否则结构错乱 <li> <code>d-print-none优先级高于响应式类,混用可能引发打印时意外显示/隐藏











