1要素のHTMLとCSSだけでチョコレートを作ってみた
- ソースコード調整
- ぼかし記述削除理由,内側法面用のボーダー幅微調整
- 記事投稿
バレンタインデーまで残り300日程ですね。そろそろチョコレートの素材が欲しくなるころではないでしょうか。
という雑な理由付けはさておきHTML1要素とCSSのみで表示できるチョコレートを作ってみたのでおいておきます。
source code
基本
demo
text
HTML
- <span class="choco">text</span>
CSS
- @import url(https://fonts.googleapis.com/css?family=Lobster);
- .choco {/* 要素自体の設定 */
- box-sizing: border-box;
- position: relative;
- z-index: 0;
- display: inline-flex;
- justify-content: center;
- align-items: center;
- min-width: 100px;
- min-height: 56px;
- border-radius: 4px;
- border: solid 8px;
- border-color: #804535 #3c1a11 #2c100a #6a3b2b;
- background-color: #6f3c2f;
- color: #6a3a2d;
- text-shadow: 0 1px rgba(255,255,255,0.3), 0 -1px rgba(0,0,0,0.4);
- box-shadow: -1px 4px 8px rgba(0,0,0,0.3);
- font-family: 'Lobster', serif;
- font-size: 20px;
- line-height: 1;
- }
- .choco::before ,
- .choco::after {/* 擬似要素共通設定 */
- content: '';
- position: absolute;
- top: 0; right: 0; bottom: 0; left: 0;
- display: block;
- border-style: solid;
- pointer-events: none;
- }
- .choco::before {/* before(擬似要素) */
- z-index: 1;
- border-width: 6px;
- border-color: #291617 #662e1f #99604c #65413b;
- color: rgba(0,0,0,0.2);
- box-shadow: 4px 4px 4px inset;
- }
- .choco::after {/* after(擬似要素) */
- z-index: 2;
- margin: -3px;
- border-radius: 4px;
- border-width: 5px;
- border-color: #985d4d #885041 #885041 #985d4d;
- color: rgba(255,255,255,0.3);
- box-shadow: -1px -1px 1.4px,-1px -1px 1.4px inset;
- }
何をやっているのか
demo
text
before elment after
擬似要素のbefore,afterを使って立体的にしています。
demo内ボタンクリックでそれぞれ分離できるようにしたので個別にどんな表示か確かめたい人はそちらから。
各部品役割
-
elemnt(要素自体)
:border
で外側法面描画background-color
でベース色描画box-shadow
で全体の影描画- あと文字の表示領域担当
-
before(擬似要素)
:border
で内側法面描画box-shadow
でくぼみ部分にかかる影を描画
-
after(擬似要素)
:border
で最上面描画box-shadow
でハイライト描画
他諸々。表示ソースの背景色でそれぞれ分けておいたので後は読み取ってください。
チョコレートで法面ってなんだと思いつつも他にどう呼べばいいのかわからない。
編集
いっぱい並べる
<span class="choco">text</span>
の記述数だけチョコレートも増えます。好きなだけ並べてください。
ただ、一ヶ所にまとめて並べる場合は下記を採用した方が無駄がなくてよいと思います。
demo
text
text
text
text
text
text
text
text
text
text
text
text
html
- <div class="chocoBOX">
- <span>text</span>
- <span>text</span>
- <span>text</span>
- <span>text</span>
- <span>text</span>
- <span>text</span>
- <span>text</span>
- <span>text</span>
- <span>text</span>
- <span>text</span>
- <span>text</span>
- <span>text</span>
- </div>
css
- @import url(https://fonts.googleapis.com/css?family=Lobster);
- .chocoBOX {/* 大枠 */
- display: grid;
- grid-template-columns: repeat(auto-fit,minmax(100px,1fr));
- }
- .chocoBOX > * {/* 要素自体の設定 */
- box-sizing: border-box;
- position: relative;
- z-index: 0;
- display: flex;
- justify-content: center;
- align-items: center;
- min-height: 56px;
- border-radius: 4px;
- border: solid 8px;
- border-color: #804535 #3c1a11 #2c100a #6a3b2b;
- background-color: #6f3c2f;
- color: #6a3a2d;
- text-shadow: 0 1px rgba(255,255,255,0.3), 0 -1px rgba(0,0,0,0.4);
- box-shadow: -1px 4px 8px rgba(0,0,0,0.3);
- font-family: 'Lobster', serif;
- font-size: 20px;
- line-height: 1;
- }
- .chocoBOX > *::before ,
- .chocoBOX > *::after {/* 擬似要素共通設定 */
- content: '';
- position: absolute;
- top: 0; right: 0; bottom: 0; left: 0;
- display: block;
- border-style: solid;
- pointer-events: none;
- }
- .chocoBOX > *::before {/* before(擬似要素) */
- z-index: 1;
- border-width: 6px;
- border-color: #291617 #662e1f #99604c #65413b;
- color: rgba(0,0,0,0.2);
- box-shadow: 4px 4px 4px inset;
- }
- .chocoBOX > *::after {/* after(擬似要素) */
- z-index: 2;
- margin: -3px;
- border-radius: 4px;
- border-width: 5px;
- border-color: #985d4d #885041 #885041 #985d4d;
- color: rgba(255,255,255,0.3);
- box-shadow: -1px -1px 1.4px,-1px -1px 1.4px inset;
- }
その他編集
傾ける
demo
text
text
text
text
text
text
text
text
一部傾けると砕いた感を出せるかもしれません。
追加CSS
- .crack1 {
- z-index:1;
- transform: rotate(-12deg);
- }
- .crack2 {
- z-index:1;
- transform: rotate(30deg);
- }
- 傾けたいチョコレート一片に
crack1
crack2
どちらかのクラス付与
例:<span class="choco crack1">text</span>
リンク化
span
要素の代わりにa
要素を使用するだけでOKです。
CSSの追加記述をするなら、a
要素デフォルト装飾の文字下線の消去をしたり、クリック時動きをつけてみたり色々遊んでください。
おすすめ追加CSS
- a.choco {
- text-decoration: none;
- }
- a.choco:active {
- top: -2px;
- z-index: 2;
- transform: rotate(-30deg);
- }
- いっぱい並べるverの場合
a.choco
部分は.chocoBOX > a
に変更してください。
味変え
text
text
text
text
text
text
text
text
CSSでの単純な描画なので、色を変えればチョコレートの味変えも簡単にできます。
一部のチョコだけ変えるか全部のチョコを変えるかで編集方法が異なるので、お好みの方法を採用してください。
一部のみ変更
- 後述色変え追加CSSをCSS末尾に追加
- 色変えしたいチョコレート用の要素に
taste1
クラス追加
例1:<span class="choco taste1">text</span>
例2:<span class="taste1">text</span>
全部変更
- 後述色変え追加CSSの、同内容を指すセレクタボックス内のプロパティの値のみ書き換え
上記が良く分からない場合
- 後述色変え追加CSSの
.taste1
部分を.choco
(いっぱい並べるverだと.chocoBOX > *
)に変更後CSS末尾に追加
色変え追加CSS
CSS
- .taste1 {/* 要素自体 */
- border-color: #f59a92 #e95760 #e1495e #f28986;/* 外側法面( 上右下左 ) */
- background-color: #ee7f85;/* ベース背景 */
- color: #ea7c80;/* 文字色 */
- text-shadow: 0 1px rgba(255,255,255,0.3), 0 -1px rgba(120,0,0,0.3);/* 文字影( ハイライト 影 ) */
- }
- .taste1::before {/* before(擬似要素) */
- border-color: #dc455a #f28986 #f59a92 #e95760;/* 内側法面( 上右下左 ) */
- color: rgba(255,0,0,0.2);/* くぼみ部分にかかる影の色 */
- }
- .taste1::after {/* after(擬似要素) */
- border-color: #f7afa1 #f59a92 #f59a92 #f7afa1;/* 最上面( 上右下左 ) */
- color: rgba(255,255,255,0.3);/* ハイライトの色 */
- }
demo
text
入力で上記色変え追加CSSが書き換わります。
セレクター
ベース
外側法面
内側法面
最上面
明暗
▽立体
▽文字
色変えサンプルコード
-
default
textCSS
- .default {
- border-color: #804535 #3c1a11 #2c100a #6a3b2b;
- background-color: #6f3c2f;
- color: #6a3a2d;
- text-shadow: 0 1px rgba(255,255,255,0.3), 0 -1px rgba(0,0,0,0.4);
- }
- .default::before {
- border-color: #291617 #662e1f #99604c #65413b;
- color: rgba(0,0,0,0.2);
- }
- .default::after {
- border-color: #985d4d #885041 #885041 #985d4d;
- color: rgba(255,255,255,0.3);
- }
-
bitter
textCSS
- .bitter {
- border-color: #977770 #431e15 #291811 #5f3d34;
- background-color: #5f3831;
- color: #5d3730;
- text-shadow: 0 1px rgba(255,255,255,0.3), 0 -1px rgba(0,0,0,0.4);
- }
- .bitter::before {
- border-color: #3f2526 #6a453 #8d665f #5f321c;
- color: rgba(0,0,0,0.2);
- }
- .bitter::after {
- border-color: #8d665f;
- color: rgba(255,255,255,0.3);
- }
-
milk
textCSS
- .milk {
- border-color: #cc8b60 #834126 #b3674c #b97e54;
- background-color: #bc733f;
- color: #ba703e;
- text-shadow: 0 1px rgba(255,255,255,0.3), 0 -1px rgba(0,0,0,0.4);
- }
- .milk::before {
- border-color: #b3674c #b97e54 #cc8b60 #834126;
- color: rgba(0,0,0,0.2);
- }
- .milk::after {
- border-color: #b97e54;
- color: rgba(255,255,255,0.3);
- }