具有相同值的选择器的JSS数组

时间:2019-01-12 02:04:05

标签: javascript reactjs jss

我为使用JSS的React项目创建了一个全局样式表。我对CSS,SASS和CSS模块非常满意,但这是我第一次使用JSS。

标题将具有相同的边距。由于可维护性和性能的原因,我不想输入多个类型,也不想在编译样式中多次显示它。我也希望不必在所有标题中添加一个类。

由于选择器数组([h1,h3,h4,h5,h6]),我的JSS无法正常工作:

const globalStyles = theme => ({
    '@global': {
        body: {
            fontFamily: ['Roboto', 'sans-serif'].join(','),
        },
        [h1, h3, h4, h5, h6]: {
            margin: '0 0 .35em 0'
        },
        h1: {
            fontSize: theme.typography.pxToRem(40),
            fontWeight: 600
        },
        h3: {
            fontSize: theme.typography.pxToRem(34),
            lineHeight: 1.75
        },
        h5: {
            fontSize: theme.typography.pxToRem(28),
            lineHeight: 'normal'
        },
        h6: {
            fontSize: theme.typography.pxToRem(20),
            lineHeight: 'normal'
        }
    }
})

export default globalStyles

我正在尝试实现以下输出:

body {
    font-family: Roboto, sans-serif
}
h1, h3, h4, h5, h6 {
    margin: 0 0 .35em 0
}
h1 {
    font-size: 2.5rem;
    font-weight: 600;
}
h3 {
    font-size: 2.125rem;
    line-height: 1.75;
}
h5 {
    font-size: 1.75rem;
    line-height: normal;
}
h6 {
    font-size: 1.25rem;
    line-height: normal;
}

JSS是否可能?我已经阅读了一些有关JSS的文章,但没有找到解决方案。

2 个答案:

答案 0 :(得分:1)

只需将它们放入逗号分隔的字符串中,就像在常规老式 CSS中那样:

'@global': {
  'h1, h3, h4, h5, h6': {
     margin: "0 0 .35em 0"
  }
}

可以使用例如。当然,[…].join(', ')用于构造字符串(就像您对上面的font-family所做的一样)。

答案 1 :(得分:0)

[h1,h3,h4,h5,h6]是错误的JavaScript语法,并非特定于JSS。您只能在一个属性中使用一个变量。因此您可以编写[h],其中h是您必须预先定义或直接定义为字符串文字['h1']的变量,这没有多大意义,因为您可以将其直接用作属性。如果您确实需要将其作为变量,则也可以这样表示。之所以有效,是因为内部数组将转换为字符串,默认情况下,该字符串会在js中转换为逗号分隔的值:[1,2].toString()

  const h1 = 'h1'
  const h2 = 'h2'

  '@global': {
    [[h1, h2]]: {
      color: 'red'    
    }
  }