css 样式化组件内if语句

qyzbxkaa  于 2023-02-17  发布在  其他
关注(0)|答案(7)|浏览(216)
export enum SizeEnum {
    Small,
    Large
}

export interface ICheckbox {
    Size: SizeEnum;
}

const Box = styled.div`
    height: 20px;
    width: 20px;
`

在上面的代码中,我希望能够根据prop有条件地更改<Box>的高度和宽度值。我该怎么做呢?

mlnl4t2r

mlnl4t2r1#

另一种方法,如果你想添加几个css样式。

const Box = styled.div`
    height:100px;
    width:100px;
    ${props => props.Size === 'Small' && css`
         height:20px;
         width:20px;
    `}
`
inb24sb2

inb24sb22#

有关详细信息,请参见Logical OperatorsAdapting based on props

// Box.
const Box = styled.div`

  height: ${({Size}) => 
    Size === 'Small' && '25px' ||
    Size === 'Large' && '100px' || 
    '50px'
  };

  width: ${({Size}) => 
    Size === 'Small' && '25px' || 
    Size === 'Large' && '100px' || 
    '50px'
  };

`

// Render.
<Box/> // 50px - Normal.
<Box Size="Small"/> // 25px - Small.
<Box Size="Large"/> // 100px - Large.
noj0wjuj

noj0wjuj3#

您可以使用三元运算符

const Box = styled.div`
height: ${props => props.Size === 'Small' ? '20px' : '40px'}
width: ${props => props.Size === 'Small' ? '20px' : '40px'}
`

参考:https://www.styled-components.com/docs/basics

snvhrwxg

snvhrwxg4#

您可以在以下内容中使用 *elvis运算符 *:

${(props) => props.someValue ? css` width: 20px;` : css` width: 100px; `}

希望这对研究如何在 *React样式的组件 * 中使用 * 逻辑运算符 * 的人有所帮助。

rqqzpn5f

rqqzpn5f5#

我们可以像jsx一样添加if检查

const Box = styled.div`
    height:100px;
    width:100px;
    ${props => props.Size === 'Small' && `
         height:20px;
         width:20px;
    `}
`

注:无需包含单词css

f0brbegy

f0brbegy6#

你可以在TypeScript中添加接口,并对默认值、小框和大框使用布尔值。这个例子是为那些有两个以上选择的人准备的。如果有两个选择,我会使用箭头函数和? :操作符。

interface Sizes { 
  small?: boolean, 
  large?: boolean 
}

// Box.
const Box = styled.div<Sizes>`
  // p in this case means parameter which can have small and large booleans
  height: ${p => 
    (p.small && '25px') ||
    (large && '100px') || 
    '50px'
  };

  width: ${({Size}) => 
    (small && '25px') || 
    (large && '100px') || 
    '50px'
  };

`

// Render.
<Box/> // 50px - Normal.
<Box small/> // 25px - Small.
<Box large/> // 100px - Large.
afdcj2ne

afdcj2ne7#

也可以使用实际的if/else语法,重要的是返回值应该是字符串:

const DrawerItemTitle = styled.div<{isExpanded: boolean}>(props => {
    const baseStyles = `
        white-space: nowrap;
    `;
    const expandedStyles = baseStyles + `
        opacity: 1;
        transition: opacity 0.4s;
        text-align: center;
        flex-grow: 1;`
    const notExpandedStyles = baseStyles + `
        opacity: 0;
        transition: opacity 0s;
        position: absolute;
        width: 100%;
    `;

    if(props.isExpanded) {
        return expandedStyles; 
    }
    else { 
        return notExpandedStyles;
    }
);

相关问题