今回は、セレクトボックスを複数並べたいかつ横に揃えたい時にしたことを書いていきます。
セレクトボックス、決められた項目をプルダウンで表示させるアレのことです。よくアンケートフォームやアプリの会員登録画面で
見受けられますが、案件によってはこのオブジェクトを複数決められた位置に並べたいという時もあるのではないでしょうか。
現に今どきのフォームだと○○県○○市といった県と市を分けて表示するデザインが増えており、今はもうそんな感じのデザインが
主流なのかなと勝手に考えております。
自分も、今回の開発でセレクトボックスを複数出したかったので汚いながらも気合でやってみたのでもしこんなのでよければ参考に
してください。
まずは、htmlからです。reactで書いた誕生日のサンプルですね。
</pre> <span className="birthday"> <p>生年月日</p> <select value={this.state.member.year || ''} onChange={(e) => this.handleYearChange(e)} > { this.yearData.map( d => <option key={d.value} value={d.value}>{d.label}</option>)} </select> <label htmlFor="select-01">年</label> <select value={this.state.member.month || ''} onChange={(e) => this.handleMonthChange(e)} > { this.monthData.map( d => <option key={d.value} value={d.value}>{d.label}</option>)} </select> <label htmlFor="select-01">月</label> <select value={this.state.member.day || ''} onChange={(e) => this.handleDayChange(e)} > { this.dayData.map( d => <option key={d.value} value={d.value}>{d.label}</option>)} </select> <label htmlFor="select-01">日</label> <span className="error">{this.state.error ? this.state.error.birthday : ''}</span> </span> <pre>
なんでdivじゃないのとツッコミを受けそうですが、divを使うと改行してしまい一行ずつセレクトボックスが表示されてしまうという
事態が起きるので、代用して改行をしないspanを使い並列に並べるという意図でございます。
続いてcssです。
</pre> span.birthday { width: 90px; padding:0; font-size:0px; } span.birthday select { width:110px; height: 50px; margin:10px; border:1px solid black; display: inline-block; text-align: center; font-size:16px; background-color:#fff; } <pre>
あまり深いことは書いていないのですが、span.birthdayでセレクトボックスを三つ並べられるようエリアを拡大していますね。
下のspan.birthday.selectでセレクトボックスそのものの大きさとセレクトボックスの外線、位置を決めています。
以上でセレクトボックスを横向きに表示するコーディングはおしまいです。実はこれもネットにも中々乗っておらず、一つ一つ
パーツを繋ぎ合わせてせこせこ書いていました。いびつですが、正しく動きますので、reactで同じようなコンポーネントを
作りたい、でもどこにも思ったことが書いていない!というかたはもしよろしければ参考にしてみてください。