css - 如何声明多个字体并将它们中的每一个分配给一个变量并在样式组件中访问它们
问题描述
我在index.css
我的应用程序的其他地方使用字体并访问这些字体系列。
我的要求是将这些字体中的每一个分配给不同的变量。并在我的应用程序中使用这些变量。我想将这些变量统称为“常规”、“中等”,因为如果我将其从其他字体系列更改为我的应用程序其他部分中的OpenSans
其他字体系列,我不需要更改字体系列。OpenSans
我正在使用styled-components
样式。
@font-face{
font-family: 'OpenSans';
font-style: normal;
font-weight: 400;
src: url(./assets/Fonts/OpenSans-Regular.ttf)
}
@font-face{
font-family:'OpenSans-SemiBold';
font-style: normal;
font-weight: 400;
src:url(./assets/Fonts/OpenSans-SemiBold.ttf)
}
@font-face{
font-family:'OpenSans-SemiBoldItalic';
font-style: normal;
font-weight: 400;
src:url(./assets/Fonts/OpenSans-SemiBoldItalic.ttf)
}
@font-face{
font-family: 'Proxima Nova';
font-style: normal;
font-weight: 400;
src: url(./assets/Fonts/ProximaNova-Regular.ttf);
}
@font-face{
font-family: 'Proxima Nova Medium';
font-style: normal;
font-weight: 400;
src: url(./assets/Fonts/proxima-nova-medium.ttf);
}
此外,一旦将这些字体分配给不同的变量,我如何访问其他组件的样式组件,例如:
const p = styled.p`
font-family: ??? --> is it using ${variable_name} ?
`
我对 index.css 的要求:
var Medium-font = {
@font-face{
font-family: 'Proxima Nova Medium';
font-style: normal;
font-weight: 400;
src: url(./assets/Fonts/proxima-nova-medium.ttf);
}
};
var Regulat-font = {
@font-face{
font-family: 'Proxima Nova';
font-style: normal;
font-weight: 400;
src: url(./assets/Fonts/ProximaNova-Regular.ttf);
}
};
and so on..
解决方案
您不需要将整体分配给font-face
变量。字体不是你经常改变的东西。但即使你出于某种原因这样做......font-face
仍然需要像 url 和 index.css 中字体本身的名称一样进行更改,但实际 css 中唯一的更改将是font-family
属性。
您可以将 分配给font-family
styled-components 中的变量,然后在任何地方使用它。这样,您只需在主题中的一处进行更改。
您可以使用ThemeProvider
来实现这一点。
// Some component
const Para = styled.p`
font-family: ${props => props.theme.fontFamily1};
`;
const Para2 = styled.p`
font-family: ${props => props.theme.fontFamily2};
`;
// Define what props.theme will look like
const theme = {
fontFamily1: "OpenSans",
fontFamily2: " Proxima Nova"
};
//render method of App.jsx or root app file
render(
<div>
<ThemeProvider theme={theme}>
<Para>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</Para>
<Para2>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</Para2>
</ThemeProvider>
</div>
);
<Para>
组件现在将具有字体OpenSans和<Para2>
Proxima Nova。
如果您决定更改字体,只需相应地更改主题中的 fontFamily1/fontFamily2 属性,它将反映在使用该主题的所有组件中。
请参阅此以获取更多信息:https ://styled-components.com/docs/advanced#theming
希望这可以帮助 !
推荐阅读
- python - 套接字服务器未在 recv() 上暂停。立即读取 0 字节并关闭
- spring - Spring Cloud Config 客户端执行器刷新
- .net-core - 使用 ToLookup 太慢(C#、.NET Core、EntityFrameworkCore)
- python - 如何定义只能调用一次的可调用对象?
- php - WordPress:通过 for 循环将充满图像 ID 的数组转换为 src
- java - 如果三重奏中的字母重复,如何用字母表中的随机字符替换三重奏中的随机字母?
- python - 为什么浮点类型的对象在这里不可调用?
- android-intent - FileProvider 在 android 8.1 及更高版本中不起作用
- r - 匹配R中字符串中的多个模式
- erlang - Ejabberd 集群的 ACME 和 DNS 配置