scss模块(css module):从其他scss文件导入

2024-01-02

我目前正在转换我的 sass 样式以使用CSS 模块 https://github.com/css-modules/css-modules以避免风格冲突。我的理解是,它会生成唯一的类名,这使得如果我想定位在不同文件中定义的另一个组件(例如子组件)会变得很困难。

假设我有一个组件Button,并且它从一个导入Button.module.scss file:

// Button.js
import styles from "./Button.module.scss";

export const Button () => <button className={styles.button} />;

// Button.module.scss
.button {
    // relevant styles.
}

现在我有另一个组件ButtonGroup。假设我想让组中的按钮在它们之间有边距,我会有这样的东西:

// ButtonGroup.module.scss
.buttonGroup {
    display: flex
    &[class~=horizontal] {
        & > .button:not(:first-child) { // still using the same class name
            margin-left: 1rem;
        }
    }
    &[class~=vertical] {
        flex-direction: column;
        & > .button:not(:first-child) { // still using the same class name
            margin-top: 1rem;
        }
    }
}

请注意,我仍在使用.button来定位各个按钮。但这是行不通的,因为子组件实际上没有.button作为其类名,因为它是生成的唯一类名。

我可以使用类似 [class^=Button] 的东西,但是一旦你有很多组件,这感觉很老套并且很难维护。 (还意识到它在生产中不起作用。)


CSS 模块 https://github.com/css-modules/css-modules与 SASS 或 SCSS 无关,并且有自己的一组支持的功能和关键字。是的,它们可以一起使用,我在大多数项目中实际上都是这样做的。但我避免不同文件之间存在类名依赖关系。我知道一些可用于共享类名的功能,但避免使用它可能是最好的解决方案。我将在下面的部分列出我能想到的解决您的难题的所有潜在解决方案;选择最适合您的:

  • 解决方案#1:永远不要共享类名,将属于一起并在相同类名上运行的样式放在一起。 在您的情况下,这意味着您只有一个与按钮相关的 scss 文件buttons.modules.scss以及两者Button.js and ButtonGroup.js导入它。
  • 解决方案#2:从唯一生成的名称机制将它们标记为:global。这可以这样完成:
// button.module.scss

// this will stay a global classname
:global(.button) {
    // the button styles
}

// this will be treated as usual, generating a local name
.icon {
    // some icon stuff
}
// buttongroup.module.scss
.buttonGroup {
    display: flex;

    // will be resolved as local classname
    &.horizontal {
        flex-direction: row;
        // will be resolved as global classname
        & > :global(.button):not(:first-child) { margin-left: 1rem; }
    }
    &.vertical {
        flex-direction: column;
        & > :global(.button):not(:first-child) { margin-top: 1rem; }
    }
}
  • 解决方案#3:接受匿名儿童。您可以省略子级的类名。没有人将非按钮放置在按钮组中(甚至可能在组件代码中强制执行它)。
// buttongroup.module.scss
.buttonGroup {
    display: flex;

    &.horizontal {
        flex-direction: row;
        & > *:not(:first-child) { margin-left: 1rem; }
    }
    &.vertical {
        flex-direction: column;
        & > *:not(:first-child) { margin-top: 1rem; }
    }
}
  • 解决方案#4:引用另一个文件的内容。似乎有一些支持可以从其他文件引用/导入内容的语法,但我仔细阅读了文档和一些 github 问题讨论'从文件名导入类名' https://github.com/css-modules/css-modules/issues/40 'more' https://github.com/css-modules/css-modules/issues/25 '和更多' https://github.com/css-modules/css-modules-loader-core/pull/28没有得到任何关于如何从另一个文件导入本地类名的明确答案。沿着这些思路可能有一些可能see here https://github.com/css-modules/css-modules-loader-core/pull/28:
@import button from './button.module.scss';
.buttonGroup {
    display: flex;

    &.horizontal {
        flex-direction: row;
        & > .button:not(:first-child) { margin-left: 1rem; }
    }
    &.vertical {
        flex-direction: column;
        & > .button:not(:first-child) { margin-top: 1rem; }
    }
}

