CSSアニメーションでinputに動きをつける
昨今CSS3やjQueryによって簡単に動きを付けられるようになっているので、
マテリアルデザインでも提唱していますが、インタラクティブな動きつける傾向が強まっています。
傾向があるというか色々付けたがっているという感じもしますが・・・(僕もそんな一人です・・・)
ということで、今回は、
今まであまり動きをつけることのなかったフォームのinputに動きをつけてみました。
こういうサイトを見つけたので、
マネしてやってみました。
Awesome input focus effects – Usingcss3
試したデモは以下からご覧ください。
DEMO
html
1 2 3 4 5 6 7 8 9 | <div class="inputBox"> <input type="text" class="style1"/><label>名前</label><span class="border"></span> </div> <div class="inputBox"> <input type="text" class="style2" /><label>会社名</label><span class="border"></span> </div> <div class="inputBox"> <input type="text" class="style3" /><label>電話番号</label><span class="border"></span> </div> |
css
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | .inputBox { position: relative; width: 200px; margin: 0 0 50px 0; } .inputBox input { outline: none; width: 100%; font-size: 14px; -webkit-transition: 0.3s; -moz-transition: 0.3s; -ms-transition: 0.3s; -o-transition: 0.3s; transition: 0.3s; } .inputBox label { -webkit-transition: 0.3s; -moz-transition: 0.3s; -ms-transition: 0.3s; -o-transition: 0.3s; transition: 0.3s; position: absolute; color: #aaa; } .inputBox input.style1 { padding: 5px 0; border: none; border-bottom: 1px solid #ccc; } .inputBox input.style1 ~ label { top: 2px; left: 0; } .inputBox input.style1:focus ~ label, .inputBox input.style1.isVal ~ label { top: -12px; font-size: 11px; color: #EBC70A; } .inputBox .border { position: absolute; left: 0; bottom: 0; display: block; height: 1px; width: 0; background-color: #EBC70A; -webkit-transition: 0.4s; -moz-transition: 0.4s; -ms-transition: 0.4s; -o-transition: 0.4s; transition: 0.4s; } .inputBox input.style1:focus ~ .border, .inputBox input.style1.isVal ~ .border { width: 100%; } .inputBox input.style2 { padding: 8px; } .inputBox input.style2 ~ label { top: 7px; left: 8px; } .inputBox input.style2:focus, .inputBox input.style2.isVal { border-color: #EBC70A; } .inputBox input.style2:focus ~ label, .inputBox input.style2.isVal ~ label { top: -17px; left: 0; font-size: 11px; color: #EBC70A; } .inputBox input.style3 { padding: 8px; } .inputBox input.style3 ~ label { top: 7px; left: 8px; } .inputBox input.style3:focus, .inputBox input.style3.isVal { background-color: #f3f3f3; } .inputBox input.style3:focus ~ label, .inputBox input.style3.isVal ~ label { top: -17px; left: 0; font-size: 11px; } |
動き自体はCSSだけでtransition付けてるくらいですね。
このtransitionはいいですね。これだけである程度アニメーション付けられますね。
cssだけで、inputにfocusした際に他の要素を動かすための方法は、
子要素にするか、隣接させるかにしないとcss指定ができないため、今回はinputの後に要素を配置しています。
その指定の仕方が上に記述してある
input.style1 ~ label
という記述方法です。
これは、input.style1の後ろに記述してある要素にcssを適用させることができます。
なので、htmlのlabelの位置を変更すると、cssが効かなくなってしまうのでご注意ください。
そしてcssだけでは、
inputの要素が入っていても動いてしまうので、
jQueryによってinputに値がある場合は、focusにした状態のままにします。
1 2 3 4 5 6 7 8 9 | $(function(){ $(".inputBox input").focusout(function(){ if($(this).val() != ""){ $(this).addClass("isVal"); }else{ $(this).removeClass("isVal"); } }); }); |
値がある場合、”isVal”というclassをつけるだけです。
isValがある時にfocusにしたままの状態にするのはcssで行います。
それも上記cssの箇所に記述してあります。
もっといろんな動きが今後出てくるかと思いますが、
僕もなにか考えていきたいと思います。
これからは何かユーザーに操作させる要素の場合、こういったインタラクティブな動きが必須になってくる気がしますのでいろいろ試してみたいと思います。
Author Profile
スターフィールド編集部
SHARE