【问题标题】:Global media queries on a react projectreact 项目的全局媒体查询
【发布时间】:2018-11-21 12:57:12
【问题描述】:

我正在尝试在具有全局断点的 scss 上生成样式的一般结构,作为反应项目上的媒体查询,可以重用结构来遵循我们声明为全局的媒体查询。 我对这个有点迷茫,有什么想法吗?

当我的意思是全局时,我们可以在项目的根部定义断点,我们可以在组件上使用任何引用。

提前致谢。

【问题讨论】:

  • 这个问题需要更多细节。当您说“全局”时,您的意思是暗示您只想在应用的顶层包含样式,而不是逐个声明组件?

标签: reactjs sass


【解决方案1】:

我想到了三种方法:

  1. 您可以创建一个variables.scss 文件,您可以在其中写入断点的值:

$sm: 576px; $md: 768px; $lg: 992px; $xl: 1200px;

并在您的 scss 中使用以下变量:

@media only screen and (min-width: $sm) {
    .container {
        .max-width: 450px;
    }
}
@media only screen and (min-width: $md) {
    .container {
        .max-width: 650px;
    }
}
@media only screen and (min-width: $lg) {
    .container {
        .max-width: 900px;
    }
}
@media only screen and (min-width: $xl) {
    .container {
        .max-width: 1000px;
    }
}
  1. 或者您可以在 mixins.scss 文件中提到的变量来创建一些媒体查询混合:

    @mixin small { @media only screen and (min-width: $sm) { @content; } }

然后,在你的主要 scss 代码中使用这些 mixin:

.container {
    @include small {
        max-width: 450px;
    }
    ...
}
  1. 或者,如果这些媒体查询的用例有限(例如隐藏和显示元素),您可以定义包含所有变体的其他 mixin:

    $displays: none inline inline-block block table table-cell table-row flex inline-flex; $sizes: ( sm: $sm, md: $md, lg: $lg, lg: $xl ); @each $display in $displays: @each $size-key $size in $sizes { .display-#{size-key}-#{display} { display: $display !important; } } }

关于导入文件的注意事项: 我个人会将我的所有帮助程序 scss(变量、mixins 等)导入项目根目录中名为 styles/index.scss 的文件中,其中包括规范化和其他我要定义的全局规则,然后将此文件导入我的其他 scss 文件中:

// styles/index.scss
@import './variables.scss';
@import './mixins.scss';
...

// container.scss
@import './styles/index.scss';

【讨论】:

  • 我会在我的所有组件上引用这个 variables.scss 吗?还是每个组件都会自动引用该文件?
  • Nice Masious,最后一个问题来完成这个问题。您知道是否会为每个组件复制该导入,还是会在我们开始部署后减少导入?
  • 当然可以!您在每个想要使用这些值的文件中导入 index.scss 文件,但是当它转译时,所有内容都只会导入一次!此外,在 css 输出中没有任何变量定义! PS:投票也将不胜感激。 :)
猜你喜欢
  • 2015-12-31
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多