box-shadow
「如果你從未體驗任何事情的黑暗面,那麼你的所在之地,鐵定沒有任何光芒。」—— Lady Gaga
原本想傳遞一點正能量,但後來覺得太像傳教了哈哈哈,在網頁設計上,適時加上陰影的確跟有裂縫的人生一樣,可以透進一些光芒進來,老闆,幫我點播黃乙玲的人生的歌,好搭配接下來的課程。
( 圖片來源 )
box-shadow 屬性向框添加一個或多個陰影。
box-shadow: h-shadow v-shadow blur spread color inset;
Firefox 支持替代的 -moz-box-shadow 規則, Safari 和 Chrome 支持替代的 -webkit-box-shadow 規則。
div{
-moz-box-shadow: 2px 2px 5px #000;
-webkit-box-shadow: 2px 2px 5px #000;
box-shadow: 2px 2px 5px #000;
}
屬性 | 說明 |
---|---|
h-shadow | 必須,水平陰影的位置。允許負值。 |
v-shadow | 必須,垂直陰影的位置。允許負值。 |
blur | 選填,模糊距離。 |
spread | 選填,陰影的尺寸。 |
color | 選填,陰影的顏色。 |
inset | 選填,將外部陰影( outset )改為內部陰影。 |
內陰影
box-shadow: 2px 2px 5px #000 inset;
陰影擴展
box-shadow: 0px 0px 5px 10px #000; /* 第四值是陰影擴展長度值 */
多重陰影
box-shadow:
0px 0px 0px 3px #bb0a0a,
0px 0px 0px 6px #2e56bf,
0px 0px 0px 9px #ea982e; /* 用逗點分開即可實現多重陰影 */
單側投影
如果陰影的模糊半徑,與負的擴張半徑一致( 如下述原始碼的 5px 和 -5px ),那麼我們將看不到任何陰影,因為生成的陰影將被包含在原來的元素之下,除非給它設定一個方向的偏移量,所以這個時候,我們定一個方向的偏移值,即可實現單側投影。
box-shadow: -7px 0 5px -5px #333;
使用偽元素 ::before 和 ::after ,能創造出非常逼真的只有圖片才能實現的陰影效果。
HTML
<div class="box11 shadow"></div>
CSS
.box11 {
width: 300px;
height: 100px;
background: #ccc;
border-radius: 10px;
margin: 10px;
}
.shadow {
position: relative;
max-width: 270px;
box-shadow:
0px 1px 4px rgba(0,0,0,0.3),
0px 0px 20px rgba(0,0,0,0.1) inset;
}
.shadow::before ,
.shadow::after {
content: "";
position: absolute;
z-index: -1;
bottom: 15px;
left: 10px;
width: 50%;
height: 20%;
box-shadow: 0 15px 10px rgba(0, 0, 0, 0.7);
transform: rotate(-3deg);
}
.shadow::after{
right: 10px;
left: auto;
transform: rotate(3deg);
}
不同顏色的陰影,指定交錯的位移,也能呈現特別的視覺。陰影跨越到下方的元素也不會移動排版。
div {
background-color: #eee;
box-shadow:
8px 24px 2px rgba(100%,0%,0%,0.4),
16px -4px 2px rgba(0%,100%,0%,0.4),
24px 12px 2px rgba(0%,0%,100%,0.4);
}
照片浮動效果
HTML
<div class="floating"></div>
CSS
.floating {
width: 300px;
height: 250px;
background-color: #f9c919;
position: relative;
transform: translateY(0);
transition: transform 1s;
}
.floating:after {
content: "";
display: block;
position: absolute;
bottom: -30px;
left: 50%;
height: 8px;
width: 100%;
box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.4);
border-radius: 50%;
background-color: rgba(0, 0, 0, 0.2);
transform: translate(-50%, 0);
transition: transform 1s;
}
.floating:hover {
transform: translateY(-40px);
transition: transform 1s;
}
.floating:hover:after {
transform: translate(-50%, 40px) scale(0.75);
transition: transform 1s;
}
撕便利貼的立體效果
div {
position: relative;
width: 600px;
height: 100px;
background: hsl(48, 100%, 50%);
border-radius: 20px;
}
div::before {
content: "";
position: absolute;
top: 50%;
left: 5%;
right: 5%;
bottom: 0;
border-radius: 10px;
background: hsl(48, 100%, 20%);
transform: translate(0, -15%) rotate(-4deg);
transform-origin: center center;
box-shadow: 0 0 14px 15px hsl(48, 100%, 20%);
display: block;
z-index: -2;
}