带样式的组件不会覆盖内联样式
Styled component doesn't override inline styles
我正在尝试覆盖第三方组件内联样式。
我关注了文档how can i override inline styles
所以,我使用 &[style]
覆盖内联样式,但这不起作用。
我使用的第三方组件是CookieConsent
现在,我的组件看起来像这样:
import React from 'react';
import CookieConsent from 'react-cookie-consent';
import styled from 'styled-components';
const StyledCookieBanner = styled(CookieConsent)`
&[style] {
justify-content: center;
align-items: center;
width: calc(100% - 20px);
margin: 10px;
padding: 20px;
background-color: white;
border-radius: 22px;
box-shadow: 0 0 19px 3px rgba(0, 0, 0, 0.17);
}
`;
const CookieBanner = (): React.ReactElement => {
return (
<StyledCookieBanner debug buttonText='Ok'>
Cookie
</StyledCookieBanner>
);
};
export default CookieBanner;
我也试过how can i override styles with higher specificity没成功。
我发现覆盖样式的唯一方法是做类似的事情并使用 !important
const StyledCookieBanner = styled(CookieConsent)`
> div {
justify-content: center;
align-items: center !important;
width: calc(100% - 20px) !important;
margin: 10px;
padding: 20px;
background-color: white !important;
border-radius: 22px;
box-shadow: 0 0 19px 3px rgba(0, 0, 0, 0.17);
}
`;
也试过了,没成功
const StyledCookieBanner = styled(CookieConsent)`
> div {
// &&& {
&[style] {
justify-content: center;
align-items: center;
...
}
}
`;
文档看起来很清楚,但我没有成功。
我错过了什么吗?这可能还是我应该使用 style
组件道具?
从您链接的文档页面:
Inline styles will always take precedence over external CSS, so you cannot override it by simply increasing specificity.
让我们就此打住。 Styled Components 添加 classes 到元素。在 HTML/CSS 中,style
属性样式几乎总是胜过基于 class 的样式; Styled Components(或任何其他基于 class 的库)无法改变它......除非你使用 !important
的“hack”,即......
There is a neat trick however, which is to use the style element-attr CSS Selector in conjunction with !important:
!important
是该 hack 的重要组成部分,因此您发布的(有效)代码:
const StyledCookieBanner = styled(CookieConsent)`
> div {
justify-content: center;
align-items: center !important;
width: calc(100% - 20px) !important;
margin: 10px;
padding: 20px;
background-color: white !important;
border-radius: 22px;
box-shadow: 0 0 19px 3px rgba(0, 0, 0, 0.17);
}
`;
都是正确的,也是你唯一的选择。
如果你真的想覆盖 style
属性...覆盖样式属性 :) 不要使用样式化组件,在你的元素上使用 style
道具(或者在你的情况下,请 react-cookie-consent
使用 style
道具来实现该效果。
我正在尝试覆盖第三方组件内联样式。
我关注了文档how can i override inline styles
所以,我使用 &[style]
覆盖内联样式,但这不起作用。
我使用的第三方组件是CookieConsent
现在,我的组件看起来像这样:
import React from 'react';
import CookieConsent from 'react-cookie-consent';
import styled from 'styled-components';
const StyledCookieBanner = styled(CookieConsent)`
&[style] {
justify-content: center;
align-items: center;
width: calc(100% - 20px);
margin: 10px;
padding: 20px;
background-color: white;
border-radius: 22px;
box-shadow: 0 0 19px 3px rgba(0, 0, 0, 0.17);
}
`;
const CookieBanner = (): React.ReactElement => {
return (
<StyledCookieBanner debug buttonText='Ok'>
Cookie
</StyledCookieBanner>
);
};
export default CookieBanner;
我也试过how can i override styles with higher specificity没成功。
我发现覆盖样式的唯一方法是做类似的事情并使用 !important
const StyledCookieBanner = styled(CookieConsent)`
> div {
justify-content: center;
align-items: center !important;
width: calc(100% - 20px) !important;
margin: 10px;
padding: 20px;
background-color: white !important;
border-radius: 22px;
box-shadow: 0 0 19px 3px rgba(0, 0, 0, 0.17);
}
`;
也试过了,没成功
const StyledCookieBanner = styled(CookieConsent)`
> div {
// &&& {
&[style] {
justify-content: center;
align-items: center;
...
}
}
`;
文档看起来很清楚,但我没有成功。
我错过了什么吗?这可能还是我应该使用 style
组件道具?
从您链接的文档页面:
Inline styles will always take precedence over external CSS, so you cannot override it by simply increasing specificity.
让我们就此打住。 Styled Components 添加 classes 到元素。在 HTML/CSS 中,style
属性样式几乎总是胜过基于 class 的样式; Styled Components(或任何其他基于 class 的库)无法改变它......除非你使用 !important
的“hack”,即......
There is a neat trick however, which is to use the style element-attr CSS Selector in conjunction with !important:
!important
是该 hack 的重要组成部分,因此您发布的(有效)代码:
const StyledCookieBanner = styled(CookieConsent)`
> div {
justify-content: center;
align-items: center !important;
width: calc(100% - 20px) !important;
margin: 10px;
padding: 20px;
background-color: white !important;
border-radius: 22px;
box-shadow: 0 0 19px 3px rgba(0, 0, 0, 0.17);
}
`;
都是正确的,也是你唯一的选择。
如果你真的想覆盖 style
属性...覆盖样式属性 :) 不要使用样式化组件,在你的元素上使用 style
道具(或者在你的情况下,请 react-cookie-consent
使用 style
道具来实现该效果。