Bootstrap 的无 jQuery 实现(React Bootstrap、BootstrapVue 或 ngBootstrap)都没有实现用于间距的实用程序指令(margin/padding),仅仅是因为 Bootstrap 在绝大多数情况下都不需要它,通过提供一组非常直观的Spacing utility classes。
您需要做的就是应用所需的类。
要根据响应间隔(媒体查询)有选择地应用实用程序类,您可以使用 useMedia 挂钩 as demoed here。
简而言之:
const interval = useMedia([
"(min-width: 1200px)",
"(min-width: 992px)",
"(min-width: 768px)",
"(min-width: 576px)"
],
["xl", "lg", "md", "sm"],
"xs"
);
(基于来自useHooks/useMedia 的useMedia)。
您现在可以在整个应用程序中重复使用此挂钩来添加基于媒体间隔的逻辑。
示例用法:
// interval === 'sm' ? a : b
// ['xs', 'sm'].includes(interval) ? a : b
// negations of the above, etc...
重要提示:此特定实现返回列表中第一个匹配的媒体查询。
如果您需要将各种媒体查询映射到具有true/false 值的对象/映射,则需要修改getValue fn 以返回整个列表,如下所示:
const getValue = () => {
const matches = mediaQueryLists.map(mql => mql.matches);
return values.reduce((o, k, i) => ({...o, [k]: matches[i]}), {})
};
工作示例here.
显然,您可以扩展它并添加/删除查询。但是,请注意,每个查询都会添加一个单独的侦听器,因此可能会影响性能。
在大多数情况下,返回第一个匹配查询(第一个示例)就足够了。
注意:如果上述 useMedia 钩子不足以满足您的用例,则为 JS 中的媒体查询侦听器提供更强大且经过大量测试的解决方案是 enquire.js。它易于使用、非常轻巧且经过全面测试的跨浏览器/跨设备。我与它没有任何关系,但在十多年的时间里,我在各种项目中使用过它。简而言之,我不能再推荐它了。
回到 Bootstrap 4:为了自定义 $spacer 大小,请遵循 Bootstrap 的 theming 下提供的指南,因为它实际上不仅仅是我们通常所说的主题(改变颜色),它是关于覆盖 Bootstrap 的 SASS 的默认值默认值,包括响应断点、分隔符、列数等等。您感兴趣的是$spacer。
只需将覆盖写入.scss 文件并将其导入您的根组件。 Example.
注意:自定义 Bootstrap 的一个(更简单和更直观)选项是使用 bootstrap.build 直观地完成它,但它通常落后一些小版本(即 Bootstrap 现在位于 v4.4.1构建工具位于v4.3.0)。
构建定制器提供直观的控件和实时可视化。
它允许导出为.css 或.scss。