改变 react-select 组件的高度

Changing height of react-select component

我正在使用 react-select 组件以及 bootstrap v4

所有bootstrap的东西似乎都是基于35px的高度,react-select组件的默认高度是38px,看起来有点奇怪。

知道如何更改组件的高度吗?

它使用了一些我以前从未遇到过的奇怪的 JS 样式库。我已经设法让它模仿焦点上的轮廓使用它,但高度逃脱了我,非常感谢任何帮助

可以玩玩here

您可以将样式添加到 select 组件的任何部分,查看相关 docs

这是您所要求的working demo

在您的情况下,您需要添加的代码如下所示:

const customStyles = {
  control: base => ({
    ...base,
    height: 35,
    minHeight: 35
  })
};

并且在 select 组件中:

<Select
          className="basic-single"
          classNamePrefix="select"
          defaultValue={colourOptions[0]}
          isDisabled={isDisabled}
          isLoading={isLoading}
          isClearable={isClearable}
          isRtl={isRtl}
          isSearchable={isSearchable}
          name="color"
          options={colourOptions}
          styles={customStyles}
 />

我能够重写菜单列表的 css 样式:

    /* over write css in react-select module */
    .Select__menu-list {
      max-height: 120px !important;
    }

CSS 方式

您可以指定 classNamePrefix 并用它来覆盖 CSS 样式。

<Select classNamePrefix="mySelect" />
.mySelect__value-container{
 height: 35px;
}

花了几个小时,我最终得到了反应的精确 30px 高度 select 和边框 1px:

  const customStyles = {
    control: (provided, state) => ({
      ...provided,
      background: '#fff',
      borderColor: '#9e9e9e',
      minHeight: '30px',
      height: '30px',
      boxShadow: state.isFocused ? null : null,
    }),

    valueContainer: (provided, state) => ({
      ...provided,
      height: '30px',
      padding: '0 6px'
    }),

    input: (provided, state) => ({
      ...provided,
      margin: '0px',
    }),
    indicatorSeparator: state => ({
      display: 'none',
    }),
    indicatorsContainer: (provided, state) => ({
      ...provided,
      height: '30px',
    }),
  };

如果您只想调整框的大小,请使用此选项。

.create-select {
    width: 160px;
    float: right;
    color: #000;
    [class$="ValueContainer"] {
        min-height: 28px !important;
        max-height: 28px;
    }
    [class$="IndicatorsContainer"] {
        min-height: 28px !important;
        max-height: 28px;
    }
    [class$="-Input"] {
        min-height: 28px !important;
        max-height: 28px;
        padding: 0px;
    }
    [class$="-control"] {
        min-height: 28px !important;
        max-height: 28px;

    }
}

我几乎无法使用 theme 属性将 Select 组件缩小到 32px( 在我的浏览器 中)。当高度大于 45px 时效果很好。您也可以省略 baseUnit 属性。

它不适用于小尺寸。

  const theme = (theme: Theme) => ({
    ...theme,
    spacing: {
      ...theme.spacing,
      controlHeight: 30,
      baseUnit: 0,
    }
  });
<Select options={props.options} theme={theme}/>

你不能让它小于 36px 的原因是 dropdownIndicatorindicatorContainer(显示清晰的图标)总共占用了 20px(图标)+ 8px 的填充双方。如果你减少填充,minHeight 将实际工作。

dropdownIndicator: (styles) => ({
    ...styles,
    paddingTop: 7,
    paddingBottom: 7,
}),
clearIndicator: (styles) => ({
    ...styles,
    paddingTop: 7,
    paddingBottom: 7,
}),

您可以使用 dropdownIndicatorclearIndicator 的填充。

我注意到由于 valueContainer,您不能在 minHeight 中低于 30 像素,除非您更改它的 height/padding。

原因

.control 定义了 38pxmin-height

修复

.control 上的 min-height 更改为您想要的高度。

const customStyles = {
  control: (provided, state) => ({
    ...provided,
    minHeight: '30px',
    ...additionalStyles
  }),
};