レビューサイトで見かける★を使った表現
商品を買う時、お店を選ぶ時に必ずといっていいほどチェックするレビューサイト。実際に買ったり、お店に行ってサービスを受けた方の感想が書かれていたり、店内の雰囲気が写真を使って説明されていたり。とても便利ですよね。
他にも★を使ってランクを表現している物もよく見かけます。
この★マーク、一つ星(★☆☆)、二つ星(★★☆)、三つ星(★★★)なら、文字の入力で表現する事ができます。
ですが星1.5とか星2.5といった、小数点を使った表現をしたいと思っても、変換では半分となった星マークが出ないので、表記が難しいですね。
今回は表現の難しい半分の星を含めた星を使ったレートを、CSSを使って実装してみようというお話です。
疑似要素を使って星を配置する
::beforeや::afterといった、疑似要素を使って表現していきます。グレーアウトした星を::beforeへ設定し、色のついた星を::afterへ付けます。
CSSを書くとこんなかんじ・・・
.rate{ position: relative; display: inline-block; } .rate:before, .rate:after{ content: “★★★”; } .rate:before{ color: #ccc; } .rate:after{ position: absolute; left:0; top:0; color: #FFA500; }そして色のついた方をpositionを使って、ぴたりと重ねてあげるのです。
このままでは色付の星しか見えませんね。なので一工夫します。
.rate:after{ overflow: hidden; }上へ重ねた色のついた星に対して、overflow:hidden;を与えます。
こうする事で、指定した横幅以上は隠れて見えなくなります。
あとはもう簡単ですね。
1文字分を意味する「em」を使って横幅を付けてあげればいいのです!
例えば星2つなら2em、星2.5なら2.5emです。
これで星印を使ったレート表現ができますね!
星を5つにしたければ::beforeと::afterへ星を5つ書いて、emを使った分岐を必要な数だけ増やせば対応可能です。
最後にまとめたCSSを記載しておきます。よければ参考にしてみてくださいね。
.rate{ position: relative; display: inline-block; } .rate:before, .rate:after{ content: “★★★”; } .rate:before{ color: #ccc; } .rate:after{ position: absolute; left:0; top:0; color: #FFA500; overflow: hidden; } .rate.rate0:after{ width: 0; } .rate.rate1:after{ width: 1em; } .rate.rate1-5:after{ width: 1.5em; } .rate.rate2:after{ width: 2em; } .rate.rate2-5:after{ width: 2.5em; } .rate.rate3:after{ width: 3em; }