Tengo una barra de navegación con pestañas donde me gustaría que la pestaña abierta tenga una sombra para diferenciarla de las otras pestañas. También me gustaría que toda la sección de pestañas tenga una sola sombra (ver la línea horizontal inferior) subiendo, sombreando la parte inferior de todas las pestañas excepto la abierta.
Voy a usar la box-shadow
propiedad de CSS3 para hacerlo, pero no puedo encontrar una manera de sombrear solo las partes que quiero.
Normalmente cubriría la sombra inferior de la pestaña abierta con el área de contenido (más alta z-index
), pero en este caso el área de contenido en sí tiene una sombra, por lo que terminaría cubriendo la pestaña.
Diseño de pestaña
_______ _______ _______ | | | | | | ____ | _______ | __ | | __ | _______ | ______
Línea de sombra.
La sombra iría hacia arriba desde las líneas horizontales y hacia afuera de las líneas verticales.
_______ | | _______________ | | _________________
Aquí hay un ejemplo en vivo:
¿Alguna ayuda, genios?
Respuestas:
En su muestra, cree un div dentro de #content con este estilo
y cambie el estilo de #content (elimine los rellenos) y agregue sombra
agregar sombras a las pestañas:
fuente
#content_over_shadow
debería tener#content
el estilo de en.Córtelo con desbordamiento.
fuente
z-index
Puede usar múltiples sombras CSS sin ningún otro div para obtener el efecto deseado, con la advertencia de que no hay sombras en las esquinas.
En general, aunque es muy discreto.
fuente
Una forma más, bastante creativa, de resolver este problema es agregar: after o: before pseudo elemento a uno de los elementos. En mi caso se ve así:
Vea la captura de pantalla, hizo que el pseudo elemento sea rojo para hacerlo más visible.
fuente
Personalmente me gusta más la solución que se encuentra aquí: http://css3pie.com/demos/tabs/
Le permite tener un estado cero o un estado de desplazamiento con un color de fondo que aún tiene la sombra del contenido a continuación superpuesto. No estoy seguro de que sea posible con el método anterior:
ACTUALIZAR:
De hecho, estaba equivocado. Puede hacer que la solución aceptada admita el estado de desplazamiento que se muestra arriba. Hacer esto:
En lugar de tener el relativo positivo en la a, colóquelo en la clase a.active con un índice z que sea más alto que su div #content a continuación (que tiene la sombra) pero es más bajo que el índice z en su content_wrapper.
Por ejemplo:
luego con tu css:
fuente
Actualizar:
clip-path
ahora es compatible con los principales navegadores.Respuesta original:
Si está dispuesto a utilizar tecnología experimental con solo un apoyo parcial , puede utilizar la
clip-path
propiedad .Esto producirá el efecto deseado: una sombra de caja en los lados superior, izquierdo y derecho con un corte limpio en el borde inferior.
En su caso, usaría clip-path: inset (px px px px); donde los valores de los píxeles se calculan a partir del borde en cuestión (ver más abajo).
Esto recortará el div en cuestión en:
Tenga en cuenta que no se requieren comas entre los valores de los píxeles.
El tamaño del div puede ser flexible.
fuente
también puede cubrir la sombra utilizando varias sombras de caja.
sombra de cuadro: 0 10px 0 #fff, 0 0 10px #ccc;
fuente
Si agregó dos tramos para enganchar, podría usar dos, algo como:
en un tramo y
en otro. ¡Podría funcionar!
Si las sombras se superponen, incluso podría usar 3 sombras: una 1px a la izquierda, una 1px a la derecha y una 1px hacia arriba, o el grosor que desee.
fuente
Hice una especie de truco, no perfecto, pero se ve bien:
SCSS
fuente