Pergunta

Eu tenho uma barra de navegação com abas onde eu gostaria que a aba aberta para ter uma sombra para configurá-lo para além de outras guias. Eu também gostaria toda a seção guia para ter uma única sombra (veja a linha horizontal inferior) indo para cima, protegendo a parte inferior de todas as guias, exceto para o aberto.

Vou usar a propriedade box-shadow de CSS3 para fazê-lo, mas eu não consigo descobrir uma maneira de sombra apenas as partes que eu quero.

Normalmente eu encobrir a sombra inferior da guia aberta com a área de conteúdo (superior z-index), mas neste caso a própria área do conteúdo tem uma sombra de modo que seria apenas acabam cobrindo a guia.

guia Layout

     _______    _______    _______
    |       |  |       |  |       |
____|_______|__|       |__|_______|______

Sombra linha.

Sombra subiria a partir das linhas horizontais, e para fora das linhas verticais.

                _______
               |       |
_______________|       |_________________

Aqui é um exemplo vivo:

Qualquer ajuda lá fora, gênios?

Foi útil?

Solução

Em sua amostra criar um div dentro #content com este estilo

#content_over_shadow {
    padding: 1em;
    position: relative; /* look at this */
    background:#fff;    /* a solid background (non transparent) */
}

e mude o estilo #content (paddings remover) e adicionar sombra

#content {
    font-size: 1.8em;
    box-shadow: 0 0 8px 2px #888; /* line shadow */
}

adicionar sombras para guias:

#nav li a {
    margin-left: 20px;
    padding: .7em .5em .5em .5em;
    font-size: 1.3em;
    color: #FFF;
    display: inline-block;
    text-transform: uppercase;
    position: relative;
    box-shadow: 0 0 8px 2px #888; /* the shadow */
}

Outras dicas

cortá-lo com overflow.

<style type="text/css">
    div div {box-shadow:0 0 5px #000; height:20px}
    div {overflow:hidden;height:25px; padding:5px 5px 0 5px}

</style>
<div><div>tab</div></div>

Você pode usar várias sombras CSS sem quaisquer outros divs para obter efeito desejado, com a ressalva de de sem sombras em torno dos cantos.

-webkit-box-shadow: 0 -3px 3px -3px black, 3px 0px 3px -3px black, -3px 0px 3px -3px black;
-moz-box-shadow:    0 -3px 3px -3px black, 3px 0px 3px -3px black, -3px 0px 3px -3px black;
box-shadow:         0 -3px 3px -3px black, 3px 0px 3px -3px black, -3px 0px 3px -3px black;

Globalmente, porém é muito bem recebidos.

Pessoalmente, como a solução encontrada aqui melhor: 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 sobrepondo-lo. Não tenho certeza que isso é possível com o método acima:

tab sombreada com estado de foco

UPDATE:

Na verdade, eu estava incorreta. Você pode fazer o apoio solução aceita o estado de foco mostrado acima. Faça o seguinte:

Em vez de ter o parente positivo sobre o um, colocá-lo na classe a.active com um z-index que é maior do que o seu div #content abaixo (que tem a sombra nela), mas é menor do que o z- índice em seu content_wrapper.

Por exemplo:

<nav class="ppMod_Header clearfix">
    <h1 class="ppMod_PrimaryNavigation-Logo"><a class="ppStyle_Image_Logo" href="/">My company name</a></h1>
    <ul class="ppList_PrimaryNavigation ppStyle_NoListStyle clearfix">
        <li><a href="/benefits">Benefits</a></li>
        <li><a class="ppStyle_Active" href="/features">Features</a></li>
        <li><a href="/contact">Contact</a></li>
        <li><a href="/company">Company</a></li>
    </ul>
</nav>
<div id="ppPage-Body">
    <div id="ppPage-BodyWrap">
        content goes here
    </div>
</div>

, em seguida, com o seu css:

#ppPage-Body
    box-shadow: 0 0 12px rgba(0,0,0,.75)
    position: relative /* IMPORTANT PART */

#ppPage-BodyWrap
    background: #F4F4F4
    position: relative /* IMPORTANT PART */
    z-index: 4 /* IMPORTANT PART */


.ppList_PrimaryNavigation li a:hover
    background: #656565
    -webkit-border-radius: 6px 6px 0 0
    -moz-border-radius: 6px 6px 0 0
    border-radius: 6px 6px 0 0

.ppList_PrimaryNavigation li a.ppStyle_Active
    background: #f4f4f4
    color: #222
    -webkit-border-radius: 6px 6px 0 0
    -moz-border-radius: 6px 6px 0 0
    border-radius: 6px 6px 0 0
    -webkit-box-shadow: 0 0 12px rgba(0,0,0,0.75)
    -moz-box-shadow: 0 0 12px rgba(0,0,0,0.75)
    box-shadow: 0 0 12px rgba(0,0,0,0.75)
    position: relative /* IMPORTANT PART */
    z-index: 3 /* IMPORTANT PART */

Um mais, em vez criativo, maneira de resolver este problema é adicionar: ou depois: antes elemento pseudo a um dos elementos. No meu caso é parecido com este:

#magik_megamenu>li:hover>a:after {
    height: 5px;
    width: 100%;
    background: white;
    content: '';
    position: absolute;
    bottom: -3px;
    left: 0;
}

