Comment puis-je ajouter une ombre de boîte d'un côté d'un élément?
J'ai besoin de créer une boîte-ombre sur un élément block
, mais seulement (par exemple) sur son côté droit. La façon dont je le fais est d'envelopper l'élément intérieur avec box-shadow
dans un élément externe avec padding-right
et overflow:hidden;
de sorte que les trois autres côtés de l'ombre ne sont pas visibles.
Y a-t-il un meilleur moyen d'y parvenir? Comme box-shadow-right
?
EDIT: Mes intentions sont de créer seulement la partie verticale de l'ombre. Exactement la même chose que ce que repeat-y
de la règle background:url(shadow.png) 100% 0% repeat-y
ferait.
10 réponses
Oui, vous pouvez utiliser la propriété Shadow spread de la règle box-shadow:
.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>
La quatrième propriété, il y -2px
est l'ombre de la propagation, vous pouvez l'utiliser pour modifier la propagation de l'ombre, faisant apparaître que l'ombre est sur un seul côté.
Cela utilise aussi l'ombre de positionnement règles 10px
envoie vers la droite (décalage horizontal) et 0px
le garde sous l'élément (décalage vertical.)
5px
est le rayon de flou :)
Ma solution self-made qui est facile à éditer:
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;
}
Pour obtenir l'coupées effet sur deux côtés, vous pouvez utiliser des pseudo-éléments avec des dégradés d'arrière-plan.
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));
}
Ajoutera un bel effet d'ombre à gauche et à droite des éléments qui composent normalement un document.
Il suffit d'utiliser ::after ou:: before pseudo élément pour ajouter l'ombre. Faites-le 1px et positionnez-le de n'importe quel côté que vous voulez. Ci-dessous est un exemple de haut.
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>
Voici un petit hack que j'ai fait.
<div id="element"><!--element that I want an one-sided inset shadow from the bottom--></div>
<div class="one_side_shadow"></div>
1. créez un <div class="one_side_shadow"></div>
juste en dessous de l'élément que je veux créer l'ombre de la boîte d'un côté (dans ce cas, je veux une ombre d'encart unilatérale pour id="element"
venant du bas)
2. Ensuite, j'ai créé un box-shadow
régulier en utilisant un décalage vertical négatif pour pousser l'ombre vers le haut d'un côté.
`box-shadow: 0 -8px 20px 2px #DEDEE3;`
Cela pourrait être un moyen simple
border-right : 1px solid #ddd;
height:85px;
box-shadow : 10px 0px 5px 1px #eaeaea;
Attribuez ceci à n'importe quel div
Voici mon exemple:
.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>
Ce site m'a aidé: https://gist.github.com/ocean90/1268328 (notez que sur ce site, la gauche et la droite sont inversées à la date de ce post... mais ils fonctionnent comme prévu). ils sont corrigés dans le code ci-dessous.
<!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>
div {
border: 1px solid #666;
width: 50px;
height: 50px;
-webkit-box-shadow: inset 10px 0px 5px -1px #888 ;
}
Ce que je fais est de créer un bloc vertical pour l'ombre, et placez-le à côté de l'endroit où mon élément de bloc devrait être. Les deux blocs sont ensuite enveloppés dans un autre bloc:
<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 exemple ici .