没有 @import 的全局 CSS 变量

2023-12-20

我希望为我的 SASS/CSS 文件中的媒体查询定义一个变量。

给定页面的 sass 文件的一般结构是

  • 文件.scss
  • _变量.scss
  • _颜色.scss
  • _web.scss
  • _tablet.scss
  • _mobile.scss

file.scss 只有 @use 语句(@use 超过 @import 因为SASS 团队将不再使用 @import https://sass-lang.com/documentation/at-rules/import),_variables/_colors 有我的CSS 变量 https://www.w3schools.com/css/css3_variables.asp元素属性和颜色(分别),其余 3 个文件(我将它们统称为 _layout.scss)具有每个屏幕尺寸的布局和其他功能。

由于我有多个 file.scss 文件,并且每个相应的 _layout.scss 都需要一个设置了最大宽度的 @media 查询,因此我理想地希望有一个可以在 _global.scss 文件中使用的全局变量,以包含在所有 _layout.scss 中文件一致,而不是在每个文件中手动重新定义相同的最大宽度。

我无法使用 CSS 变量(我不认为),因为这些变量需要在选择器内定义,并且不能很好地导入到 @media 查询中(我尝试过,包括仅在 :root 中定义变量,但无济于事) )。

本地 sass 变量(特别是只有预处理器可以看到这一点,这有点无赖,但我可以忍受)将按如下所示工作这个 CSS 技巧帖子 https://css-tricks.com/approaches-media-queries-sass/,但这并没有真正提供一个全局解决方案,我可以简单地使用该值。

这就是说我想要一个全局 sass 变量(即仅在一个文件中定义,但在多个文件中使用),然后我可以在其中使用 @media(max-width: var(--my-variable)) 或 @media( max-width: $my-variable) 在我的本地 _layout.scss 文件中,以便一致地使用相同的值。

我尝试使用我的声明创建一个 _global.scss 文件,并在我的 _layout.scss 文件中使用它们,但是我的 sass 编译器(Dart v 1.25.0)无法识别这一点,虽然我可以使用 @import 来做到这一点,与上面相同的原因(@import 消失)让我不愿意这样做,如果有一个实际的good现有的解决方案将在这一变化中保持稳定。

page.scss 中的结构示例:

@use 'web';
@use 'tablet';
@use 'mobile';
//Note only one of the two below is present at once
@use '../App/global'; //doesn't work
@import '../App/global'; //does work

我的样式文件夹结构

  • styles
    • 应用程序文件夹

       - _colors.scss
       - _global.scss
       - _variables.scss
       - App.scss
      
    • 通用组件文件夹

       - \_colors.scss
       - \_mobile.scss
       - \_tablet.scss
       - \_web.scss
       - file.scss
      

_global.scss 看起来像这样(回想一下我们使用的是 SASS 变量,因为 CSS 变量需要在选择器内定义):

$小型笔记本电脑:1400px;

$平板电脑:1023px;

$移动:765px;

$小型移动设备:400px;

在 _web.scss 中我们使用这样的变量

