LoginSignup
23
8

More than 5 years have passed since last update.

お手軽フローディングラベル実装

Last updated at Posted at 2017-11-19

はじめに

そもそもフローディングラベルってなんぞやと思いますが、説明するよりみた方が早いと思いますので、先に完成形をお見せします。

daa0bf48801d2e1f9d49145f0403afc6.gif

このように入力欄に何か入力するとプレースホルダの記述が上に見えるようになっています。
これをフローディングラベルと言います。

実装してみよう

今回はRailsを使ってますが、さわるのはhtmlとcssとjavascripの部分だけです。(javascriptは数行しか書きません。)

さっそくhtmlの部分から見てみましょう。
ユーザー編集画面のコードです。

views/users/edit.html.slim
= form_for current_user do |f|
  .field
    label.field-label
      |First name
    = f.text_field :first_name, placeholder: 'First name', required: true, class: 'field-input'

slimで書いていますが、erbだと下のようになります。

views/users/edit.html.erb
<%= form_for [current_user] do |f| %>
  <div class="field">
    <label class="field-label">
      First name
    </label>
    <%= f.text_field :first_name, placeholder: 'First name', required: true, class: 'field-iput' %>
<% end %>

次にcssのコードです。

stylesheets/user.css

.field-label {
  color: #999;
  font-size: 14px;
  opacity: 0;
  transition: all .2s ease-out;
}

.field-not-empty .field-label {
  opacity: 1;
  padding-left: 5px;
}

transition: all .2s ease-out;はなくてもいいのですが、アニメーション設定があると良いUIになるので設定しておいていいかと思います。

次にjavascriptのコードです。

views/users/edit.js.erb
('.field-input').on('input', function() {
  var $field = $(this).closest('.field');
  if (this.value) {
    $field.addClass('field-not-empty');
  } else {
    $field.removeClass('field-not-empty');
  }
});

ここのコードの流れですが、フォームに入力があれば動くようにしています。
var $field = $(this).closest('.field');.field-inputの親クラスをとってきています。
それが、.fieldです。
if (this.value)つまりこれはフォームに何かしらの文字があれば、.field-inputにもう一つ.field-not-emptyクラスを追加して、もしフォームに文字がなかったら.field-not-emptyクラスを消すということです。
クラスを追加したり、消したりしてることで何をやっているかというと、クラスが消えてる状態、つまりopacityで0にして見えないようにしていて、フォームに入力されたら、opacityを1にすることで文字を出しています。

参考サイト

http://uxmilk.jp/60672
https://webkikaku.co.jp/blog/htmlcss/floating-labels/

23
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
8