...或者沿着这些思路see here https://github.com/css-modules/css-modules/issues/40#issuecomment-135655919:

:import("./button.module.scss") {
  imported-button: button;
}

.buttonGroup {
    display: flex;

    &.horizontal {
        flex-direction: row;
        & > .imported-button:not(:first-child) { margin-left: 1rem; }
    }
    &.vertical {
        flex-direction: column;
        & > .imported-button:not(:first-child) { margin-top: 1rem; }
    }
}
  • 解决方案#5:让您的容器组件添加一个类.button-group-item到每个孩子并用它来应用边距而不是.button class.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scss模块(css module):从其他scss文件导入 的相关文章

  • 如何使用 PHP 动态插入 CSS 类?

    下面的代码有什么问题 我想在相应的情况下动态插入 当前 CSS 类 li 单击元素 谢谢 section section li
  • 在具有不同边框的 div 上调用函数

    我有一个div对于一个名为 ball 的类 div 的每个边缘都有一个边框 顶部边框 左侧边框等 当用户单击每个边框上的边框时 我想用 JavaScript 触发不同的事件 例如 用户点击边框顶部console log top 等等 HMT
  • jquery UI datepicker仅月份和年份的css定位问题

    我已经实施了这里讨论的解决方案 JQuery 日期时间选择器 只需选择月份和年份 https stackoverflow com questions 4079525 jquery datetime picker need to pick m
  • 如何计算单击的甜甜圈元素的中点与负 y 轴之间的角度

    Consider the following codesample donut chart using jquery flot http jsfiddle net c5zsg6y3 26 now as i have added the im
  • CSS 未在 Django 项目中加载?

    我是 Django 新手 但负责该项目的前端工作 我一直在研究如何准确加载 css 文件 但我发现这些方法不起作用 这是 html 文件布局 load static
  • Bootstrap 标签栏平滑移动导航按钮

    我有一个用于切换块的普通引导选项卡面板 在导航中切换块时 活动选项卡会突出显示 但现在 当我单击活动选项卡的背景时 它会立即发生变化 是否可以使切换选项卡时背景不会立即改变 而是根据需要哪个选项卡而平滑地左右移动 这可以用以下方法完成吗cs
  • 中有样式表 吗?

    在内部链接 CSS 文件是一个坏主意吗 body 我读过 如果浏览器在外部找到另一个 CSS 文件 则它会被迫重新开始 CSS 渲染 head 只是因为它可能需要将样式应用于已经渲染的元素 另外 我认为 HTML 无法正确验证 我需要确认这
  • CSS 标签“object-fit:cover”不会在 Chrome 中裁剪/剪辑视频

    CSS tag object fit cover无法按预期在 Chrome 中剪辑 裁剪视频 这种情况仅适用于视频且仅在 Chrome 中发生 图像在 Chrome 中正常 在所有其他经过测试的浏览器中 图像和视频都工作正常 The beh
  • 在javascript中创建图像的缩略图方块(不丢失纵横比)

    我正在制作一个客户端拖放文件上传脚本作为书签 在上传之前 我使用 File API 将图像读取为 base64 格式并将其显示为缩略图 This is how my thumbnails look like I want them to l
  • rvest 和 NHL 统计数据的 CSS 选择器问题

    我想从 hockey reference com 中抓取数据 特别是从以下链接中抓取数据 https www hockey reference com leagues NHL 1991 html https www hockey refer
  • 如何在非 CSS3 浏览器上制作圆角?

    我知道在这种情况下我必须使用图像 每个角一个 例如 如果我需要给定元素周围有一个 4px 的纯蓝色边框 边框半径为 8px 我相应地设计了四幅图像 左上角 png 右上角 png 左下角 png 右下角 png 如果可能的话 我应该如何实现
  • 鼠标悬停时放大图像而不使用 Jquery 推送其他图像?

    当您将鼠标悬停在图像缩略图上 例如 Google 图片正在使用的缩略图 时 我正在尝试创建图像放大效果 但是 我遇到了一个问题 即放大的图像根据放大的图像的位置不断将另一张图像推到另一个位置 这是我到目前为止所拥有的
  • 伪元素和 SELECT 标签

    是否select标签允许使用 after选择器是为了在之后创建一个伪元素吗 我在 Mac 上尝试过 Chrome Safari 和 Firefox 但似乎不起作用 这是我使用过的折衷方案 http jsfiddle net pht9d295
  • 自动调整Google网站嵌入代码的高度(html)

    我正在使用 Google 协作平台嵌入 HTML 代码 将代码粘贴到 从网络嵌入 窗口中 输出的长度是可变的 我希望有一种方法可以动态调整父级的高度iframeGoogle 协作平台用于托管我的 HTML 我知道我可以使用 Google 协
  • 如何在Eclipse中集成CSS预处理? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 Eclipse 中编辑 SCSS 文件 最好使用语法突出显示 scss files 我发现这些资
  • 如何在 font Awesome 图标链接下方添加添加文本?

    我正在尝试在我的 Blogger 模板中的 font awesome Icons 下添加一些文本 这是我想要实现的目标的图像 我想要实现的外观图片 https i stack imgur com BVYlh png 但到目前为止我已经做到了
  • 如何向 Rails 应用程序添加自定义字体?

    我想在 RoR 应用程序中使用几种字体 但它们的格式主要是 ttf 和 otf 等 我该如何将这些文件嵌入到我的 Rails 应用程序中 也就是说 一旦我将它们放入我的资产文件夹中 将它们嵌入我的 CSS 和 或 LESS 文件中的语法到底
  • 扩展位置绝对div超出溢出隐藏div

    我已经好几个月没有做过CSS了 所以我可能会错过一些简单的东西 但无论解决方案是什么 我都无法弄清楚 所以问题就在这里 这是我的代码的简化版本 div style height 100 width 200px div style margi
  • 淘汰赛绑定,每个都可进行自定义

    我这里有一个情况 用于淘汰每个带有定制的绑定 这是我的代码 div div table tbody tr td td td td tr tbody table div div
  • 将 CSS 生成的三角形拆分为 2 个水平不同的相同颜色

    正如您应该能够通过此代码看到的那样fiddle http jsfiddle net Xh36r 1 以及下面 我希望能够分割显示在第二个 div 顶部的 CSS 生成的三角形水平均等在 之间orange and green使用的颜色 现在它

