【问题标题】:Susy change flow from rtl to ltr if a class exists如果存在类,Susy 将流程从 rtl 更改为 ltr
【发布时间】:2017-12-19 16:08:34
【问题描述】:

如果正文中存在 ar 类,我需要将 $susy 变量从 rtl 更改为 ltr。我需要这样做以在我的网站上支持多语言,下面是相同的代码

.page-container {
    background-color: red;
    @include container($susy);

    @include susy-breakpoint($medium) {
        background-color: yellow;
        @include container($susy-medium);
    }

    @include susy-breakpoint($large) {
        background-color: lightgreen;
        @include container($susy-large);
    }

    &.ar {
        //change flow to rtl
    }

}


$medium: 768px; //tab
$large: 1024px; //desktop

//susy grid params small
$column-numbers-small: 6;
$column-width-small: 40px;
$column-gutter-small: 16px;
$available-width-small: 336px;

//susy grid params medium
$column-numbers-medium: 12;
$column-width-medium: 42px;
$column-gutter-medium: 20px;
$available-width-medium: 744px;


//susy grid params large
$column-numbers-large: 12;
$column-width-large: 86px;
$column-gutter-large: 24px;
$available-width-large: 1320px;

$susy: (
    container: $available-width-small,
    container-position: center,
    columns: $column-numbers-small,
    math: fluid,
    output: isolate,
    gutter-position: split,
    gutters: $column-gutter-small/$column-width-small,
);

$susy-medium: (
    container: $available-width-medium,
    container-position: center,
    columns: $column-numbers-medium,
    math: fluid,
    output: isolate,
    gutter-position: split,
    gutters: $column-gutter-medium/$column-width-medium,
);

$susy-large: (
    container: $available-width-large,
    container-position: center,
    columns: $column-numbers-large,
    math: fluid,
    output: isolate,
    gutter-position: split,
    gutters: $column-gutter-large/$column-width-large,
);

$susy-large-ar: (
    flow: rtl,
    container: $available-width-large,
    container-position: center,
    columns: $column-numbers-large,
    math: fluid,
    output: isolate,
    gutter-position: split,
    gutters: $column-gutter-large/$column-width-large,
);

有人可以建议如何动态覆盖这个流向。

【问题讨论】:

  • direction 最适合使用 flex,就像 susy 一样,它会在容器上添加浮动。方向: rtl 不会将左浮动更改为右浮动。还是谢谢。

标签: css sass multilingual susy


【解决方案1】:

这在您当前构图的方式中是不可能的。使用预处理器(如 Sass)的主要限制之一是变量无法访问 DOM。这意味着无法根据主体类更改变量。有几种方法可以解决这个问题,但它们都不是简单且完全动态的。基本上,您必须为每个方向创建重复的样式。

选项 1:单独的输出 CSS

有些人使用单独的 ltrrtl 样式表来做到这一点。加载一个不同的样式表,而不是添加一个类来翻转方向。要使 Sass 正常工作,请创建两个 sass 文件(例如 ltr.scssrtl.scss),然后像这样设置它们:

// set your flow at the top of each document…
$flow: (flow: rtl);

然后将所有实际样式放入 Sass “partials” (_filename)。这些部分之一可以将新流合并到您现有的变量中:

// Merge flow with other Susy settings…
$susy: map-merge($susy, $flow);
$susy-medium: map-merge($susy-medium, $flow); // etc…

然后将您的部分导入到每个文档中。这样你就可以用不同的变量编译相同的代码……

@import 'flow-setup';
@import 'actual-style-partials';

选项 2:内联复制

我看到人们用来创建类系统(而不是拆分样式表)的另一个选项在您的代码中变得有点庞大:

.element {
  @include span(3 of 12);

  .rtl & {
    @include span(3 of 12 rtl);
  }
}

您可以编写一个 mixin 来自动为您执行此操作:

@mixin flow-span($details) {
  @include span($details);

  $rtl: append($details, rtl);
  .rtl & {
    @include span($rtl);
  }
}

你必须为你使用的每个 Susy mixin 做同样的事情。

很抱歉,这两个选项都不简单,但这是您在预处理器中所能做的最好的事情。

【讨论】:

  • 感谢您的描述性回答。如果这两个选项都不简单,那么我应该为布局创建一个自定义网格并使用 flex 在其中定位元素,而不是使用 susy 作为网格?与 flex 放置方向一样:容器上的 rtl 可以非常轻松地处理大部分事情,并且不需要额外的步骤,因为 flex 不应用任何浮动属性进行定位。
  • Flexbox 是一个很好的解决方案,是的。如果您仍然希望 Susy 进行数学运算,请使用函数而不是 mixins。它们采用相同的基本语法,看起来像这样:flex: 1 1 span(3 of 12);(当然,你可以使用任何你需要的值。sass 的另一个选项是flex: 1 1 percentage(3/12);(如果你没有排水沟,它可以工作)。
  • 嘿 @MiriamSuzanne 该网站没有给出 flex 的示例,请您帮忙。我确实浏览了您的一篇文章,但这不包括 FLOAT Vs。灵活。
  • @MiriamSuzanne:谢谢你的回答,我看到你提到网格实现的文章。你能引用一个相同的SUSY3+Flex的例子吗
  • 这是一个rough example with Flexbox,展示了一个复杂的嵌套布局。 Flexbox 提供了许多我在这里没有使用过的附加选项——但你可以在标准的 flexbox 教程中学习。重要的是您可以使用我们的span 函数作为元素的flex-basis,以便将它们调整到网格大小。
猜你喜欢
  • 1970-01-01
  • 2017-08-28
  • 2012-02-13
  • 2014-10-19
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 2014-01-04
  • 2017-10-24
相关资源
最近更新 更多