Yalnızca bir tarafta ek kutu gölgesi nasıl oluşturulur?


109

Bir div'in sadece bir tarafında iç kutu gölgesi olması bir şekilde mümkün müdür? Burada ek kutu gölgesinden bahsettiğime dikkat edin, normal dış kutu gölgesinden değil.

Örneğin, aşağıdaki JSFiddle'da, ek gölgenin 4 tarafın hepsinde değişen derecelerde göründüğünü göreceksiniz.

YALNIZCA en üstte gösterilmesini nasıl sağlayabilirim? Veya en fazla SADECE üstte ve altta mı?

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
Alternatif (ve tamamen özelleştirilebilir) bir yol, arka plan gradyanı olabilir ...
vals

Yanıtlar:


238

Aradığınız şey bu. Bir gölge ile istediğiniz her taraf için örnekleri vardır.

.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);
}

Daha fazla örnek için snippet'e bakın:


13

İşin püf noktası .box-inner, orijinalinden daha geniş olan .boxve buna box-shadowuygulanan bir ikinci iç kısımdır .

Ardından, .texteklenen genişliği telafi etmek için daha fazla dolgu ekleyin.

Mantık şöyle görünür:

kutu mantığı

Ve işte CSS'de şu şekilde yapılır:

Daha geniş .inner-boxolmasına neden olmamak ve kalan kısmın kırpıldığından emin olmak için maksimum genişliği kullanın :.boxoverflow

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

% 110, bir çocuğun bağlamında% 100 olan ebeveynden daha geniştir ( .boxörneğin , ebeveyn sabit bir genişliğe sahip olduğunda aynı olmalıdır ). Negatif kenar boşlukları genişliği oluşturur ve öğenin ortalanmasına neden olur (yalnızca sağ kısmı gizlemek yerine):

.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;
}

Ve daha geniş olanı telafi etmek için X eksenine biraz dolgu ekleyin .inner-box:

.text {
    padding: 20px 40px;
}

İşte çalışan bir Fiddle.

Fiddle'ı incelerseniz şunları görürsünüz:

.Kutu .box-iç .Metin


Kod olmadan keman çalmak için bağlantıyı nasıl gönderebilirsin? : O
Mohammad Areeb Siddiqui

Adam! Bu bir SO hack! Cool: P
Mohammad Areeb Siddiqui

Firefox'umda sağ ve sol kenarlıktaki metni göremiyorum. Metin basitçe kesilir. (İşte ekran görüntüsü goo.gl/aO8ZX ) Kendim denedimdiv ve gölgeyi gizlemek için biraz fazladan kullandım ... jsfiddle.net/KFrun/19
Fabian N.

Evet jsfiddle.net/KFrun/6/ kullanıyorum Firefox sürüm sorunu olabilir mi? Ubuntu için Firefox 21.0 kullanıyorum ...
Fabian N.

Ama altında hala bir gölge var
Cody Guldner

8

Oldukça geç, ancak dolguyu değiştirmeyi veya fazladan div eklemeyi gerektirmeyen yinelenen bir cevap burada bulunabilir: Yalnızca kutu gölgesi İç alt ile ilgili bir sorun var . "Yayılma mesafesini tanımlayan dördüncü uzunluk için negatif bir değer kullanın. Bu genellikle göz ardı edilir, ancak tüm büyük tarayıcılar tarafından desteklenir" diyor.

Cevaplayanın kemanından :

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

7

Bu biraz yaklaşıyor.

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

Ben de bunu denedim! Ama bunu istemediği için cevap olarak göndermedi! :(
Mohammad Areeb Siddiqui

Büyük gibi. Teşekkür ederim ❤️
mghhgm

Bundan daha basit bir cevap olabilir (en azından şimdilik). Teşekkürler
Gendrith

1

deneyin, belki faydalı ...

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;  

yukarıda CSSçünkü altta bir kutu gölgeniz var. Burada
daha fazla kırmızı yapabilirsin


1

Bu tam olarak aradığınız şey olmayabilir, ancak aşağıdakilerle rgbakombinasyon halinde kullanarak çok benzer bir etki yaratabilirsiniz linear-gradient:

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

Bu,% 50 opaklık ( rgba(0,0,0,.5)) ile siyahtan şeffaf ( rgba(0,0,0,0)) arasında, üstten% 30 yetkin bir şekilde şeffaf olmaya başlayan doğrusal bir gradyan oluşturur . İstediğiniz efekti oluşturmak için bu değerlerle oynayabilirsiniz. Bir derece değeri ( linear-gradient(90deg, rgba(0,0,0,.5) 0%, rgba(0,0,0,0) 30%)) ekleyerek veya renkleri değiştirerek farklı bir tarafa sahip olabilirsiniz . Farklı taraflardaki farklı açılar gibi gerçekten karmaşık gölgeler istiyorsanız, katmanlamaya bile başlayabilirsiniz linear-gradient.

İşte iş başında görmek için bir pasaj:

.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

Gömme Kutu Gölgesi yalnızca Üst tarafta mı?

#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%;
        }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.