CSSのbox-shadowで吹き出しに影をつける
どうしても影(ドロップシャドウ)をつけたい方こんにちわ。
そうでもない方も参考までにみてってよ!
先日こんな依頼がありました。
「吹き出しに影(ドロップシャドウ)をつけて欲しい」
ふむ、出っ張った部分に影つけるのは大変じゃねぇ?
ってことで、実際に使った方法を。
CSSで影(ドロップシャドウ)をつける基本
まずは普通に影(ドロップシャドウ)をつけてみる
HTML
- <div class="foo">foo</div>
CSS
- .foo {
- width: 50px;
- height: 30px;
- background: linear-gradient(-6deg,#007eff,#ff17b1);
- box-shadow: 4px 4px 5px 0 #666;
- color: #fff;
- }
指定の仕方は次の順番、
box-shadow: 左右の位置 上下の位置 ぼかし 広がり 色 内側指定;
ぼかし、広がりは右から省略できる。
色、内側指定も省略できる。
よくみる吹き出しに影(ドロップシャドウ)をつけてみる
HTML
- <div class="balloon">balloon</div>
CSS
- .balloon {
- background-color: orange;
- border-radius: 10px;
- width: 300px;
- height: 50px;
- padding: 1em;
- position: relative;
- }
- .balloon::before {
- content: '';
- display: block;
- position: absolute;
- top: 50%;
- left: -15px;
- transform: translateY(-50%);
- border-right: 15px solid orange;
- border-top: 10px solid transparent;
- border-bottom: 10px solid transparent;
- }
- .balloon,.balloon::before {
- box-shadow: 4px 4px 5px 0 #ccc;
- }
突出部分の影がおかしいじゃないのー!?
というわけで失敗。
吹き出しのとがった部分を、ボーダー(透過)で表現してるから
そこまで影がついてしまうのですねぇ・・・
CSSを駆使して吹き出しに影(ドロップシャドウ)をつける
はい!出来ました~
コードはこちら↓
HTML
- <div class="bar">
- <div>吹き出し<br>適当にグラデにしてみた。</div>
- </div>
- <div class="bar baz">
- <div>けどドロップシャドウが分かりにくいのでやめ。</div>
- </div>
CSS
- .bar,.baz {
- position: relative;
- margin: 1em;
- color: #fff;
- }
- .bar,.bar::after,.baz {
- border-radius: 20px;
- width: 300px;
- height: 100px;
- }
- .bar::before,.bar::after {
- background: linear-gradient(-6deg,#007eff,#ff17b1);
- }
- .baz::before,.baz::after {
- background: orange;
- }
- .bar,.bar::before {
- box-shadow:0 0 5px 0 #333;
- }
- .bar::after {
- content: '';
- display: block;
- position: absolute;
- top: 0;
- left: 0;
- }
- .bar::before {
- content: '';
- display: block;
- position: absolute;
- width: 20px;
- height: 20px;
- transform: translateY(-50%) rotate(-45deg) skew(20deg,20deg);
- top: 50%;
- left: -10px;
- }
- .bar div,.baz div {
- position: relative;
- z-index: 5;
- padding: 1em;
- }
CSSで吹き出しに影(ドロップシャドウ)をつける まとめ
今回のポイントは吹き出しの突出部分(とがったとこ)をどうやって表現するか。
よく見る吹き出しのようにborderで表現すると、
余計なところまで影(ドロップシャドウ)が付いてしまうので、
transformで要素を変形し、さらに要素を重ねることで実現できました。
ポイントになるコードを抜粋↓
CSS
- .bar,.bar::after,.baz { /* POINT 要素を重ねる */
- border-radius: 20px;
- width: 300px;
- height: 100px;
- }
- …
- .bar::before {
- …
- width: 20px;
- height: 20px;
- transform: translateY(-50%) rotate(-45deg) skew(20deg,20deg); /* POINT 要素を変形 */
- top: 50%;
- left: -10px;
- }
コメント一覧
まだ、コメントがありません