Veja a imagem, fez o elemento pseudo vermelho para tornar mais visível.

See captura de tela, fez o elemento pseudo vermelho para tornar mais visível.

Você pode encobrir sombra usando várias sombras caixa também.

box-shadow: 0 10px 0 #fff, 0 0 10px #ccc;

Se você adicionou dois vãos possa se prender então você poderia usar dois, algo como:

box-shadow: -1px -1px 1px #000;

em um espaço e

box-shadow: 1px -1px 1px #000;

em outro. Pode funcionar!

Se as sombras se sobrepõem você poderia até usar 3 sombras -. Um 1px para a esquerda, um 1px para a direita e um 1px para cima, ou no entanto grossa você quer que eles

Se você estiver disposto a usar a tecnologia experimental com apenas suporte parcial, você poderia usar clip-path propriedade .

Isto irá produzir o efeito desejado:. Uma sombra caixa no topo, laterais esquerda e direita com um corte limpo na borda inferior

No seu caso, você usaria grampo-trajeto: inserção (px px px px); em que os valores de pixel são calculados a partir do bordo em questão (ver abaixo).

#container {
    box-shadow: 0 0 8px 2px #888;
    clip-path: inset(-8px -8px 0px -8px);
}

Isto irá cortar a div em questão em:

  • 8 pixels acima da parte superior (para incluir a sombra)
  • 8 pixels fora da borda direita (para incluir a sombra)
  • 0 pixels do fundo (para esconder a sombra)
  • 8 pixels fora da borda esquerda (para incluir a sombra)

Note que sem vírgulas são necessárias entre os valores de pixel.

O tamanho do div pode ser flexível.

Eu fiz uma espécie de corte, não é perfeito, mas parece bem:

<ul class="tabs">
<li class="tab active"> Tab 1 </li>
<li class="tab"> Tab 2 </li>
<li class="tab"> Tab 3 </li>
</ul>

<div class="tab-content">Content of tab goes here</div>

SCSS

 .tabs { list-style-type: none; display:flex;align-items: flex-end;
  .tab {
    margin: 0;
    padding: 4px 12px;
    border: 1px solid $vivosBorderGrey2;
    background-color:$vivosBorderGrey2;
    color: $vivosWhite;
    border-top-right-radius: 8px;
    border-top-left-radius: 8px;
    border-bottom: 0;
    margin-right: 2px;
    font-size: 14px;
    outline: none;
    cursor: pointer;
    transition: 0.2s;
    &.active {
      padding-bottom: 10px;
      background-color: #ffffff;
      border-color: #eee;
      color: $vivosMedGrey;
      border-bottom-color: transparent;
      box-shadow: 0px -3px 8px -3px rgba(0, 0, 0, 0.1);
    }
    &:hover {padding-bottom: 10px;
    }
   } 

.tabContent {
  border: 1px solid #eee;
  padding:10px;
  margin-top: -1px;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top