首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React样式-组件3按钮大小

React样式-组件3按钮大小
EN

Stack Overflow用户
提问于 2018-03-08 20:32:04
回答 3查看 4.1K关注 0票数 1

基于道具的三种样式类型的最佳方式是什么?

就像Bootstrap一样,目标是有一个默认的、小型的和中型的。

在这里,我有默认和小,但我如何解释一个大的大小?

代码语言:javascript
复制
 const Button = styled.button`
   background: teal;
   border-radius: 8px;
   color: white;
   height: ${props => props.small ? 40 : 60}px;
   width: ${props => props.small ? 60 : 120}px;
`;

class Application extends React.Component {
  render() {
    return (
      <div>
        <Button small>Click Me</Button>
        <Button>Click Me</Button>
        <Button large>Click Me</Button>
      </div>
    )
  }
}

科德芬

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-08 20:43:17

下面是我使用的一个选项的缩写示例。

代码语言:javascript
复制
/* import separate css file from styles.js */
import * as Styles from './styles';

/* concat styles based on props */
const ButtonBase = styled.button`
  ${Styles.buttonbase};
  ${props => Styles[props.size]};
  ${props => Styles[props.variant]};
`;

const Button = ({ size, variant, ...rest }) => (
  <ButtonBase
    size={size}
    variant={variant}
    {...rest}
    ...

在样式文件中(为了简洁起见,删除css )

代码语言:javascript
复制
import { css } from 'styled-components';

/* styles common to all buttons */
export const buttonbase = css`...`;

/* theme variants */
export const primary = css`...`;
export const secondary = css`...`;
export const tertiary = css`...`;

/* size variants */
export const small = css`...`;
export const medium = css`...`;
export const large = css`...`;
票数 4
EN

Stack Overflow用户

发布于 2018-03-09 19:32:11

我也认为这是一种解决方案:

代码语言:javascript
复制
const ButtonBase = styled.button`
    padding: ${props => {
        if (props.xl) return props.theme.buttonSize.xl;
        if (props.lg) return props.theme.buttonSize.lg;
        if (props.md) return props.theme.buttonSize.md;
        if (props.sm) return props.theme.buttonSize.sm;
        return props.theme.buttonSize.nm;
    }};
`

https://codesandbox.io/s/735ppo790x

票数 4
EN

Stack Overflow用户

发布于 2022-07-06 10:47:27

Harsha Venkatram,这是打字稿:

代码语言:javascript
复制
import * as Styles from './styles';

interface Props {
  size: number; //for example, or string or whatever type is it
  variant: 'primary' | 'secondary' | 'tertiary' //etc...
}

const ButtonBase = styled.button<Props>`
  ${Styles.buttonbase};
  ${props => Styles[props.size]};
  ${props => Styles[props.variant]};
`;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49181959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档