Zastanawiam się nad obsługą wewnętrznych cieni specyficznych dla bocznych stron w css3.
Wiem, że to działa świetnie w obsługiwanych przeglądarkach.
div { box-shadow:inset 0px 1px 5px black; }
Ciekawi mnie tylko, czy jest sposób na osiągnięcie czegoś takiego:
div { box-shadow-top:inset 0px 1px 5px black; }
Odpowiedzi:
Oto, co zadziałało dla mnie:
box-shadow: inset 1px 4px 9px -6px;
Przykład: http://jsfiddle.net/23Egu/
źródło
box-shadow: inset 1px -4px 9px -6px;
na cień dolny.box-shadow: inset 4px 1px 9px -6px;
prawej strony:box-shadow: inset -4px 1px 9px -6px;
Nie sądzę, że naprawdę potrzebujesz,
box-shadow-top
ponieważ jeśli ustawiszoffsetx
0 ioffsety
jakąkolwiek wartość dodatnią, tylko pozostały cień jest na górze.jeśli chcesz mieć cień na górze i cień na dole, możesz po prostu użyć dwóch elementów div:
<div style="box-shadow:inset 0 1px 5px black;"> <div style="box-shadow:inset 0 -1px 5px black;"> some content </div> </div>
jeśli chcesz pozbyć się cienia po bokach użyj
rgba
zamiasthex
koloru i ustaw większyoffsety
:box-shadow:inset 0 5px 5px rgba(0,0,0,.5)
w ten sposób nadasz cieniu więcej krycia, aby boki pozostały ukryte, a przy większym przesunięciu uzyskasz mniej krycia
pełny przykład:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <style type="text/css"> body { background: #1C1C1C; } div { margin: 50px auto; width: 200px; height: 200px; background: #fff; -webkit-border-radius: 20px; -khtml-border-radiust: 20px; -moz-border-radius: 20px; -o-border-radius: 20px; border-radius: 20px; box-shadow:inset 0px 5px 5px rgba(0,0,0,.5); } div > div { background:none; box-shadow:inset 0px -5px 5px rgba(0,0,0,.5); } </style> </head> <body> <div><div></div></div> </body> </html>
źródło
box-shadow-top
dałby. edytuj Ale tak zwykle też to robię =)rgba
zamiasthex
koloru i ustaw większyoffsety
: box-shadow: 0 5px 5px rgba (0,0,0, .5) w ten sposób nadasz cieniu więcej krycia, aby boki pozostały ukryte a im większe przesunięcie, tym mniejsze kryciebox-shadow:inset 0 1px 5px black, inset 0 -1px 5px black;
używanie elementów
:before
iafter
z regularnymi wycinanymi cieniamioverflow:hidden
w polu nadrzędnym, jak w tym przykładzie: http://dabblet.com/gist/2585782CSS
/** * Top and Bottom inset shadow */ #element{ background-color: #E3F2F7; height: 55px; position: relative; /* to position pseudo absolute*/ overflow: hidden; /* to cut of overflow shadow*/ margin-top: 200px; } #element:before , #element:after{ content: "\0020"; display: block; position: absolute; width: 100%; height: 1px; /* when 0 no shadow is displayed*/ box-shadow: #696c5c 0 0 8px 0; } #element:before { top: -1px} /* because of height: 1*/ #element:after { bottom: -1px} /* because of height: 1*/
HTML
<div id="element"></div>
źródło
W większości przypadków możesz użyć gradientu tła do obejścia:
Przykład SCSS (z kompasem):
@include background(linear-gradient(top, #666 1%, #999 3%, #ddd 6%, #f6f6f6 9%, #f6f6f6 92%, #ddd 94%, #999 97%, #666 99%) );
źródło
box-shadow: inset 5px 0 5px -5px rgba(0,0,0,0.5),inset -5px 0 5px -5px rgba(0,0,0,0.5); -moz-box-shadow: inset 5px 0 5px -5px rgba(0,0,0,0.5),inset -5px 0 5px -5px rgba(0,0,0,0.5); -webkit-box-shadow: inset 5px 0 5px -5px rgba(0,0,0,0.5),inset -5px 0 5px -5px rgba(0,0,0,0.5); -o-box-shadow: inset 5px 0 5px -5px rgba(0,0,0,0.5),inset -5px 0 5px -5px rgba(0,0,0,0.5);
To działa po prostu cudownie :)
Oto codepen ilustrujący to: http://codepen.io/poopsplat/pen/cGBLy
źródło
Dla tego samego cienia, ale tylko na górze:
box-shadow: inset 0px 6px 5px -5px black;
Aby cień był skierowany w jednym kierunku, należy zanegować parametr „rozmycie” za pomocą parametru „rozprzestrzenianie”, a następnie dostosować parametry „h-pos” i / lub „v-pos” o tę samą wartość. Nie działa z przeciwną lub potrójną ramką. Musisz dodać jeszcze jedną definicję.
Więcej przykładów tutaj: http://codepen.io/GBMan/pen/rVXgqP
źródło
Nie, nie bezpośrednio, ale możesz wyciąć części, których nie chcesz, umieszczając je w div z
overflow: hidden
:http://jsfiddle.net/Vehdg/
źródło
Po prostu sam miałem ten problem. Rozwiązanie, które znalazłem, obejmowało wiele cieni w pudełku (po jednym dla każdej strony, dla której chcesz mieć swój cień). Oto definicja:
box-shadow: none|h-offset v-offset blur spread color |inset|initial|inherit;
Oto jak o tym myśleć:
Tutaj możesz zobaczyć moją skrzynkę z cieniem box-shadow z trzech stron (lewa, góra, prawa i dół ma ten sam kolor co tło, aby stworzyć efekt, który chciałem - lewa strona i prawa sięgają aż do dołu ) https://codepen.io/cponofrei/pen/eMMyQX
źródło
Możesz uzyskać jednostronny, wewnętrzny cień, ustawiając
overflow:hidden
element div i dodając elementy cienia wzdłuż granic.Ustaw cień wewnętrzny na górnej i dolnej krawędzi podziału:
HTML
<div id="innerShadow"> <div id="innerShadowTop"> Content... <div id="innerShadowBottom"> </div>
CSS
#innerShadow { position: relative; overflow: hidden; } #innerShadowTop { width: 100%; height: 1px; margin: 0; padding: 0; position: absolute; top: -1px; -moz-box-shadow: 0px 1px 6px 1px rgba(0, 0, 0, 0.65); -webkit-box-shadow: 0px 1px 6px 1px rgba(0, 0, 0, 0.65); -o-box-shadow: 0px 1px 6px 1px rgba(0, 0, 0, 0.65); box-shadow: 0px 1px 6px 1px rgba(0, 0, 0, 0.65); } #bannerShadowBottom { width: 100%; height: 1px; margin: 0; padding: 0; position: absolute; bottom: -1px; -moz-box-shadow: 0px -1px 6px 1px rgba(0, 0, 0, 0.65); -webkit-box-shadow: 0px -1px 6px 1px rgba(0, 0, 0, 0.65); -o-box-shadow: 0px -1px 6px 1px rgba(0, 0, 0, 0.65); box-shadow: 0px -1px 6px 1px rgba(0, 0, 0, 0.65); }
źródło
inset
i wykazując się kreatywnością, używając wartości css box-shadow. Pamiętaj, że możesz układać cienie boxów na tym samym elemencie. Można więc użyć czegoś takiego, jak @Jakobud powiedział w powyższym komentarzu:box-shadow:inset 0 1px 5px black, inset 0 -1px 5px black;
Innym sposobem, który jest tylko trochę mniej obraźliwy niż dodawanie niepotrzebnych znaczników, jest użycie:before
i:after
selektorów. Ale po co to robić, jeśli możesz to zrobić, bezpośrednio wybierając i stylizując oryginalny element.box-shadow
dotyczy wszystkich czterech stron. Nie możesz tego zmienić (jeszcze?). W 4 rozmiary w tejbox-shadow
definicji sąOffsetX
,offsetY
,Blur
iSpread
.źródło
Inset/Outset
,OffsetX
,OffsetY
,BlurRadius
,SpreadRadius
iColor
. Jak zauważyli inni, możesz określić jedną stronę w ten sposóbbox-shadow: inset 0 8px 6px -6px black;
Wiele cieni w pudełku załatwiło sprawę dla mnie.
box-shadow: inset 0 -8px 4px 4px rgb(255,255,255), inset 0 2px 4px 0px rgba(50, 50, 50, 0.75);
http://jsfiddle.net/kk66f/
źródło