当前位置: 首页 > 面试题库 >

SASS和Bootstrap-mixins与@extend

傅泉
2023-03-14
问题内容

我正在使用Bootstrap的SASS端口,并且想知道使用预定义的mixins和使用SASS的之间是否有区别@extend

例如,如果我有:

<div class="wrapper">
    Some content here....
</div>

两者之间有什么区别吗

.wrapper {
    @include make-row();
}

.wrapper {
    @extend .row;
}

如果没有区别,是否还有其他mixin不等同于单个@extend语句?如果没有这样的混合器,为什么混合器甚至存在?


问题答案:

@extend和mixin之间的最大区别是css的编译方式。在简单的示例中看起来并不多,但是区别和含义是巨大的,如果不小心使用,可能会在野外引起极大的头痛。@extend有点像傻瓜金,乍一看很棒,但是…

让我们看一个简单的例子:

@延伸

.row {
    width: 50px;
}
.new-row {
    @extend .row;
}
.another-row {
    @extend .row;
}

编译成:

.row,
.new-row,
.another-row {
     width: 50px;
}

混合

@mixin row() {
    width: 50px;
}
.new-row {
    @include row();
}
.another-row {
    @include row();
}

编译成:

.new-row {
   width: 50px;
}
.another-row {
   width: 50px;
}

一个mixin包含了所有被击中的属性-
每次都复制它们-而@extend将选择器分组并一次定义属性。这不是立即显而易见的,因为区别在于已编译的css,但是它具有一些重要的含义:

加载顺序

@extend选择器一起将在遇到它们的Sass的第一点进行分组,这可能会导致一些怪异的超越。如果定义选择器并用于@extend将属性引入并尝试覆盖先前在sass中定义的属性,但是在将扩展属性分组到css之后,则覆盖将无法工作。这可能非常令人困惑。

考虑一下这个按逻辑顺序排列的css定义集和可能的HTML <div class='row highlight-row'></div>::

.red-text {
    color: red;
}
.row {
    color: green;
}
.highlight-row {
    @extend .red-text;
}

编译成:

.red-text,
.highlight-row {
    color: red;
}
.row {
    color: green;
}

因此,即使sas​​s排序使行颜色看起来像红色,编译后的css也会使绿色

分组不佳

@extend可能导致结果CSS中选择器的分组不正确。例如,您最终可能拥有三十或四十个不相关的事物,它们共享相同的属性。使用@extend字体就是一个很好的例子。

套料

如果您使用的是深层嵌套的sass(这不好,顺便说一句),并且您使用的@extend是每个@extend使用的重复完全嵌套的选择器,则CSS会很肿。我已经看到很多:

.selector-1 .selector-2 .selector-3 .selector-4,
.selector-1 .selector-2 .selector-3 .selector-4 a,
.selector-1 .selector-2 .selector-3 .selector-4 li,
.selector-1 .selector-2 .selector-3 .selector-4 td {
    font-family: arial;
}

如果您是SASS的新手,则值得关注一下已编译的CSS。

媒体查询

@extend 在媒体查询中不起作用,因为媒体查询不是选择器。

结论

我的经验法则是,@extend如果您没有参数, 并且
可以合理地定义@extend并在sass中附近存在的一些紧密相关的选择器(例如,在定义该文件的同一文件中)之间共享它,则可以使用over mixin
sass模块。按钮是很好使用的@extend的一个很好的例子:

%button {
    padding: 10px;
}
.call-to-action {
    @extend %button;
    background-color: $green;
}
.submit {
    @extend %button;
    background-color: $grey;
}


 类似资料:
  • Importing 它导入位于scss/util/_mixins.scss文件下的SASS mixins的内容。 您可以使用以下代码行导入SASS mixins - @import 'util/mixins'; Sass参考 您可以使用SASS功能更改组件的样式。 Mixins 您可以使用以下mixins为您的组件构建CSS类结构。 CSS-TRIANGLE 它用于创建下拉箭头,下拉点等等。 它

  • 本文向大家介绍sass Mixins,包括了sass Mixins的使用技巧和注意事项,需要的朋友参考一下 示例 Sass往往是更“懒”的语法。没有什么比定义和包含mixin更好的了。 定义一个mixin =是你如何定义一个mixin Sass,@mixin在SCSS。 包括混入 +你是如何有Sass,@include在SCSS。            

  • When you find yourself writing the same code over and over again, it feels like Sass mixins might help you out. Sass mixins are CSS functions that you can include whenever you want. Syntax Remember ho

  • 我正在尝试角度-cli,并试图在项目中获得sass和引导。我在wiki上读到你可以简单地做: 使用当前最新版本(beta.5)执行此操作会给我一个错误: 我怎样才能以一种角度-cli 将处理索引页和 systemJS 的方式来安装引导程序和/或 sass?

  • 我将马上讨论我真正的问题/问题,是否有任何方法访问HttpMessageConverter内部控制器处理程序方法上的注释?我很确定答案是否定的(在浏览了Spring的源代码之后)。 在使用MappingJacksonHttpMessageConverter时,是否有其他方法使用Jackson Mixins配对?我已经基于MappingJacksonHttpMessageConverter实现了自己

  • Mixins是允许将生成的代码混合到源代码中的结构。 Mixins可以是以下类型 - String Mixins Template Mixins Mixin名称空间 String Mixins 只要该字符串在编译时已知,D就能够将代码作为字符串插入。 string mixins的语法如下所示 - mixin (compile_time_generated_string) 例子 (Example)