Элегантный способ использовать переменный шрифт с помощью MUI

#reactjs #fonts #material-ui

Вопрос:

Поэтому я использую MUI v5 и также использую переменные шрифты.

В настоящее время моя реализация темы, на мой взгляд, довольно уродлива.

 typography: {  fontFamily: systemFonts.join(","),  fontWeightExtraBold: 800,  h1: {  fontSize: "clamp(2.625rem, 1.2857rem   3.5714vw, 4rem)",  fontWeight: 800,  lineHeight: 78 / 70,  "@supports (font-variation-settings: normal)": {  fontFamily: variableSystemFonts.join(","),  fontVariationSettings: "'wght' 800"  }  },  h2: {  fontSize: "clamp(1.5rem, 0.9643rem   1.4286vw, 2.25rem)",  fontWeight: 800,  lineHeight: 44 / 36,  "@supports (font-variation-settings: normal)": {  fontFamily: variableSystemFonts.join(","),  fontVariationSettings: "'wght' 800"  }  },  h3: {  fontSize: defaultTheme.typography.pxToRem(36),  lineHeight: 44 / 36,  letterSpacing: 0,  "@supports (font-variation-settings: normal)": {  fontFamily: variableSystemFonts.join(",")  }  },  // ...  }  

В принципе, я должен уточнить

 "@supports (font-variation-settings: normal)": {  fontFamily: variableSystemFonts.join(",") }  

Для каждого отдельного варианта типографии.

Мне интересно, есть ли более элегантный и чистый способ достичь того, что я пытаюсь сделать?

Ответ №1:

Может быть, вы можете включить его в заводскую функцию (еще не протестированную):

 const normalVariation = (extraProperties) =gt; ({  "@supports (font-variation-settings: normal)": {  fontFamily: variableSystemFonts.join(","),  ...extraProperties,  } })  
 typography: {  fontFamily: systemFonts.join(","),  fontWeightExtraBold: 800,  h1: {  fontSize: "clamp(2.625rem, 1.2857rem   3.5714vw, 4rem)",  fontWeight: 800,  lineHeight: 78 / 70,  ...normalVariation({  fontVariationSettings: "'wght' 800",  })  },  h2: {  fontSize: "clamp(1.5rem, 0.9643rem   1.4286vw, 2.25rem)",  fontWeight: 800,  lineHeight: 44 / 36,  ...normalVariation({  fontVariationSettings: "'wght' 800",  })  },  h3: {  fontSize: defaultTheme.typography.pxToRem(36),  lineHeight: 44 / 36,  letterSpacing: 0,  ...normalVariation(),  },  // ...  }