6
votes

Modification de la hauteur du composant React-Select

J'utilise le composant react-select avec bootstrap v4

Tous les éléments de bootstraps sont basés sur une hauteur de 35px semble-t-il, la hauteur par défaut du composant react-select est de 38px, ce qui semble un peu étrange.

Avez-vous des idées sur la façon dont je peux modifier la hauteur du composant?

Il utilise une bibliothèque de styles JS bizarre que je n'ai jamais rencontrée auparavant. J'ai réussi à le faire imiter le contour sur la mise au point en l'utilisant, mais la hauteur m'échappe, toute aide est très appréciée

Vous pouvez jouer avec ici


0 commentaires

7 Réponses :


9
votes

Vous pouvez ajouter vos styles à n'importe quelle partie des composants sélectionnés, jetez un œil aux docs

voici une démonstration fonctionnelle de ce que vous demandez.

Dans votre cas, le code que vous devez ajouter ressemblera à ceci:

<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}
 />

et dans le composant select:

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


3 commentaires

comme vous pouvez le voir cependant, lorsque vous diminuez la hauteur du contrôle uniquement à moins de ~ 34px, cela ne diminue en fait pas la taille des autres composants. Je dois, et j'imagine que l'affiche originale, doit diminuer la hauteur du contrôle tout en gardant la valeur centrée verticalement, le "x" sur le côté droit, etc. Je veux diminuer la hauteur de tout pour qu'il soit moins grand qu'un rectangle


Comment cela est-il voté et accepté? C'est littéralement la première chose que l'on pense essayer, et ça ne marche pas ...


Cela aurait pu être plus réfléchi si le composant pouvait répondre aux classes de contrôle de formulaire bootstrap normales pour le redimensionnement, etc.



3
votes

J'ai pu écraser le style css de la liste de menus:

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


0 commentaires

2
votes

CSS Way

Vous pouvez spécifier classNamePrefix et l'utiliser pour remplacer les styles CSS.

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

h2 >


0 commentaires

16
votes

Passant des heures, je me retrouve avec ceci pour obtenir une hauteur exacte de 30px de réaction, sélectionnez avec une bordure de 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',
    }),
  };


3 commentaires

vous monsieur êtes le vrai MVP


Qu'est-ce que ... fourni?


Les styles fournis par react-select sont fournis, si vous ne les répartissez pas, vous n'obtiendrez pas les styles par défaut pour les autres propriétés.



1
votes

Si vous souhaitez uniquement redimensionner la boîte, utilisez ceci.

.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;

    }
}


0 commentaires

0
votes

J'étais à peine capable de rendre le composant Select aussi petit que 32px ( dans mon navigateur ) en utilisant l'attribut theme . Cela fonctionne bien lorsque la hauteur est supérieure à 45 pixels. Vous pouvez également omettre l'attribut baseUnit .

Cela ne fonctionnait pas pour les petites tailles.

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


0 commentaires

1
votes

La raison pour laquelle vous ne pouvez pas le réduire à moins de 36 pixels est que les paramètres dropdownIndicator et markerContainer (l'icône claire est affichée) prennent 20 pixels (icône) + Rembourrage 8px sur tous les côtés. Si vous réduisez ce remplissage, le minHeight fonctionnera réellement.

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

Vous pouvez jouer avec le remplissage de dropdownIndicator et clearIndicator .

J'ai remarqué que vous ne pouvez pas passer sous 30px en minHeight à cause du valueContainer , à moins que vous ne modifiiez sa hauteur / remplissage.


1 commentaires

cette réponse + @ erez-lieberman fonctionne parfaitement pour des hauteurs inférieures à 36px