Ich habe eine Navigationsleiste mit Registerkarten, in der die geöffnete Registerkarte einen Schatten haben soll, um sie von den anderen Registerkarten abzuheben. Ich möchte auch, dass im gesamten Registerkartenbereich ein einzelner Schatten (siehe untere horizontale Linie) nach oben zeigt, der die Unterseite aller Registerkarten mit Ausnahme der offenen schattiert.
Ich werde die CSS3- box-shadow
Eigenschaft verwenden, um dies zu tun, aber ich kann keinen Weg finden, nur die Teile zu schattieren, die ich möchte.
Normalerweise würde ich den unteren Schatten der geöffneten Registerkarte mit dem Inhaltsbereich (höher z-index
) verdecken , aber in diesem Fall hat der Inhaltsbereich selbst einen Schatten, sodass er nur die Registerkarte abdeckt.
Registerkartenlayout
_______ _______ _______ | | | | | | ____ | _______ | __ | | __ | _______ | ______
Schattenlinie.
Der Schatten würde von den horizontalen Linien nach außen und von den vertikalen Linien nach außen gehen.
_______ | | _______________ | | _________________
Hier ist ein Live-Beispiel:
Hilfe da draußen, Genies?
Antworten:
Erstellen Sie in Ihrem Beispiel ein div in #content mit diesem Stil
und ändern Sie den # content-Stil (entfernen Sie die Auffüllungen) und fügen Sie Schatten hinzu
Hinzufügen von Schatten zu Registerkarten:
quelle
#content_over_shadow
sollte eigentlich im#content
Stil sein.Schneiden Sie es mit Überlauf ab.
quelle
z-index
Sie können mehrere CSS-Schatten ohne andere Divs verwenden, um den gewünschten Effekt zu erzielen, wobei keine Schatten um die Ecken zu sehen sind.
Insgesamt ist es aber sehr unauffällig.
quelle
Eine weitere, eher kreative Möglichkeit, dieses Problem zu lösen, besteht darin, einem der Elemente Folgendes hinzuzufügen: nach oder: vor dem Pseudoelement. In meinem Fall sieht es so aus:
Sehen Sie sich den Screenshot an und machen Sie das Pseudoelement rot, um es besser sichtbar zu machen.
quelle
Persönlich gefällt mir die hier gefundene Lösung am besten: http://css3pie.com/demos/tabs/
Sie können einen Null- oder Schwebezustand mit einer Hintergrundfarbe festlegen, die immer noch den Schatten des darunter liegenden Inhalts überlagert. Ich bin mir nicht sicher, ob dies mit der obigen Methode möglich ist:
AKTUALISIEREN:
Eigentlich war ich falsch. Sie können dafür sorgen, dass die akzeptierte Lösung den oben gezeigten Schwebezustand unterstützt. Mach das:
Anstatt den positiven Verwandten auf dem a zu haben, setzen Sie ihn in die a.active-Klasse mit einem Z-Index, der höher ist als Ihr #content div unten (der den Schatten darauf hat), aber niedriger als der Z-Index auf Ihrem content_wrapper.
Beispielsweise:
dann mit deinem css:
quelle
Aktualisieren:
clip-path
wird jetzt in allen gängigen Browsern unterstützt.Ursprüngliche Antwort:
Wenn Sie bereit sind, experimentelle Technologie mit nur teilweiser Unterstützung zu verwenden , können Sie die
clip-path
Eigenschaft nutzen .Dies erzeugt den gewünschten Effekt: einen Kastenschatten oben, links und rechts mit einem sauberen Ausschnitt am unteren Rand.
In Ihrem Fall würden Sie den Clip-Pfad verwenden: inset (px px px px); wobei die Pixelwerte von der fraglichen Kante berechnet werden (siehe unten).
Dadurch wird das betreffende Div unter folgender Adresse abgeschnitten:
Beachten Sie, dass zwischen den Pixelwerten keine Kommas erforderlich sind.
Die Größe des Div kann flexibel sein.
quelle
Sie können Schatten auch mit mehreren Kastenschatten verdecken.
Kastenschatten: 0 10px 0 #fff, 0 0 10px #ccc;
quelle
Wenn Sie zwei Bereiche hinzugefügt haben, an die Sie sich anschließen möchten, können Sie zwei verwenden, etwa:
auf einer Spanne und
übereinander. Könnte funktionieren!
Wenn sich die Schatten überlappen, können Sie sogar 3 Schatten verwenden - einen 1px nach links, einen 1px nach rechts und einen 1px nach oben, oder wie dick Sie sie möchten.
quelle
Ich habe eine Art Hack gemacht, nicht perfekt, aber es sieht okay aus:
SCSS
quelle