CHROMA

世の中の "当たり前" を確認する

CSS アニメーションを勉強する

まずは。

学ぶ

動きをイメージする

デモを見たり簡単な方法でアニメーションを動かしながら、作りたいものをイメージする。

  • Animate.css
    • サイトを見るだけでも、アニメーションの名前と動きを覚えるのに役立つ
  • CSS3 Keyframes Animation Generator
    • ジェネレーターを使って、アニメーションを作りながら動きを確認できる
  • Learn CSS Animation
    • CSS アニメーションが使われてるサイトを見る(これが良いかどうかは知らん)

リファレンス

CSS Element Queries

レスポンシブの常識が変わる!? 君はエレメントクエリーを知っているか?
気になった。メディアクエリーはビューポートを基準にスタイルを変化させるのに対し、エレメントクエリーは要素の幅や高さ、数に対してスタイルを変化させる。

パッと思いついた使いみちは、横並びのリストで中の要素の数が増えたときに nth-child とかで行を一段落とすとか、要素の高さが狭いときはボックス内にスクロールつけるとか、そんな感じ。

すでに発表してる人もいた。
CSS Element Queries
CSS の仕様ではないとのこと。

EQCSS については別の記事もあった。
[JS]コンテンツに応じたレスポンシブデザイン!要素の幅や高さや数に基づいてスタイルを定義できるスクリプト -EQCSS
デモも多めなので、エレメントクエリーがどんなふうに使えるか把握しやすい。

(未解決)CSS のカウンターを降順に並べる

CSS のカウンターで要素を降順にする方法調べてたけど良いのが見つからなかった。

ここの「Counting Backwards!」のような方法で counter-reset にリストの総数(これが開始番号になる)を指定して、counter-increment で 1づつ引いていけばもちろん降順に並べること自体は可能。

でも、これをすると何のためにカウンターつけてるかわからなくなる。リストに項目を追加すると適当に番号をカウントしてくれるのが良いのに、追加する度に counter-reset の値を変更するのはあまり良くない。

良くないけど、他に CSS で上手いことやってる方法が見つからなかったな。

コミットメッセージの文例を探す

commit-m: GitHubコミットメッセージの文例が検索できるサービス

ちょっと前に Twitter に流れてきて、便利そうだと思って使い出してから 1週間くらいたった。そこそこの頻度で使っていて、Fix ~~ の代わりに Tweak ~~ をよく使うようになった。

少しだけ自分のコミットメッセージが改善された気がするけど、まだ怠い気持ちには勝てなくて、適当なときは Tweak で終わらせてしまうことが多いのでこれを何とかしたい。

「0」につける単位の有無で変わること

マウスオーバー時にアニメーションするリンクが、 iPhone ( iOS8 ) Safari で上手く動かないという問題に遭遇。

デモは携帯の iOS8 Safari で確認した(して)。

.link {
  &::after {
    width: 0; // <-
    transition: width 0.5s ease;
  }
  &:hover::after {
    width: 100%;
  }
}

このようにしていた場合、iOS8 Safari で挙動を確認すると、リンクをタップしてもアニメーションだけが発生して遷移先には飛ばず、二度目のタップでようやく遷移する。PC や Android 4.0 端末のブラウザでは一度のタップで問題なく遷移する。

解決

.link {
  &::after {
    width: 0%; // <-
    transition: width 0.5s ease;
  }
  &:hover::after {
    width: 100%;
  }
}

単位を揃えて付けるだけ。リンクをマウスオーバーしたときの width の単位をパーセントで指定しているが、マウスオーバー前の width にも同じ単位を付けておくことでこの問題は回避できる。

追記

あんまりなタイトルをそこそこなタイトルに変更。

「良いのが思いつかないんだが、まだマシであろう!」という気持ち。


僕は「 0 」に単位をつけないコーディングスタイルなので、どうしようか、えらく面倒くさいと思っている。

左から右方向に向けて下線を消す

まずは右から左

Hugo Doc で見かけたスタイル、アニメーションである。

.link {
  display: inline-block;
}

.link::after {
  content: "";
  display: block;
  width: 100%;
  height: 1px;
  background-color: #000;
}

.link:hover::after {
  width: 0;
  transition: width 0.5s ease;
}

左から右に消す

oveflow: hiddentransform: translateX(100%) を使った場合

transform: translateX(100%)margin-left: 100% に置き換えても良い。

.link {
  display: inline-block;
  overflow: hidden; /* <- */
}

.link::after {
  content: "";
  display: block;
  width: 100%;
  height: 1px;
  background-color: #000;
}

.link:hover::after {
  transform: translateX(100%); /* <- */
  transition: transform 0.5s ease;
}

box-shadow を使った場合

box-shadow を使った場合、"消す" ように見せるのであれば背景色に合わせて影の色を指定しないといけない。

それと、box-shadow ではコンテンツ幅の分影を伸ばすということが出来ないのが、この作りでは何かと面倒なことになる。不揃いな幅のコンテンツにこのスタイルを適用するとアニメーションスピードがコンテンツ毎にバラついたり、何かと。

あまり良くないので、margintransform のほうを使おう。

.link {
  display: inline-block;
}

.link::after {
  content: "";
  display: block;
  width: 100%;
  height: 1px;
  background-color: #000;
}

.link:hover::after {
  box-shadow: inset 8em 0 0 #fff; /* <- */
  transition: box-shadow 0.5s ease;
}

スクロールできる表の両端の装飾

f:id:thleap:20150424214603p:plain

スクロールできる表の作り方は http://hail2u.net/blog/webdesign/scrollable-table.html で知った。

ここでは横スクロールできる表の両端に装飾を施し、開始・終了でその装飾を打ち消すようなスタイルを表示するようにした。ただ、明日にはこのコードの仕組みを忘れてそうで怖い。無茶苦茶してる気がしないでもない。

表の両端に装飾を施し

これは table 要素の擬似要素で。擬似要素の配置をposition: absolute で行うために起点が必要だったので、table の上に div を一つ設けている。

.x-scrolling-table {
  position: relative;
  width: 100%;
  background-color: white;
}

.x-scrolling-table-inner {
  display: block;
  max-width: 100%;
  overflow-x: auto;
  table-layout: fixed;
}

.x-scrolling-table-inner::before,
.x-scrolling-table-inner::after {
 ...

開始・終了でその装飾を打ち消すようなスタイルを表示

これは最初と最後の th, td の擬似要素で。

.x-scrolling-table-inner tr > th:first-child::before,
.x-scrolling-table-inner tr > td:first-child::before,
.x-scrolling-table-inner tr > th:first-child::after,
.x-scrolling-table-inner tr > td:first-child::after,
.x-scrolling-table-inner tr > th:last-child::before,
.x-scrolling-table-inner tr > td:last-child::before,
.x-scrolling-table-inner tr > th:last-child::after,
.x-scrolling-table-inner tr > td:last-child::after {
  ...

もっとスマートな方法が知りたい。