Jak stworzyć wstawkę cienia tylko z jednej strony?


109

Czy w jakiś sposób można mieć wstawiony cień pola tylko po jednej stronie elementu div? Zwróć uwagę, że mówię tutaj o wstawionym cieniu pudełka, a nie zwykłym zewnętrznym cieniu pudełka.

Na przykład w poniższym JSFiddle zobaczysz, że wstawiony cień pojawia się ze wszystkich 4 stron w różnym stopniu.

Jak sprawić, by wyświetlał się TYLKO na górze? Lub co najwyżej TYLKO na górze i na dole?

JSFiddle: http://jsfiddle.net/ahmadka/KFrun/

.box {
  -webkit-box-shadow: inset 0px 5px 10px 1px #000000;
  box-shadow: inset 0px 5px 10px 1px #000000;
}

.text {
  padding: 20px;
}
<div class="box">
  <div class="text">
    Lorem ipsum ....
  </div>
</div>


3
Alternatywnym (iw pełni konfigurowalnym) sposobem byłby gradient tła ...
vals

Odpowiedzi:


237

To jest to, czego szukasz. Zawiera przykłady dla każdej strony, którą chcesz z cieniem.

.top-box
{
    box-shadow: inset 0 7px 9px -7px rgba(0,0,0,0.4);
}
.left-box
{
    box-shadow: inset 7px 0 9px -7px rgba(0,0,0,0.4);
}
.right-box
{
    box-shadow: inset -7px 0 9px -7px rgba(0,0,0,0.4);
}
.bottom-box
{
    box-shadow: inset 0 -7px 9px -7px rgba(0,0,0,0.4);
}

Zobacz fragment, aby zobaczyć więcej przykładów:


13

Sztuczka polega na drugim .box-innerwnętrzu, które jest szersze niż oryginał .boxi box-shadowjest do tego stosowane.

Następnie dodano więcej wypełnienia, .textaby nadrobić dodatkową szerokość.

Oto jak wygląda logika:

logika skrzynkowa

A oto jak to się robi w CSS:

Użyj maksymalnej szerokości, .inner-boxaby nie spowodować .boxposzerzenia i overflowupewnić się, że pozostała część jest przycięta:

.box {
    max-width: 100% !important;
    overflow: hidden;
}

110% jest szersze niż rodzic, czyli 100% w kontekście dziecka (powinno być takie samo, gdy rodzic .boxma na przykład stałą szerokość). Marginesy ujemne uzupełniają szerokość i powodują wyśrodkowanie elementu (zamiast ukrywania tylko prawej części):

.box-inner {
    width: 110%;
    margin-left:-5%;
    margin-right: -5%;
    -webkit-box-shadow: inset 0px 5px 10px 1px #000000;
    box-shadow: inset 0px 5px 10px 1px #000000;
}

I dodaj trochę wypełnienia na osi X, aby nadrobić szersze .inner-box:

.text {
    padding: 20px 40px;
}

Oto działające Fiddle.

Jeśli zbadasz Skrzypce, zobaczysz:

.pudełko .box-inner .tekst


Jak możesz po prostu zamieścić link do skrzypiec bez kodu? : O
Mohammad Areeb Siddiqui,

Człowiek! To TAKIE hack! Cool: P
Mohammad Areeb Siddiqui

W moim Firefoksie nie widzę tekstu po prawej i lewej krawędzi. Tekst jest po prostu odcinany. (Oto zrzut ekranu goo.gl/aO8ZX ) muszę spróbować to sam i używane jakieś dodatkowe divukryć cień ... jsfiddle.net/KFrun/19
Fabian N.

Tak, używam jsfiddle.net/KFrun/6/ Czy jest to prawdopodobnie problem z wersją przeglądarki Firefox? Używam Firefoksa 21.0 dla Ubuntu ...
Fabian N.,

Ale pod spodem wciąż jest cień
Cody Guldner,

8

Dość późno, ale zduplikowaną odpowiedź, która nie wymaga zmiany dopełnienia ani dodawania dodatkowych elementów div, można znaleźć tutaj: Problem z tylko dolną wstawką box-shadow . Mówi: „Użyj wartości ujemnej dla czwartej długości, która określa odległość rozprzestrzeniania. Jest to często pomijane, ale obsługiwane przez wszystkie główne przeglądarki”

Ze skrzypiec odpowiadającego :

box-shadow: inset 0 -10px 10px -10px #000000;

7

To już trochę blisko.

.box
{
    -webkit-box-shadow: inset -1px 10px 5px -3px #000000;
    box-shadow: inset -1px 10px 5px -3px #000000;
}

Właśnie tego próbowałem! Ale on tego nie chciał, więc nie opublikował tego jako odpowiedzi! :(
Mohammad Areeb Siddiqui,

Duży jak. Dziękuję ❤️
mghhgm

Może być najprostsza odpowiedź niż ta (przynajmniej na razie). Dzięki
Gendrith

1

spróbuj, może przydatne ...

box-shadow: 0 0 0 3px rgb(255,255,255), 0 7px 3px #cbc9c9;
                    -webkit-box-shadow: 0 0 0 3px rgb(255,255,255), 0 7px 5px #cbc9c9;
                    -o-box-shadow: 0 0 0 3px rgb(255,255,255), 0 7px 5px #cbc9c9;
                    -moz-box-shadow: 0 0 0 3px rgb(255,255,255), 0 7px 5px #cbc9c9;  

powyżej, CSSponieważ na dole masz cień pudełka.
możesz czerwony więcej Tutaj


1

To może nie być dokładnie to, czego szukasz, ale możesz stworzyć bardzo podobny efekt, używając rgbaw połączeniu z linear-gradient:

  background: linear-gradient(rgba(0,0,0,.5) 0%, rgba(0,0,0,0) 30%);

Tworzy to liniowy gradient od czerni z 50% kryciem ( rgba(0,0,0,.5)) do przezroczystości ( rgba(0,0,0,0)), który zaczyna być kompetentnie przezroczysty 30% od góry. Możesz bawić się tymi wartościami, aby uzyskać pożądany efekt. Możesz mieć to po innej stronie, dodając wartość deg ( linear-gradient(90deg, rgba(0,0,0,.5) 0%, rgba(0,0,0,0) 30%)) lub zmieniając kolory. Jeśli chcesz naprawdę skomplikowanych cieni, takich jak różne kąty z różnych stron, możesz nawet zacząć nakładać warstwy linear-gradient.

Oto fragment, aby zobaczyć to w akcji:

.box {
  background: linear-gradient(rgba(0,0,0,.5) 0%, rgba(0,0,0,0) 30%);
}

.text {
  padding: 20px;
}
<div class="box">
  <div class="text">
    Lorem ipsum ....
  </div>
</div>


0

Wstawiony cień skrzynki tylko na górnej stronie?

#box {
            background: #CCC;
            -webkit-box-shadow: inset 0 20px 20px -20px rgba(0,0,0,0.8);
            -moz-box-shadow: inset 0 20px 20px -20px rgba(0,0,0,0.8);
            box-shadow: inset 0 20px 20px -20px rgba(0,0,0,0.8);
            font: bold 18px/1.2em sans-serif;
            height: auto;
            margin: 15px auto;
            padding: 75px 15px 25px;
            text-align: center;
            width: 80%;
        }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.