如何在 Bootstrap 4 中使用 Sass 更改字体大小?

Posted

技术标签:

【中文标题】如何在 Bootstrap 4 中使用 Sass 更改字体大小?【英文标题】:How to change the font size with Sass in Bootstrap 4? 【发布时间】:2018-04-05 06:41:38 【问题描述】:

我得到了交叉信息,想在这里提出这个问题。我在某些地方读过字体大小应该从 html 元素更改,例如:

html  font-size: 14px 

并且 bootstrap 4 rem 值将相应地更新文本。

有趣的是,如果我将 html 元素的字体大小保持为其默认值并更改引导变量以更改字体大小,我做错了什么吗?

例如:

html  font-size: 16px 

// Changing bootstrap variable to 
$font-size-base: 0.875rem //instead of 1rem

【问题讨论】:

【参考方案1】:

我建议您直接更新 html font-size: 16px 属性,而不是更改 Bootstrap 的 $font-size-base,原因如下:

    html的字体大小将直接用于计算最终字体大小。使用 "intermediary" 没有任何好处,即 body 正在被 Bootstrap 的 $font-size-base 调整。

    Bootstrap 的 SCSS 系统使用 $font-size-base 计算标题大小等,因此所有受 Bootstrap 影响的 CSS 规则都会受到影响,其中包括 body(设置为 $font-size-base$)。 但是,浏览器计算 rem 中相对于 html font-size 的任何 CSS 字体大小规则,来自 $font-size-base 受影响的元素(如 body)。

    使用px 设置html font-size 将影响任何rem 值,无论是在Bootstrap 受影响的元素内部还是外部,如果这是您想要实现的。

相反,如果您只想为受 Bootstrap 影响的元素设置大小,设置 $font-size-base 相对于 html font-size,因此 Bootstrap 之外的 CSS 元素将不 受到影响。但我想说这更像是一种边缘情况,而不是常态。

注意: 如果您正在设置$font-size-base 或任何其他引导变量,则不必修改variables.scss 文件。您应该在导入node_modules/bootstrap/scss/variables 和其他Bootstrap 文件之前 定义变量,以便使用您的值而不是Bootstrap 中设置的!default 值。优点:无需编辑整个variables.scss文件。

【讨论】:

我添加了这个答案,因为之前的答案没有考虑元素的 CSS 规则 not 受 Bootstrap 影响的用例(IMO 是规范),并且还添加了关于覆盖的建议默认引导变量以我认为最实用的方式(使用 NPM / NodeJS 工作流的示例)。【参考方案2】:

带着所有的困惑和许多不同的答案。我向 bootstrap 的作者提出了一个一劳永逸的问题。

现在我们需要更改 $font-size-base 这将直接更改根字体大小。

他们的贡献者还建议我不要使用 html 元素控制字体大小,而是更改引导程序的变量。

参考号:https://github.com/twbs/bootstrap/pull/24060

注意仅使用 CSS 覆盖

使用提供的 css 示例不适用于引导大小调整的所有方面。

scss 的编译结果使用$font-size-base 变量来调整很多东西的大小,将来可能会在更多领域使用。

List of sized elements

下拉字体 按钮字体 弹出式字体 输入组字体 表格字体 重启字体

------------- 示例 SCSS --------------

这是您的 scss 文件的示例,请注意,您需要在主 scss 文件中包含引导程序之前定义 $font-size-base。在这种情况下,app.scss 文件就是正在编译的文件。

app.scss

// Fonts
@import url("https://fonts.googleapis.com/css?family=Raleway:300,400,600");

// Variables -- this is where you defined the variables 
//              BEFORE importing bootstrap which will use it's  
//              defaults if the variable is not predefined.
@import "variables";
// Bootstrap
@import '~bootstrap/scss/bootstrap';
// DataTables https://datatables.net/download/npm#DataTables-core
// @import "datatables";
@import "datatables.min";

_variables.scss

// Body
$body-bg: #ffffff;

// Typography
$font-size-base: 12px; // this changes the font-size throughout bootstrap
$font-family-sans-serif: "Raleway", sans-serif;
$font-size-base: 0.9rem;
$line-height-base: 1.6;

【讨论】:

一篇好文章:coursetro.com/posts/design/73/… 您可以在此处找到所有变量的列表:github.com/twbs/bootstrap/blob/v4-dev/scss/_variables.scss $font-size-base 定义了两次,一次在 rem 中,一次在 px 中。你推荐哪一个? $font-size-base 更改为像素值而不是rem 值甚至无法编译scss 样式,我找不到任何支持它比html font-size: 12px; 更好的东西 很遗憾,display-* 类似乎不支持 $font-size-base github.com/twbs/bootstrap/blob/v4-dev/scss/_variables.scss#L311【参考方案3】:

Bootstrap 将 font-size 定义为 _reboot.scss 为基础

body 
    font-family: -apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
    font-size: 1rem;
    font-weight: 400;
    line-height: 1.5;
    color: #292b2c;
    background-color: #fff;

注意:- 切勿将默认值更改为框架文件,始终使用自定义 css/js 文件修改值。

因此,为了将您的字体大小更改为 14px,请在您自己的 style.css(自定义 css 文件)中使用它

body 
    font-size: 0.875rem;
 

这里是working fiddle

使用 !important 您无法看到您的更改以覆盖默认更改。

在您的 custom.scss 文件中执行以下操作:

$custom-variable:0.875rem;

然后像这样使用它:

@import "./src/scss/_modules/custom"; 
@import "./bower_components/bootstrap/scss/bootstrap";

body 
font-size:$custom-variable;

【讨论】:

是的,我正在使用覆盖,我永远不会更改核心文件中的任何内容......它的基本常识......但这并不能真正回答我的问题......为什么我不能改变使用覆盖方法的引导变量中的基值? 所以我使用@import 拉入引导源,然后我使用自定义文件来修改变量(保持引导文件不变)。 是的,在自定义 css 文件中,您可以添加此代码以在 @import 之后对其进行修改,但是您可以直接添加引导文档中提到的资源。最后你可以用你的自定义 CSS 覆盖默认值。 所以你说只要我使用单独的文件更改变量(原因很明显);这应该可以吗?如果您更改答案以反映我会接受。 我的问题与使用外部文件更改引导变量直接相关。所以本质上我不是在改变引导文件,而是使用 _custom.scss 来改变引导的基本字体。因此,我将使用 0.875rem 而不是 1rem;这样做不会失去引导程序的任何功能。如果你说我不应该改变引导程序的基本字体大小,你能支持你的理论吗?

以上是关于如何在 Bootstrap 4 中使用 Sass 更改字体大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 gulp 从 node_modules 导入 bootstrap 4 sass/scss

如何在 Bootstrap 4 和 Sass 中设置自定义按钮文本颜色?

Foundation 6 / Bootstrap 4 - 在 webpack 中使用 sass 设置文件的正确方法

如何让 brunch 和 sass-brunch 编译/包含 bootstrap.scss?

如何在项目中同时使用 rtl 和 ltr bootstrap 5 sass 样式?

如何在 vue 3 vite 中使用 sass 扩展?