如何使用样式组件在伪元素后旋转图像

Posted

技术标签:

【中文标题】如何使用样式组件在伪元素后旋转图像【英文标题】:How to rotate an image in an after pseudoelement with styled components 【发布时间】:2021-06-08 11:15:42 【问题描述】:

我有一个下拉菜单,后面的伪元素中有一个箭头,我想在单击时旋转。

这是样式化组件:

    export const Header = styled.div`
          padding: 0.2rem 0.5rem;
          &:after 
            content: url($arrowUp);
            height: 100%;
            width: 15px;
            text-align: right;
            float: right;
            transform: rotate(180deg);
  
  &:hover 
    cursor: pointer;
  
`;

这是 React.ts 组件

export const AttributeValuesChecklist: React.FC<IProps> = (
  title,
  name,
  values,
  valuesShowLimit = false,
  valuesShowLimitNumber = 5,
  onValueClick,
: IProps) => 
  const [viewAllOptions, setViewAllOptions] = React.useState(!valuesShowLimit);

  const showAttributeList = e => 
    const actualDisplay = e.target.parentNode.children[1].style.display;
    if (actualDisplay === "block") 
      e.target.parentNode.children[1].style.display = "none";
     else 
      e.target.parentNode.children[1].style.display = "block";
    

  ;

  return (
    <S.Wrapper>
      title && (
        <S.Header onClick=e => showAttributeList(e)>title</S.Header>
      )
      <DropMenu>
        values &&
          values.map((value, index) => 
            if (!viewAllOptions && index > valuesShowLimitNumber - 1) 
              return <></>;
            
            return (
              <Checkbox
                name=name
                checked=!!value.selected
                onChange=() => onValueClick(value)
              >
                value && value.name
              </Checkbox>
            );
          )
      </DropMenu>
      <S.BottomBorder />
    </S.Wrapper>
  );
;

我尝试了“数据属性”技巧,但它不起作用。因为我正在使用样式组件,所以我不知道如何使用预制类。

【问题讨论】:

箭头成功出现了吗? 是的,箭头确实出现了,并且带有原始旋转。我只是不知道如何用 JS 更改 after 属性。 【参考方案1】:
//styled-component
export const Header = styled.div<isClicked: boolean>`
          padding: 0.2rem 0.5rem;
          &:after 
            content: url($arrowUp);
            height: 100%;
            width: 15px;
            text-align: right;
            float: right;
            transform: $props => props.isClicked ? rotate(180deg) : rotate(0deg);
  
`;

//component 
//you can make a state to store the value or pass from props
 <S.Header isClicked=//boolean value>title</S.Header>

【讨论】:

喜欢它。我现在知道我可以将道具传递给样式化组件。谢谢。

以上是关于如何使用样式组件在伪元素后旋转图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在 reactjs 中使用伪元素作为内联样式? [复制]

在不工作之前使用样式化组件并将道具传递给伪元素

尝试使用样式组件“转换:旋转()”一个 <circle> 元素

角度:如何使用组件中的动画旋转图像?

如何在Firefox中垂直居中变换旋转中的伪元素

是否可以在伪元素之前/之后设置 iframe 样式?