- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Laravel Mix 和 Webpack 进行 SASS 预处理。
我的网站中有两个“主题”,我希望它们能够精简,在需要的地方继承变量。例如,我的主要主题将按以下顺序包括:
// Primary theme
@import "./primary-variables.scss";
@import "/path/to/default/theme/main.scss";
我的默认主题如下所示:
// Default theme
@import "./default-variables.scss";
@import "~bootstrap-sass/assets/stylesheets/_bootstrap";
类似于this question ,我首先包含了主要变量,然后是默认主题变量,最后是 Bootstrap 。
在我的默认主题中,我将 !default
添加到所有变量中,以便在重新定义 Bootstrap 时优先使用它们,而在新定义时它们将成为默认值。主主题根本不使用 !default
。
如果 Bootstrap 将 $brand-danger
定义为 red !default
,我的默认主题会将其重新定义为 blue!default
和我的主要主题将其重新定义为黄色
,我的渲染输出将是黄色 - 太棒了!
当我需要引用仅在我的主要主题的其他级别定义的变量时。例如:
// Primary theme:
// This fails since I haven't defined $brand-primary in my primary theme
$my-primary-theme-variable: $brand-primary;
构建现在失败,并显示错误:primary-theme/src/scss/main.scss does not export content
。
我可以通过将整个 Bootstrap 变量文件复制到我的主要主题并根据需要更改变量来解决此问题,但我真的不想这样做。
SASS变量处理器实际上是如何工作的?我是否可以只更改主题中的 Bootstrap 变量之一,而不必重新定义整个文件?
This question非常相似。
最佳答案
您似乎正在使用 @include 导入您的 SCSS,请尝试使用 @import 代替 – 如果这只是问题中的拼写错误,请告诉我:- )
@import "./primary-variables.scss",
"/path/to/default/theme/main.scss"
;
我在 the question 上添加了一些快速注释你指的是。关于 !default 标志需要了解的重要一点是,它在选择器中使用时生效,并且不会重新定义变量。
Sass 在处理变量时不会向前看 - 它会打印出当前值。在此示例中,.class-1 将呈红色,因为在选择器中使用后重新定义,而 .class-2 将呈蓝色,因为没有默认标志。
$brand-color: red !default; // defined
.class-1 { background-color: $brand-color; } // red
$brand-color: blue; // re-defined
.class-2 { background-color: $brand-color; } // blue
默认标志将导致 Sass 跳过变量重新定义。在此示例中,结果将是首先定义的红色。由于默认标志,以下两个重新定义将被忽略。
$brand-color: red !default; // defined
$brand-color: blue !default; // ignored
$brand-color: green !default; // ignored
.class-1 { background-color: $brand-color; } // red
在这种情况下,将使用配置中的所有变量 - 如果配置中未定义,则来自partial-1的变量,最后一个partial-2将定义其他两个中未定义的任何变量。
@import '_config.scss'; // definition
@import '_partial-1.scss'; // contains defaults
@import '_partial-2.scss'; // contains defaults
希望这是有道理的:-)
// _default-theme.scss
@import '_default-variables.scss', '_bootstrap.scss';
// _primary-theme.scss
// primary variables will override defaults or use defaults if not defined
@import '_primary-variables.scss', '_default-theme.scss';
// style.scss
@import '_primary-theme.scss'; // or '_default-theme.scss'
如果您的默认主题和主要主题具有每个主题独有的内容,您可以创建一个范围混合来处理编译的内容。
这是一个非常初级的版本:
// _scope.scss
$scope-context: null !default;
@function scope($scopes: null, $true: true, $false: false) {
@each $scope in $scope-context {
@if index($scopes, $scope) { @return $true }
}
@return $false;
}
@mixin scope($scopes: null) {
@if scope($scopes) or length($scopes) == 0 and not $scope-context {
@content;
}
}
工作原理
范围混合采用上下文参数和内容 block @content。如果传递的上下文与全局变量($scope-context)匹配,则渲染内容 block 。
// _default-theme.scss
.class { content: 'Will show in both themes'; }
@include scope(default-theme){
.class { content: 'Will only show in the default theme'; }
}
@include scope(primary-theme){
.class { content: 'Will only show in the primary theme'; }
}
// can also be used as "if" function
.class {
content: scope(default-theme, 'Is default', 'Not default')
}
在您的情况下,在默认变量和主变量中定义 $scope-context
// _default-variables.scss
$scope-context: default-theme !default;
// _primary-variables.scss
$scope-context: primary-theme;
...并将 _scope.scss 添加到 _default-theme.scss
// _default-theme.scss
@import '_default-variables.scss', '_bootstrap.scss', '_scope.scss';
关于css - SASS 多级变量优先级/继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42356763/
我有一个名为 main.css 的 css 文件和另一个名为 style.css 的文件。我怎样才能在 main.css 中做到这一点? .someClass { //apply rules to
在更新我的 css 之前,我在 Login.css 中有以下内容: body { background-image: url('./pictures/fond.png'); bac
我的 share point 2013 核心 css 和我的 css 之间存在 css 冲突。所以我想把我所有的类都放在 div #s4-workspace 下但是我搜索了一种方法来将所有类分组到这个
我知道您可以覆盖 jsp 页面从 jsp 包含 CSS 文件(即全局 CSS 文件)继承的 CSS 属性。 但是,如果元素中的某个属性弄乱了特定页面,而我不想只使用内联 CSS 在该页面中使用它怎么办
我刚刚发现了 initial-scale 元属性。 以前,我一直在使用 default.css 来定义我所有的样式和大小(用于字体和元素),以便它们在桌面计算机的屏幕上显示得很好。然后,如果您使用的是
我正在尝试使用 LESS CSS 来编写我的 CSS。我已经按顺序导入了 style.less 和 less.js 文件。 现在我想提取 LESS 生成的 CSS。有什么办法可以做到吗?我不想使用脚本
我想知道是否有任何一种软件可以读取大量内联样式中的 HTML 文档并将所有这些样式转换为外部 css 文件。如果只有一页,我可以手动完成。但是有100页。有人有想法吗? 最佳答案 就像有人说的那样,“
当我想从 Styled Components 迁移到 CSS Modules 时,出现了以下问题。 假设我有以下样式组件,它接受动态参数 offset和一个动态 CSS 字符串 theme : con
有没有办法将 CSS 类定义为与另一个类相等?例如,如果我有一个类: .myClass{ background-color: blue; } 有没有一种方法可以将第二个类定义为与 myClas
我正在尝试制作一组按钮,这些按钮贴在页面底部并且由固定的空间隔开。我正在使用 angularJS 的 ng-repeat 指令通过 ajax 请求获取数据,然后我用它来显示按钮。 我的问题在于让按
浏览器是否在加载 CSS 文件时解析 CSS?还是在整个 CSS 文件被浏览器下载后才进行解析?不同浏览器的做法有区别吗?我在哪里可以找到这种底层信息? 这个问题不是 Load and executi
这个问题在这里已经有了答案: Can a CSS class inherit one or more other classes? (29 个答案) 关闭 3 年前。 标题有点乱,我给大家看一下。假
我遇到了最奇怪的问题...... 在最简单的形式中,我有一个包含以下内容的 index.html 文件: (在尝试确定根本原因的过程中,我已经大大减少了它) 当我查看页面的源代码时,我得到以下信息:
我正在使用 Mindscape Workbench 来最小化我的 scss 文件。我的页面设置为使用 *.min.css 文件。在随机时间,min 文件不会与系统的其余部分一起发布。 我有很多 css
请告诉我 CSS 框架和 CSS 网格之间的区别。 最佳答案 CSS 框架也可以是 CSS 网格框架。 CSS 网格框架用于构建 CSS 布局。有一些框架除了构建布局还有其他用途,例如 Hartija
我有无法从页面中删除或更改的 original.css 文件。原始.css table { border-collapse: collapse; border-spacing: 0;
我以前使用 bootstrap css import 很好。 但是我正在尝试使用 CSS 模块,所以我添加了几行。 { test: /\.css$/, use:
有没有办法在 css 选择器中创建一个 css 组。 例如: .SectionHeader { include: .foo; include: .bar; include: .
今天我学习了 CSS 中的两个概念,一个是 CSS 定位(静态、相对、绝对、固定),另一个是 CSS Margin,它定义了元素之间的空间。 假设我想移动一个元素,这是最好的方法吗?因为这两个概念似乎
var paths = { css: './public/apps/user/**/*.css' } var dest = { css: './public/apps/user/css/' } /
我是一名优秀的程序员,十分优秀!