2011-01-21 14 views
48

Ho un elemento con ombre di riquadri, ma voglio l'ombra solo sulla parte superiore.css3 ombre casella in una sola direzione?

Non c'è modo di impostare solo l'ombra superiore? Devo ricorrere alla creazione di elementi aggiuntivi per sovrapporre le ombre laterali?

risposta

119

Questo è tecnicamente la stessa risposta @ChrisJ, con qualche dettaglio in più su come rendere box-shadow fare la vostra offerta:

per riferimento le voci * sono opzionali:

box-shadow: <inset*> <offset-x> <offset-y> <blur-radius*> <spread-radius*> <color*>; 

Il <spread-radius> deve essere negativo <blur-radius> (in modo che nessuno degli altri lati sfocati si visualizzi) e quindi è necessario eseguire lo <offset-y> giù per lo stesso importo:

box-shadow: inset 0 20px 20px -20px #000000; 

che vi darà una singola banda di pendenza nella parte superiore dell'elemento.

+20

Grazie per il tuo snippet, mi ha aiutato molto. Solo per i più pigri ecco una codeline completa per ciascun lato: 'box-shadow: inset 15px 0 15px -15px black; // left box-shadow: inset -15px 0 15px -15px black; // right box-shadow : inset 0 15px 15px -15px nero; // top box-shadow: inset 0 -15px 15px -15px nero; // in basso 'modifica: Scusa, non è possibile ottenere la formattazione corretta, non so perché, aggiunto due spazi. Sarebbe bello se un amministratore potesse formattarlo nel modo giusto. – Dominik

+4

grazie per avermi lasciato essere pigro :) – Zhanger

+0

Per creare un'ombreggiatura in basso, fai lo y offset -20px –

9

box-shadow compensa l'ombra di una data quantità in ciascuna direzione. Quindi è necessario che l'offset x sia 0 e che l'offset y sia qualcosa di negativo.

Inoltre, è necessario giocare con il raggio di sfocatura e il raggio di diffusione in modo che l'ombra non sia visibile sui lati sinistro e destro.

Esempio:

box-shadow: #777 0px -10px 5px -2px; 

vedere la descrizione sulla Mozilla Developer Network.

+0

No, questo non funziona. gli offset sono xey non a destra ea sinistra. – Mark

+0

Non ho detto questo: x-offset è l'offset orizzontale; l'offset y è l'offset verticale. Quindi per avere l'ombra in alto, devi avere un offset di y <0 – ChrisJ

+0

@ Mark funziona se capisci come usare zzzzBov

0

Ecco un piccolo trucco che ho fatto.

<div id="element"><!--element that I want an one-sided inset shadow from the bottom--></div> 
<div class="one_side_shadow"></div> 
  1. creare un <div class="one_side_shadow"></div> proprio sotto l'elemento che voglio creare la casella ombra su un solo lato (in questo caso voglio un'ombra inserto unilaterale per id="element" proveniente dal basso)

  2. Quindi ho creato un'ombreggiatura regolare utilizzando un offset verticale negativo per spostare l'ombra verso l'alto su un lato.

    box-shadow: 0 -8px 20px 2px # DEDEE3;

2

Esempio:

box-shadow: 0 2px 0px 0px red inset; 

il primo parametro ed il secondo parametro specifica l'offset ombra direzione x ed y direzione rispettivamente. Terzo parametro specifica la distanza di sfocatura. Infine, il quarto parametro specifica la distanza di diffusione.

Specificando solo il secondo parametro con l'offset si desidera dà l'ombra superiore senza ombre laterali.

demo può essere trovato qui: http://jsfiddle.net/rEdBy/

Un bel tutorial su CSS3 ombre di sicurezza - http://www.css3.info/preview/box-shadow/

0

Forse provare a utilizzare box-shadow:

box-shadow: h-shadow v-shadow blur spread color inset;

con troppopieno-x:

overflow-x: visible|hidden|scroll|auto|no-display|no-content;

uso overflow-x: hidden; e box-shadow: 0px 10px 16px -10px #000;

1

Ecco il mio esempio riprova una volta

-webkit-box-shadow: 0 8px 6px -6px black; 
-moz-box-shadow: 0 8px 6px -6px black; 
box-shadow: 0 8px 6px -6px black; 
Problemi correlati