css - 如何使用 sass 自动化多语言背景图像

标签 css internationalization sass

这是所需的 CSS:

    body[lang=en] .my-div {background-image:url('my-image-en.png')}
    body[lang=de] .my-div {background-image:url('my-image-de.png')}
    body[lang=fr] .my-div {background-image:url('my-image-fr.png')}
    ...

我想使用这样的 mixin 来自动化这个过程:

body {
  .my-div {
     @include i18n-background-image('my-image')
  }
}

现在,我已经接近使用这个 mixin 的解决方案了:

$languages = ["en", "de", "fr", ...];    
@mixin i18n-background-image($name) {   
      @each $lang in $languages {
        background-image: url(#{$name}-#{$lang}.png)
      }
    }

但我的问题是我无法添加body[lang=#{$lang}],因为它已经嵌套在其中。我可以找到一个 hacky 解决方案,而不是嵌套类,但这不太好 - 我想实现一个干净且可读的 mixin。有办法解决吗?也许在所有嵌套类上循环迭代?

最佳答案

只要有可能,你真的想尝试超出资格。这应该可以完成工作:

$languages: en, de, fr;    
@mixin i18n-background-image($name) {   
  @each $lang in $languages {
    &:lang(#{$lang}) {
      background-image: url(#{$name}-#{$lang}.png);
    }
  }
}

.my-div {
   @include i18n-background-image('my-image');
}

输出:

.my-div:lang(en) {
  background-image: url(my-image-en.png);
}
.my-div:lang(de) {
  background-image: url(my-image-de.png);
}
.my-div:lang(fr) {
  background-image: url(my-image-fr.png);
}

A significant difference between :lang and the other methods is that it recognizes the language of the content of an element even if the language is declared outside the element in question.

http://www.w3.org/International/questions/qa-css-lang

关于css - 如何使用 sass 自动化多语言背景图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20867061/

相关文章:

HTML CSS 移除从父级继承的 div 属性

php - 如何在现有的网络项目上实现翻译?

android - 如何在 Android 中支持阿拉伯语文本?

ruby-on-rails - 为什么我的 Rails 应用程序不获取服务器上错误消息的翻译

html - 背景图像不显示在 ios 上

css - 光标 : pointer on hover or always?

reactjs - scss 上的 react 模块解析失败

jquery - 在 jQuery 中切换子菜单的可见性

css - Bootstrap - 我对 col 的定位不起作用

css - 如何根据文本行数添加行高