- 更新日: 2014年2月27日
- HTML & CSS
Rails + bootstrap-sass で submit ボタンに class, id を割り当てずに css を指定
Rails に限った話ではないのですけれど、input type=”submit” の submit ボタン要素は、ウェブアプリケーションの色んな箇所で使います。ユーザー登録、サインイン、設定編集、投稿などなど。この submit ボタンに対して、一括して Sass(SCSS) でデザインの指定を行うTips。
— 環境 —
Firefox 27.0.1
Rails 4.0.1
bootstrap-sass 3.0.2.0
class: “btn btn-large btn-primary” をビューファイルのあちこちに書きたくない
Ruby on Rails チュートリアル:実例を使って Rails を学ぼう は何度も読んでて大変素晴らしいんだけど、気になる点の1つが以下。
Twitter bootstrap の css class が、ビューファイルの色んな箇所の submit ボタンに指定してあって、DRY 違反だと感じます。
1 |
class: "btn btn-large btn-primary" |
これを、あちこちのビューファイルに直書きするのは、メンテナンス性が低下すると思う。submit ボタンのデザインを変更する際には、このビューファイルのあちこちに散らばった class 指定を全部編集しなければなりません。
SCSS の @extend で .btn などを継承する
そこで、今日思いついて試したら、上手くいったのが以下の方法です。ビュー側の submit ボタンには class, id などを何も指定しないようにする。その後、以下を scss ファイルに追記。
app/assets/stylesheets/custom.css.scss
1 2 3 4 5 6 7 8 |
/* form */ input[type="submit"] { @extend .btn; @extend .btn-large; @extend .btn-primary; margin-top: 20px; margin-bottom: 20px; } |
これで、全ての input type=”submit” ボタン要素に、.btn, .btn-large, .btn-primary が適用されます。ただし、弱点が一つあって、input[type=”submit”] は、IE6など古いブラウザだと動作しない模様です。ここは要検証ではあるけど、デザイン端折りたい時はこの方法を採用しよう。
ビューの submit に class 指定する場合
安全策を取るなら、ビューファイルでデザインが共通する html 要素に、同じ class 指定を行い、scss ファイルでその class に対して extend するという方法のほうが良いかも。
css class をビュー側に指定する場合でも、以下のようにしたほうがメンテナンス性が上がるんじゃないか、と考えました。
ビューファイル
1 |
<%= f.submit "Follow", class: "follow_submit" %> |
app/assets/stylesheets/custom.css.scss
1 2 3 4 5 6 7 8 |
/* form */ input.follow_submit { @extend .btn !optional; @extend .btn-large !optional; @extend .btn-primary !optional; margin-top: 20px; margin-bottom: 20px; } |
以上のように書いておけば、submit ボタンのデザイン変更時に、scss ファイルだけを編集すれば、ビューで class: “follow_submit” が指定されてある submit ボタンのデザインが全部いっぺんに変更できます。ビューファイルをちまちま1個ずつ変更せずに済むので楽かな〜と。
【追記 2014/03/15】
Sass でセレクタを作成せずに @extend を使う | EasyRamble に書いたエラーが出たため、@extend に !optional フラグを追加しました。
【追記ここまで】
Sass(SCSS) の力はすごいと思うのですが、あまり詳しくはないので突っ込み歓迎です。
- HTML & CSS の関連記事
- 画像がはみ出るのを防ぐCSSスタイルシート指定(モバイル・スマホ対応)
- SassとSCSSを変換するsass-convertコマンドとウェブサービス
- CSSをBEM/MindBEMdingの命名規則で書いてみる
- Twitter Bootstrapのデザインと挙動を気軽にテストできるBootplyが超絶便利!
- CSSでスクロールバーをデザイン(WebKitブラウザ)
- はてなブックマーク人気記事ブログパーツのデザイン変更
- Twitter Bootstrapで端末サイズ毎にHTML要素の表示・非表示を切り替え
- Bootstrap3をInternet Explorer8(IE8)に対応させる
- Twitter Bootstrap のカスタマイズをライブラリ本体に手を入れずに行う
- Sass の @extend で存在しないセレクタを指定する
Leave Your Message!