新しいv2の反応選択コントロールは優れていますが、デフォルトでは大きすぎます。標準の選択コントロールと同じ高さに(好ましくは)シンプルな方法がありますか(Bootstrap v3を使用)?
React-Select v2は感情CSS-in-JSを使用するため、選択コンポーネントとサブコンポーネントのスタイルを制御する新しい方法は、スタイルオブジェクトをstyles
プロパティに渡すことです。 classNameを設定して、外部スタイルシートでスタイルを設定することもできます。
const customControlStyles = base => ({
height: 50,
});
<Select ... styles={control: customControlStyles} ... />
<Select ... className="myClassName" ... />
.myClassName__control {
height: 50px;
}
@craigmichaelmartinがコメントしたものに加えて、control
のminHeightは上書きすることが重要であり、本当にそれを克服するために多くの場所で設定する必要があります。
36pxのテキスト入力要素の高さと一致させるために私が働いたのは次のとおりです(これらの設定はもちろんcssでも機能します)
const customStyles = {
container: (provided) => ({
...provided,
display: 'inline-block',
width: '250px',
minHeight: '1px',
textAlign: 'left',
border: 'none',
}),
control: (provided) => ({
...provided,
border: '2px solid #757575',
borderRadius: '0',
minHeight: '1px',
height: '42px',
}),
input: (provided) => ({
...provided,
minHeight: '1px',
}),
dropdownIndicator: (provided) => ({
...provided,
minHeight: '1px',
paddingTop: '0',
paddingBottom: '0',
color: '#757575',
}),
indicatorSeparator: (provided) => ({
...provided,
minHeight: '1px',
height: '24px',
}),
clearIndicator: (provided) => ({
...provided,
minHeight: '1px',
}),
valueContainer: (provided) => ({
...provided,
minHeight: '1px',
height: '40px',
paddingTop: '0',
paddingBottom: '0',
}),
singleValue: (provided) => ({
...provided,
minHeight: '1px',
paddingBottom: '2px',
}),
};
height
プロパティを設定すると、(複数の選択した値が次の行に流出する)オーバーフローがある場合でもその高さが保持されるように見えるため、値がボックスの外側になります。
dropdownIndicator
とclearIndicator
に上下のパディングを設定し、minHeight
にcontrol
を設定することで、この問題を解決しました。
const styles = {
control: (base) => ({
...base,
minHeight: 32,
}),
dropdownIndicator: (base) => ({
...base,
paddingTop: 0,
paddingBottom: 0,
}),
clearIndicator: (base) => ({
...base,
paddingTop: 0,
paddingBottom: 0,
}),
};
<Select styles={styles}/>
また、反応選択コンポーネント全体の高さに影響を与える可能性があるため、反応選択コンポーネントの入力フィールドのスタイルを設定することもできます。私の場合、これはマテリアライズからの干渉によって起こりました。
const customStyles = {
input: styles => {
return {
...styles,
height: '1.8em'
};
}
const App = () => (
<Select
styles={customStyles}
options={...}
/>
);