随机推荐

  • 如何检测单元格值更改datagridview C#

    关于SOF的类似问题似乎没有明确的答案 我有一个DataGridView绑定到一个BindingList
  • 使用 php 进行 Windows 身份验证?

    设想 我的网站上有一个区域需要在异地时保持安全和可访问 我希望用户在网络表单中输入用于登录工作的用户名和密码 该表单将发送用户名和密码以进行身份 验证 如果有效 则用户已登录 我需要使用表单而不是弹出登录框 PHP 是首选 但我很灵活 有什
  • 如何在 ng-grid 中使用 bootstrap datepicker

    我正在尝试使用引导日期选择器 通过角度 ui 引导程序 http angular ui github io bootstrap 内ng grid http angular ui github io ng grid 我正在设置网格 scope
  • List 和 ArrayList 默认容量

    我一直在关注 NETList and 数组列表实现与反射器 http www red gate com products reflector 当看着添加 T项 我遇到了这个 确保产能 this size 1 public void Add
  • 如何使用 Twig (Symfony) 将时间格式设置为 hh:mm

    我从 MS SQL 数据库检索时间字段 例如 10 30 00 hh mm ss 我尝试在树枝模板中渲染它 但我只想显示 10 30 部分 hh mm 我尝试使用 number format 和 date format 来完成此操作 但我似
  • slf4j 石英异常

    我正在尝试在项目的一个简单示例中使用石英 我收到以下异常 我不确定这意味着什么 但是我在 POM 文件中将 slf4j 更新为 1 6 1 即使这样仍然出现 SLF4J slf4j api 1 6 x or later is incompa
  • 如何捕获(并忽略)对错误函数的调用?

    我很惊讶我在任何地方都找不到这个问题的答案 我正在编写一个 Roguelike 游戏 并且正在使用 hackage 的 ncurses 库 它是 ncurses 库的一个非常好的包装器 现在 ncurses 有一个怪癖 如果你尝试写右下角的
  • 用于简单传递性检查的不必要的谓词定义?

    对于给定的事实 trust direct p1 p2 trust direct p1 p3 trust direct p2 p4 trust direct p2 p5 trust direct p5 p6 trust direct p6 p
  • 如何禁用 Mailchimp 双重选择加入 PHP

    我对 Mailshimp 完全陌生 我在网上找不到任何可以禁用双重选择的内容 我不使用任何 Mailchimp API 我只是将 mailchimp 提供的表单放入我的 html 中 有什么想法可以不使用 API 或者如果必须使用 API
  • 我可以使用 EL 从 JSP 访问枚举类的值吗?

    我有一个枚举类USState 我想遍历 JSP 中的状态 是否可以访问列表USState不首先将这样的列表设置为属性 似乎像枚举这样的静态东西应该始终可用 但我不知道如何做到这一点 这就是我正在寻找的 工作除外
  • 读取内存中的整个文件 VS 读取块

    我对 C 和编程还比较陌生 所以请耐心等待 我正在开发一个应用程序 需要读取一些文件并按块处理这些文件 例如 以 48 字节的块处理数据 我想知道什么是更好的 性能方面 在内存中一次读取整个文件然后处理它 或者以块的形式读取文件并直接处理它
  • 实体框架 - 联合导致“无法创建类型的常量值..”

    选择全部Schedulings 是活跃的 我有以下代码 var allSchedulesOnALine CurrentUser Lines SelectMany o gt o Scheduling Where o gt o Active v
  • 根据平均值对 R 数据框中的列重新排序

    我想根据每列的算术平均值对数据框的列重新排序 For S1 S2 S3 1 1 1 2 1 1 3 3 1 预期输出是 S3 S2 S1 1 1 1 1 1 2 1 3 3 在上述情况下 平均值为 S1 2 S2 1 6666 and S3
  • Java DecimalFormat 科学记数法问题

    我正在使用Java的十进制格式 https stackoverflow com questions 168802 where can i find a tutorial to get started learning jquery类以科学记
  • 使用动态规划查找三项式系数

    我正在尝试使用动态编程在Java中实现一个计算三项式系数的函数 我正在使用以下公式 T n k 1 if n 0 and k 0 T n k 0 if k lt n or k gt n T n k T n 1 k 1 T n 1 k T n
  • 是否可以在虾文件中渲染斑点图像?

    我愿意使用Gruff https github com topfunky gruff在虾文件中渲染一些图形 我想避免将图像写入磁盘的延迟 仅让 Prawn 读取它们 格鲁夫提供to blob方法 http www rubydoc info
  • 如何在 PySimple GUI 中根据按钮点击显示不同的布局? (持续窗口循环)

    我想知道是否有一种方法可以根据 PySimple GUI 中的按钮单击来管理不同的布局 我刚刚开始使用这个框架 我想找到导航菜单的最佳方式 不一定要使用不同的布局 但这让我想到了最直观的方法 我在想 当选择某个子菜单按钮时 可能会有一个布局
  • 如何计算质心

    我正在处理地理空间形状并在这里查看质心算法 http en wikipedia org wiki Centroid Centroid of polygon http en wikipedia org wiki Centroid Centro
  • 在 C++ 中格式化整数

    我有一个 8 位整数 我想按如下格式打印 XXX XX XXX 我想使用一个接受 int 并返回字符串的函数 有什么好的方法可以做到这一点 就我个人而言 我就是这样做的 可能不是解决问题的最快方法 也绝对不像egrunin 的函数那样可重用
  • scss模块(css module):从其他scss文件导入

    我目前正在转换我的 sass 样式以使用CSS 模块 https github com css modules css modules以避免风格冲突 我的理解是 它会生成唯一的类名 这使得如果我想定位在不同文件中定义的另一个组件 例如子组件