CSSでつまづいたポイント ― transparent, transition, box-sizing
公開:
更新:
過去にCSSでつまづいたポイントとかメモしておこうと思います。 CSSグラデーションで何か黒くなるなーと思ったら、 こういう場合、グラデーション開始地点の色を 修正後はこんな感じの指定になります。 色の指定方法が混ざって分かりづらいときは終了地点もrgbaかrgbで書くといいんじゃないでしょうか。 なんでこういうことが起きるのかというと、 CSS Color Module Level 3 - 4.2.3. ‘transparent’ color keyword CSS Gradientにおける"transparent" - Weblog - hail2u.net Operaだとグラデーションのときにも自動で色調整してるっぽいです。さっきのデモをOperaで見ると黒い部分はでてきません。 ある要素にマウスオーバーしたときに何か変化させるというのはよくありますが、 マウスが乗ったときには背景色を変えたいと思って、次のように書いたとしましょう。 こういう指定をするとマウスが離れたときに一瞬で戻ってしまいます。 ホバーで何か 何もスタイルを指定していない 一応、自分は hr要素のbox-sizing - おれ ここ めも かきなぐる おまえ ここ よむ なぐる - subtech この記事読むまで知りませんでした……。
このくらい分かっとけと言われそうですが、まあ自分はその程度だということで。transparent
についてtransparent
を使っていないかどうか見てみましょう。
たとえば、透明から青に綺麗にグラデーションしたいという場合、次のような指定では上手くいきません。.gradient {
background: linear-gradient(top, transparent, #268bd2);
}
transparent
ではなく、終了地点の色をrgbaで不透明度0
で指定します。
今回は#268bd2
ですので、rgba(38, 139, 210, 0)
ですね。.gradient {
background: linear-gradient(top, rgba(38, 139, 210, 0), #268bd2);
}
違いはデモでご確認ください。transparent
はrgba(0, 0, 0, 0)
のショートハンドキーワードとして扱われるからです。つまりは黒の不透明度ゼロですね。
CSS Color Module Level 3に書かれていますのでご参照ください。transparent
はグラデーションのときと、transition
のときでは扱いが変わるそうです。ホバー時の
transition
についてtransition
でその変化をアニメーションさせられるようになります(なりました)。
そこでハマったのは、マウスが乗ったときはアニメーションしながら変化するのに、マウスが離れたら一瞬で元の状態に戻ってしまう、というもの。.transition {
background: #fff;
}
.transition:hover {
background: #268bd2;
transition: all 1s linear;
}
これを修正するには次のように書きます。.transition {
background: #fff;
transition: all 1s linear;
}
.transition:hover {
background: #268bd2;
}
transition
の指定を:hover
のところじゃなくて、元の要素に指定を変更しました。:hover
に指定すると、マウスが乗っているときだけの指定になってしまうので、マウスが離れたときには適用されず、すぐ元の状態に戻ってしまいます。transition
使ってアニメーションさせるときには、:hover
擬似クラスではなく、元のセレクタの方に指定するようにしたほうがいいでしょう。
離れたらすぐに元の状態に戻したい場合は:hover
に指定するといいんじゃないでしょうか。hr
要素がFirefoxだけ変hr
要素をFirebugで見ると分かりますが、-moz-box-sizing: border-box
が指定されています。
なので、最初に統一しておくといいかもしれません。hr
要素を使う場合にはこんな感じのを入れてます。hr {
-moz-box-sizing: content-box;
height: 0;
}
他にもいろいろあった気がするんですが、ぱっと思い出せるのはこのくらいです。