J'ai une barre de navigation à onglets dans laquelle j'aimerais que l'onglet ouvert ait une ombre pour le distinguer des autres onglets. J'aimerais également que toute la section des onglets ait une seule ombre (voir la ligne horizontale du bas) qui monte, ombrageant le bas de tous les onglets à l'exception de celui ouvert.
Je vais utiliser la box-shadow
propriété de CSS3 pour le faire, mais je ne peux pas trouver un moyen d'ombrer uniquement les parties que je veux.
Normalement, je couvrirais l'ombre inférieure de l'onglet ouvert avec la zone de contenu (plus haut z-index
), mais dans ce cas, la zone de contenu elle-même a une ombre, ce qui finirait par couvrir l'onglet.
Disposition des onglets
_______ _______ _______ | | | | | | ____ | _______ | __ | | __ | _______ | ______
Ligne d'ombre.
L'ombre remonterait à partir des lignes horizontales et à l'extérieur des lignes verticales.
_______ | | _______________ | | _________________
Voici un exemple en direct:
Avez-vous de l'aide là-bas, génies?
Réponses:
Dans votre exemple, créez un div dans #content avec ce style
et changez le style #content (supprimez les rembourrages) et ajoutez une ombre
ajouter des ombres aux onglets:
la source
#content_over_shadow
devrait en fait être dans#content
le style de.Coupez-le avec trop-plein.
la source
z-index
Vous pouvez utiliser plusieurs ombres CSS sans autres divs pour obtenir l'effet souhaité, avec la mise en garde de l'absence d'ombres dans les coins.
Dans l'ensemble, c'est très discret.
la source
Une autre façon, plutôt créative, de résoudre ce problème est d'ajouter: après ou: avant un pseudo élément à l'un des éléments. Dans mon cas, cela ressemble à ceci:
Voir la capture d'écran, rendre le pseudo élément rouge pour le rendre plus visible.
la source
Personnellement, j'aime le mieux la solution trouvée ici: http://css3pie.com/demos/tabs/
Il vous permet d'avoir un état zéro ou un état de survol avec une couleur d'arrière-plan qui a toujours l'ombre du contenu ci-dessous qui la superpose. Pas sûr que ce soit possible avec la méthode ci-dessus:
METTRE À JOUR:
En fait, j'avais tort. Vous pouvez faire en sorte que la solution acceptée prenne en charge l'état de survol indiqué ci-dessus. Faites ceci:
Au lieu d'avoir le relatif positif sur le a, placez-le sur la classe a.active avec un z-index supérieur à votre #content div ci-dessous (qui a l'ombre dessus) mais inférieur au z-index de votre content_wrapper.
Par exemple:
puis avec votre css:
la source
Mettre à jour:
clip-path
est désormais pris en charge dans tous les principaux navigateurs.Réponse originale:
Si vous souhaitez utiliser une technologie expérimentale avec un support partiel seulement , vous pouvez utiliser la
clip-path
propriété .Cela produira l'effet désiré: une ombre de boîte sur les côtés supérieur, gauche et droit avec une coupure nette sur le bord inférieur.
Dans votre cas, vous utiliseriez clip-path: inset (px px px px); où les valeurs de pixel sont calculées à partir du bord en question (voir ci-dessous).
Cela va couper le div en question à:
Notez qu'aucune virgule n'est requise entre les valeurs de pixel.
La taille du div peut être flexible.
la source
vous pouvez également couvrir l'ombre en utilisant plusieurs ombres de boîte.
boîte-ombre: 0 10px 0 #fff, 0 0 10px #ccc;
la source
Si vous avez ajouté deux travées à accrocher, vous pouvez en utiliser deux, quelque chose comme:
sur une travée et
sur un autre. Pourrait fonctionner!
Si les ombres se chevauchent, vous pouvez même utiliser 3 ombres - une 1px à gauche, une 1px à droite et une 1px vers le haut, ou quelle que soit l'épaisseur souhaitée.
la source
J'ai fait une sorte de hack, pas parfait, mais ça a l'air bien:
SCSS
la source