56

将伪类应用于样式化组件:before的正确方法是什么?:after

我知道你可以使用

&:hover {}

:hover伪类应用于样式组件。

这适用于之前和之后的所有伪元素吗?

我已经尝试在一些相当复杂的示例中使用&:beforeand&:after策略,但我不确定我的尝试是否不起作用,因为我的示例有问题,或者它只是不能那样工作。

有人对此有一些见解吗?谢谢你。

4

5 回答 5

130

伪选择器的styled-components工作方式与 CSS 中的一样。(或者更确切地说,Sass)任何不起作用的东西都可能是您的特定代码中的问题,但是如果没有看到实际代码就很难调试!

这是一个如何使用简单的示例:after

const UnicornAfter = styled.div`
  &:after {
    content: " ";
  }
`;

<UnicornAfter>I am a</UnicornAfter> // renders: "I am a "

如果您发布代码,我可能会帮助调试您的特定问题!

于 2017-08-24T22:31:13.177 回答
9

这将打印 div 中间的三角形。

const LoginBackground = styled.div`
  & {
    width: 30%;
    height: 75%;
    padding: 0.5em;
    background-color: #f8d05d;
    margin: 0 auto;
    position: relative;
  }
  &:after {
    border-right: solid 20px transparent;
    border-left: solid 20px transparent;
    border-top: solid 20px #f8d05d;
    transform: translateX(-50%);
    position: absolute;
    z-index: -1;
    content: "";
    top: 100%;
    left: 50%;
    height: 0;
    width: 0;
  }
`;
于 2018-06-30T23:12:12.343 回答
3

This is good and simple answer:

https://stackoverflow.com/a/45871869/4499788 by mxstbr

but for elements requiring more complex logic I prefer this approach:

const Figure = styled.div`
  ${Square}:before, 
  ${Square}:after,
  ${Square} div:before, 
  ${Square} div:after {
    background-color: white;
    position: absolute;
    content: "";
    display: block;
    -webkit-transition: all 0.4s ease-in-out;
    transition: all 0.4s ease-in-out;
  }
`;
于 2020-10-07T10:04:31.813 回答
0

作为一个对象(注意双引号):

const Div = styled.div({
  '&:before': {
    content: '"a string"',
  },
})
于 2021-09-18T19:42:01.860 回答
-20
Can try like this.
It works perfectly fine

var setValue="abc";
var elementstyle = '<style>YourClass:before { right:' + abc + 'px;}</style>'
 $(".YourClass").append(setValue);

 var rightMarginForNotificationPanelConnectorStyle = '<style>.authenticated-page.dx-authenticated .dx-notification .dx-notification-dialog.dx-content-frame:before { right:' + rightMarginForNotificationPanelConnectorWithBadge + 'px;}</style>'
                        $(".authenticated-page.dx-authenticated .dx-notification .dx-notification-dialog.dx-content-frame").append(rightMarginForNotificationPanelConnectorStyle);
于 2019-04-15T10:02:07.440 回答