私はいくつかのblock
要素にbox-shadowを作成する必要がありますが、その右側にのみ(例えば)してください。私のやり方は、box-shadow
の内側の要素をpadding-right
とoverflow:hidden;
の外側の要素にラップして、影の他の3辺が見えないようにすることです。
これを達成するためのより良い方法はありますか? box-shadow-right
のような?
_ edit _ :私の意図は only 影の垂直部分を作ることです。ルールbackground:url(shadow.png) 100% 0% repeat-y
のrepeat-y
が行うこととまったく同じです。
はい、box-shadowルールのshadow spreadプロパティを使うことができます。
.myDiv
{
border: 1px solid #333;
width: 100px;
height: 100px;
-webkit-box-shadow: 10px 0 5px -2px #888;
box-shadow: 10px 0 5px -2px #888;
}
<div class="myDiv"></div>
そこの4番目のプロパティ-2px
は影の広がりです。これを使って影の広がりを変更し、影が片側だけにあるように見せることができます。
これはまた、影の位置付け規則10px
を使用してそれを右(水平方向のオフセット)に送り、0px
はそれを要素の下に保持します(垂直方向のオフセット)。
5px
はぼかしの半径です:)
私の自作ソリューションは編集が簡単です:
HTML:
<div id="anti-shadow-div">
<div id="shadow-div"></div>
</div>
css:
#shadow-div{
margin-right:20px; /* Set to 0 if you don't want shadow at the right side */
margin-left:0px; /* Set to 20px if you want shadow at the left side */
margin-top:0px; /* Set to 20px if you want shadow at the top side */
margin-bottom:0px; /* Set to 20px if you want shadow at the bottom side */
box-shadow: 0px 0px 20px black;
height:100px;
width:100px;
background: red;
}
#anti-shadow-div{
margin:20px;
display:table;
overflow:hidden;
}
最大2辺までのクリップ効果を得るためには、背景のグラデーションを持つ擬似要素を使用できます。
header::before, main::before, footer::before, header::after, main::after, footer::after {
display: block;
content: '';
position: absolute;
width: 8px;
height: 100%;
top: 0px;
}
header::before, main::before, footer::before {
left: -8px;
background: linear-gradient(to left, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0));
}
header::after, main::after, footer::after {
right: -8px;
background: linear-gradient(to right, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0));
}
通常文書を構成する要素の左右に、ニースの影のような効果を追加します。
シャドウを追加するには、:: afterまたは:: before疑似要素を使用するだけです。それを1pxにして、あなたが望む側にそれを配置してください。下記は上の例です。
footer {
margin-top: 50px;
color: #fff;
background-color: #009eff;
text-align: center;
line-height: 90px;
position: relative;
}
footer::after {
content: '';
position: absolute;
width: 100%;
height: 1px;
top: 0;
left: 0;
z-index: -1;
box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.75);
}
<footer>top only box shadow</footer>
これは私がしたことを少しハックです。
<div id="element"><!--element that I want an one-sided inset shadow from the bottom--></div>
<div class="one_side_shadow"></div>
1. 片側ボックスシャドウを作成する要素のすぐ下に<div class="one_side_shadow"></div>
を作成します(この場合、下から来るid="element"
の片側インセットシャドウが必要です)。
2. それから私はシャドウを片側に押し上げるために負の垂直オフセットを使って通常のbox-shadow
を作成しました。
`box-shadow: 0 -8px 20px 2px #DEDEE3;`
これが私の例です:
.box{
width: 400px;
height: 130px;
background-color: #C9C;
text-align: center;
font: 20px normal Arial, Helvetica, sans-serif;
color: #fff;
padding: 100px 0 0 0;
-webkit-box-shadow: 0 8px 6px -6px black;
-moz-box-shadow: 0 8px 6px -6px black;
box-shadow: 0 8px 6px -6px black;
}
<div class="box">
</div>
これは簡単な方法かもしれません
border-right : 1px solid #ddd;
height:85px;
box-shadow : 10px 0px 5px 1px #eaeaea;
これを任意のdivに割り当てます
このサイトは私を助けてくれました: https://Gist.github.com/ocean90/1268328 (このサイトではこの記事の執筆時点で左右が逆になっていますが、期待通りに動作します) 。 以下のコードで修正されています。
<!DOCTYPE html>
<html>
<head>
<title>Box Shadow</title>
<style>
.box {
height: 150px;
width: 300px;
margin: 20px;
border: 1px solid #ccc;
}
.top {
box-shadow: 0 -5px 5px -5px #333;
}
.right {
box-shadow: 5px 0 5px -5px #333;
}
.bottom {
box-shadow: 0 5px 5px -5px #333;
}
.left {
box-shadow: -5px 0 5px -5px #333;
}
.all {
box-shadow: 0 0 5px #333;
}
</style>
</head>
<body>
<div class="box top"></div>
<div class="box right"></div>
<div class="box bottom"></div>
<div class="box left"></div>
<div class="box all"></div>
</body>
</html>
さて、ここでもう1つ試してください。擬似要素を使用し、それらの上にシャドーボックスの不正行為を施します。
html:
<div class="no-relevant-box">
<div class="div-to-shadow-1"></div>
<div class="div-to-shadow-2"></div>
</div>
sass:
.div-to-shadow-1, .div-to-shadow-2
height: 150px
width: 150px
overflow: hidden
transition: all 0.3s ease-in-out
&::after
display: block
content: ''
position: relative
top: 0
left: 100%
height: 100%
width: 10px
border: 1px solid mediumeagreen
box-shadow: 0px 7px 12px rgba(0,0,0,0.3)
&:hover
border: 1px solid dodgerblue
overflow: visible
div {
border: 1px solid #666;
width: 50px;
height: 50px;
-webkit-box-shadow: inset 10px 0px 5px -1px #888 ;
}
私がすることは影のために垂直ブロックを作成して、私のブロック要素があるべき場所の隣にそれを置くことです。その後、2つのブロックは別のブロックにラップされます。
<div id="wrapper">
<div id="shadow"></div>
<div id="content">CONTENT</div>
</div>
<style>
div#wrapper {
width:200px;
height:258px;
}
div#wrapper > div#shadow {
display:inline-block;
width:1px;
height:100%;
box-shadow: -3px 0px 5px 0px rgba(0,0,0,0.8)
}
div#wrapper > div#content {
display:inline-block;
height:100%;
vertical-align:top;
}
</style>
jsFiddleの例 ここ 。