はじめに
この記事はTwitterで人気のハッシュタグ#100DaysOfCodeをつけて、
100日間プログラミング学習を続けるチャレンジに挑戦した27日目の記録です。
動作環境
- Rails 5.2.0
- ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin17]
本日学んだこと
- Semantic UIの使い方
Semantic UIとは?
Semantic UIは、デザインフレームワークの一種。
代表的なものにBootstrapがあり、こちらについては名前を聞いたことがある人もいるでしょう。
公式サイト
Semantic UIの特徴
これは個人的な感想ですが、Bootstrapよりも、クラス名がかなり直感的で、どんな効果になるのか想像しやすいですね。
<div class="left floated twelve wide column">
<div class="ui checkbox">
<input type="checkbox" name="task"
v-on:click="$parent.toggleDone($event, task.id)"
:checked="task.completed" >
<label>{{ task.name }}
<span class="description">{{ task.description }}</span>
</label>
</div>
</div>
上記のコードは、Vue.jsのtemplateオプションに使用したHTML。
クラス名に記載しているものは全て、Semantic UIのものになります。
例えば、グリッドレイアウトの指定は、Bootstrapの場合col-12
のように指定しますが、Semantic UIの場合はtwelve wide column
のように、ネーミングがきっちりとしていますよね。
「クラス名が長いとめんどくさい。。」と思うかもしれませんが、個人的には初心者でもイメージしやすいネーミングの方が重要だと思います。
この辺は完全に好みかもしれませんけどね。
Railsでの導入方法
それではここから、Railsでの導入方法について、解説していきます。
まずは、Railsで使用するためにGemfileを編集します。
# Gemfile
#semantic UI Framework
gem 'semantic-ui-sass'
追記したら、忘れずにbundle install
をしましょう。
# --jobs=4をつけると、bundle installがめっちゃ早く終わります。
bundle install --jobs=4
続いて、application.scss
にsemantic ui
をimportします。
/* app/assets/stylesheets/application.scss */
@import "semantic-ui";
導入の方法は、たったこれだけ。あとは、公式サイトに記載のクラス名を指定するだけで、OK。
注意点としては、個別でスタイルを当てる場合、!important
を指定しないとSemantic UIのスタイルが優先されること。
あまり!important
は多様しない方がいいのですが、デザインフレームワークを使う以上はやむなしかも。。
今回使用したSemantic UIのコンポーネントをピックアップ
sidebar
ページにサイドバーをつけることができるコンポーネント。
<div class="ui sidebar">
</div>
該当ページ
https://semantic-ui.com/modules/sidebar.html
menu
メニューのUIを作ることができるコンポーネント。vertical
と組み合わせると、縦型のメニューを作成します。
また、inverted
を指定すると、色を反転させて、コントラストを大きくすることができます。
<div class="ui inverted vertical menu">
</div>
該当ページ
https://semantic-ui.com/collections/menu.html
visible
クラス内にある要素を表示可能にします。
<div class="ui visible"></div>
該当ページ
https://semantic-ui.com/collections/message.html
fixed
文字通り、表示位置を固定します。fixed left
のようにすれば、常に左側に固定表示されるようになります。
<div class="ui fixed"></div>
該当ページ
https://semantic-ui.com/collections/menu.html
クラスを組み合わせると。。。?
以下のように複数のクラスを組み合わせると、画像のようなサイドバーができます。
<div class="ui sidebar inverted vertical menu visible fixed left">
</div>