Eu tenho uma barra de navegação com guias onde gostaria que a guia aberta tivesse uma sombra para diferenciá-la das outras guias. Também gostaria que toda a seção da guia tivesse uma única sombra (ver linha horizontal inferior) subindo, sombreando a parte inferior de todas as guias, exceto a aberta.
Vou usar a box-shadow
propriedade CSS3 para fazer isso, mas não consigo descobrir uma maneira de sombrear apenas as partes que desejo.
Normalmente, eu cobriria a sombra inferior da guia aberta com a área de conteúdo (mais alta z-index
), mas, neste caso, a própria área de conteúdo tem uma sombra que acabaria cobrindo a guia.
Layout de guia
_______ _______ _______ | | | | | | ____ | _______ | __ | | __ | _______ | ______
Linha de sombra.
A sombra subiria a partir das linhas horizontais e para fora das linhas verticais.
_______ | | _______________ | | _________________
Aqui está um exemplo ao vivo:
Alguma ajuda aí, gênios?
Respostas:
Em sua amostra, crie um div dentro de #content com este estilo
e alterar o estilo do #content (remover preenchimentos) e adicionar sombra
adicionar sombras às guias:
fonte
#content_over_shadow
deve realmente estar no#content
estilo de.Corte-o com estouro.
fonte
z-index
Você pode usar várias sombras CSS sem quaisquer outros divs para obter o efeito desejado, com a ressalva de que não há sombras nos cantos.
Globalmente, porém, é muito pouco intrusivo.
fonte
Outra forma bastante criativa de resolver este problema é adicionar: after ou: before pseudoelemento a um dos elementos. No meu caso, é assim:
Veja a imagem, fez o pseudo elemento vermelho para torná-lo mais visível.
fonte
Pessoalmente, gosto mais da solução encontrada aqui: http://css3pie.com/demos/tabs/
Ele permite que você tenha um estado zero ou um estado de foco com uma cor de fundo que ainda tem a sombra do conteúdo abaixo sobreposta. Não tenho certeza se isso é possível com o método acima:
ATUALIZAR:
Na verdade, eu estava errado. Você pode fazer com que a solução aceita suporte o estado de foco mostrado acima. Faça isso:
Em vez de ter o relativo positivo em a, coloque-o na classe a.active com um índice z que é maior do que seu div #content abaixo (que tem a sombra), mas é menor que o índice z em seu content_wrapper.
Por exemplo:
então com seu css:
fonte
Atualizar:
clip-path
agora é compatível com todos os principais navegadores.Resposta Original:
Se você deseja usar tecnologia experimental apenas com suporte parcial , pode usar a
clip-path
propriedade .Isso produzirá o efeito desejado: uma sombra de caixa nos lados superior, esquerdo e direito com um corte limpo na borda inferior.
No seu caso, você usaria o caminho de clipe: inset (px px px px); onde os valores de pixel são calculados a partir da aresta em questão (veja abaixo).
Isso cortará o div em questão em:
Observe que nenhuma vírgula é necessária entre os valores de pixel.
O tamanho do div pode ser flexível.
fonte
você pode encobrir a sombra usando várias sombras de caixa também.
sombra da caixa: 0 10px 0 #fff, 0 0 10px #ccc;
fonte
Se você adicionou dois vãos para se conectar, pode usar dois, algo como:
em um período e
em outro. Pode funcionar!
Se as sombras se sobrepõem, você pode até usar 3 sombras - uma 1px para a esquerda, uma 1px para a direita e uma 1px para cima, ou com a espessura que desejar.
fonte
Fiz uma espécie de hack, não perfeito, mas parece bom:
SCSS
fonte