@media(max-width: $small-laptop) {
.my-selector {
height: 10%;
} 

使用时@use您需要在变量之前包含文件的名称空间。

在您的结构中,您在中声明变量_global.scss,因此来自该文件的任何变量都需要使用该文件名命名空间。

就你而言,你有_global.scss:

$small-laptop: 1400px;
$tablet: 1023px;
$mobile: 765px;
$small-mobile: 400px;

因此,当在代码中使用它时,您可以这样做global.$variable:

@media(max-width: global.$small-laptop) {
    .my-selector {
        height: 10%;
   }
}

这是使用的主要好处@use将来。您可以拥有非常通用的变量名称,不会与其他任何内容发生冲突,因为您可以从特定文件中调用它们。从技术上讲,您可以有 20 个名为$test,但根据您使用它们的上下文,您可以调用$test来自与上下文相对应的任何声明/部分文件。

@import是全局的,所以一旦声明了一个变量,它就是全局的。如果该变量被分配到其他地方,您将遇到冲突和意外覆盖。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

没有 @import 的全局 CSS 变量 的相关文章

  • 如何正确编写 CSS 属性选择器来提取所有 id 属性?

    情况 我目前正在尝试在 VBA 中使用语法重现属性选择器 attr 来自给出的 CSS 选择器练习here https www w3schools com cssref trysel asp 选择器旨在根据给定属性的值选择元素 预期结果 在
  • 如何在不使用 Flexbox 的情况下水平对齐元素?

    有没有一种方法可以在不使用的情况下将 Web 组件彼此相邻对齐Flexbox 我知道它是一个很棒的工具 但不幸的是它不适用于 IE 9 或 10 我希望链接内的文本显示在图像旁边 JSFiddle 显示了工作代码 但是使用 FlexBox
  • HTML 文本下方的白点

    我在网站上的输出在文本下方有点 为什么会出现以及如何删除它 HTML p align center font size 4 5 color 979C91 a href customer html span class fa fa penci
  • 更改输入上的父 div [type=checkbox]:使用 css 检查[重复]

    这个问题在这里已经有答案了 我可以弄清楚如何在选中复选框时更改父 div 更改以下段落效果很好 在 Chrome 中尝试过这种方法但没有运气 HTML div div
  • Webpack、Sass - 超出最大调用堆栈大小

    我正在为我的 JS 应用程序使用 Webpack 对于样式 我使用 Sass 我的应用程序非常大 所以我使用了很多 mixins 和 includes 在过去的几天里 虽然应用程序的 SASS 数据增长了一些 我多次遇到相同的以下错误 未捕
  • 如何替换 CSS 表达式

    我有一个用于时间表条目的旧 ASP Web 应用程序 其中充满了 CSS 表达式 它们出现在 CSS 文件中 ApptPage position relative height expression Math max document bo
  • html/js 中从右到左和/或从上到下的文本?

    如何在浏览器中为用户输入创建从右到左和从上到下的文本字段 有没有本地方法可以做到这一点 或者也许有解决方法 从上到下可能像日语或象形文字 对于 RTL 文本字段 您可以使用 HTMLdir属性 如 ime Vidas 已经提到的 或 wit
  • CSS @import 及其顺序

    是否可以使用 importone像这样的 css 文件 import file1 some css here import file2 chrome 无法识别上述第二个导入 但这可以工作 import file1 import file2
  • vue基于媒体查询绑定值

    carousel 3d display 3 width 150 height 150 我想根据媒体查询设置属性绑定 e g 当屏幕宽度 gt 960px 时 显示应变为 5 您可以尝试绑定display组件属性的值
  • 带有蓝图 css 的 HTML5 样板

    我正在考虑将这两种技术结合起来用于一个新项目 这是坏主意吗 有没有推荐的替代网格系统与 html5 样板一起使用 实际上 我将它们混合在一起并且它们一起工作得很好 http shikiryu com html5 我所要做的就是修改 div
  • 使用 CSS 创建互锁的不规则边框

    我有一个由 4 个 互锁 div 组成的布局 如下所示 我想在 顶部 和 底部 位周围放置边框 以使最终布局如下所示
  • AngularJS动画卡片翻转

    我正在尝试使用新的 AngularJS 方式在页面转换之间制作动画 并希望合并卡片翻转 例如http jsfiddle net nicooprat GDdtS http jsfiddle net nicooprat GDdtS body b
  • 如何使CSS背景图像响应? [复制]

    这个问题在这里已经有答案了 好的 所以我遇到了这个使背景图像响应的解决方案 响应式 CSS 背景图片 https stackoverflow com questions 12609110 responsive css background
  • 网页CSS覆盖ckeditor 3样式

    我有一个加载 screen css 的页面 其中包含evil规则 由于各种原因我无法删除或修改 a background red important I use CK编辑器3 x http ckeditor com 在同一页面上 问题是 无
  • CSS水平导航间距

    我正在尝试用 css 创建一个水平导航栏 其中包含 5 个均匀间隔的链接 html 希望保持这样 div ul li a href one html One a li li a href two html Two a li li a hre
  • Firefox 浮动错误?如何让我的 float:right 在同一条线上?

    我有以下小提琴 http jsfiddle net q05n5v4c 2 http jsfiddle net q05n5v4c 2 在 Chrome 中 它渲染得很好 V 形标志位于右侧 然而 在 Firefox 中 Chevron 字形下
  • Twitter Bootstrap:按钮下拉列表中的图标

    Here http jsfiddle net DjHyQ 是 jsfiddle 上的链接 其中包含一些演示 它在 Chrome 甚至 IE 中运行良好 但在 FF 中图标会下降 我怎样才能解决这个问题而不用负边距或类似的东西来提升它们 我不
  • 右侧对齐不浮动

    我有一个聊天小部件 我正在向其中添加一些样式 但是 我很难使 用户 聊天气泡与屏幕右侧对齐 当我使用向右浮动和向左浮动 另一侧 时 div 不再正确定位 因为它们似乎只是转到相对 div 的右侧 我希望它也能够附加 div 这将导致溢出 y
  • 删除 twitter bootstrap 中的行

    我正在使用 twitter bootstrap 来执行一些我被迫执行的网络应用程序 我不是网络开发人员 但我找不到一种方法来禁用表的行线 正如你可以看到引导文档 http getbootstrap com components panels
  • 如何使相对div居中?

    我一直在尝试让以下代码工作几个小时 但没有成功 您能帮我将项目 div 居中吗 即使页面放大和缩小时 这是我的 HTML 和 CSS bottom position absolute top 100 left 0 right 0 backg

随机推荐