如何编译Bootstrap SCSS仅包含扩展类



如何将自定义Bootstrap SCSS文件编译到CSS文件中,该文件仅包含我在自定义文件中创建的类?

例如。我正在尝试删除添加到HTML中的额外CSS课程。

而不是编写以下html:

<h4 class="border-bottom p-2 mb-4">
    Blah Blah
    <span class="badge badge-secondary badge-pill float-right">100</span>
</h4>

我试图写(删除所有类属性):

<h4>
    Blah Blah
    <span>100</span>
</h4>

为此,我创建了一个带有以下内容的custom.scss文件:

@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/mixins";
@import "bootstrap/scss/utilities/borders";
@import "bootstrap/scss/utilities/spacing";
@import "bootstrap/scss/utilities/float";
@import "bootstrap/scss/badge";
h4 {
    @extend .border-bottom;
    @extend .p-2;
    @extend .mb-4;
}
h4 span {
    @extend .float-right;
    @extend .badge;
    @extend .badge-pill;
    @extend .badge-secondary;
}

编译的CSS文件包含1000多行CSS?为什么?

它包含诸如"徽章黑暗",所有填充和保证金等的内容,我不想使用它们也不需要。如何摆脱它?我只需要一个CSS,其中包含我在Custom.scss文件中编写的相关CSS指令。

我认为的结果应该看起来像这样:

h4 {
  border-bottom: 1px solid #dee2e6 !important;
  margin-bottom: 1.5rem !important;
  padding: 0.5rem !important;
}
h4 span {
  float: right !important;
  display: inline-block;
  padding: 0.25em 0.4em;
  font-size: 75%;
  font-weight: 700;
  line-height: 1;
  text-align: center;
  white-space: nowrap;
  vertical-align: baseline;
  border-radius: 0.25rem;
  h4 span:empty {
    display: none;
  }
  padding-right: 0.6em;
  padding-left: 0.6em;
  border-radius: 10rem;
  color: #fff;
  background-color: #6c757d;
  h4 span[href]:hover, h4 span[href]:focus {
    color: #fff;
    text-decoration: none;
    background-color: #545b62;
  }
}

但不是。

编辑:

如果我将custy.scss更改为这样的东西:

@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/mixins";
$theme-colors: (
    "secondary":  $secondary,
);
h4 {
    border-bottom: $border-width solid $border-color;
    padding: map_get($spacers, 2);
    margin-bottom: map_get($spacers, 4);
}
@import "bootstrap/scss/badge";
h4 span {
    @include float-right;
    @extend .badge;
    @extend .badge-pill;
    @extend .badge-secondary;
}

生成的CSS主要包含所需的样式。但是我认为有可能依靠引导类别的类别,而不是通过Bootstrap SCSS搜索并拾取所需的东西并以某种方式将其合并到我的Custom.scs.scss.scss.scs中。我以为会更容易?

您的代码有效,但是您正在扩展类而不是占位符。这是最大的区别,这里。

示例扩展类(您的情况)

.border-bottom {
  border-bottom: 1px solid #dee2e6 !important;
}
h4{
  @extend .border-bottom;
}

结果是一组CSS规则的原因.border-bottom类也存在于您的CSS中:

.border-bottom, h4 {
  border-bottom: 1px solid #dee2e6 !important;
}

使用placeholder,相反,情况有所不同:

%border-bottom {
  border-bottom: 1px solid #dee2e6 !important;
}
h4{
  @extend %border-bottom;
}

结果是您期望的,我认为:

h4 {
  border-bottom: 1px solid #dee2e6 !important;
}

我在这里找到了一篇非常好的文章,内容是:http://thesassway.com/intermediate/understanding-placeholder-selectors

因此,当您导入所有这些boostrap4文件时,SCSS会创建所有用于扩展的.class规则(为此,您有1000多个代码行)。

然后,当您写作时,例如:

h4 {
    @include float-right;
    @extend .badge;
    @extend .badge-pill;
    @extend .badge-secondary;
}

您的结果将是:

h4 {
  float: right !important; /* your @include */
}

但也:

.badge-secondary, h4 {...}
.badge-pill, h4 {...}
.btn .badge, .btn h4 {...}
.badge:empty, h4:empty {...}
.badge-secondary[href]:hover, h4[href]:hover, .badge-secondary[href]:focus, h4[href]:focus {...}
.badge, h4 {...}

最新更新