2011-02-05 10 views
42

Saluti,CSS3 Box Ombra in primo piano, a sinistra ea destra Solo

Sto cercando di applicare un'ombra scatola CSS3 al solo la parte superiore, a destra, e la sinistra di un DIV con un raggio che corrisponde al risultato della seguendo CSS (meno l'ombreggiatura inferiore)

#div { 
    -webkit-box-shadow: 0px 0px 10px #000; 
    -moz-box-shadow: 0px 0px 10px #000; 
    box-shadow: 0px 0px 10px #000; 
} 

Quale sarebbe il modo migliore per realizzare questo?

Grazie!

UPDATE Questa ombra sarà applicata ad una barra di navigazione su una pagina, la barra è posizionato sulla parte superiore del contenitore principale DIV. Quello che sto cercando di realizzare è di continuare l'ombra del box del DIV principale sulla barra di navigazione, che si trova sopra di esso, ma senza un'ombra in basso sulla barra di navigazione. Dai uno sguardo allo site itself per vedere di cosa sto parlando, più facile che aggiungere tutto l'HTML e il CSS qui.

UPDATE 2 Dal momento che il DIV sto lavorando con è singolare, piuttosto che cercare di mettere un'ombra su ogni nav Li, ho deciso di cambiare al seguente:

-webkit-box-shadow: 0px -4px 7px #e6e6e6; 
    -moz-box-shadow: 0px -4px 7px #e6e6e6; 
    box-shadow: 0px -4px 7px #e6e6e6; 

Questo rende il la parte superiore dell'ombra è molto evidente ma è quello che sto cercando di realizzare - se qualcuno conosce un modo per mantenere l'ombra nello stesso aspetto del contenitore DIV, per favore fatemelo sapere. Grazie!

+0

Va bene, piuttosto che fare l'ennesima modifica - ottimizzato un po 'piccolo ed è molto più vicino ora - '0px -2.6px 7px # e6e6e6;'. Mi piacerebbe aver manipolato il posizionamento di più prima di postare, ma sono abbastanza nuovo per i CSS3. – NightMICU

risposta

18

È meglio se coprite solo la parte inferiore con un altro div e otterrete un'ombreggiatura coerente su tutta la scheda.

#servicesContainer { 
    /*your css*/ 
    position: relative; 
} 

ed è corretto! come per magia!

+0

Grazie :) Accettato come soluzione poiché tecnicamente risolve il problema dell'ombra sotto il nav che appare sopra il DIV 'mainContainer', ma in realtà ha finito per generare un altro problema - l'ombra da' # mainContainer' sovrapponendo la barra di navigazione. Lo stesso problema, posizione diversa lol. Oh bene – NightMICU

+1

Non l'ho capito, probabilmente perché lo sto visualizzando su Chrome. Puoi aggiungere un nuovo div nella parte superiore di #servicesContainer, assegnargli un colore di sfondo di # 2A0808; e la posizione di applicazione: relativa al nuovo div. Otterrà lo stesso effetto senza sovrapporre l'ombra. – Duopixel

1

Aggiunta di una risposta separata perché è radicalmente diversa.

È possibile utilizzare rgba e impostare il canale alfa basso (per ottenere la trasparenza) per rendere meno evidente l'ombreggiatura.

provare qualcosa di simile (giocare con il .5)

-webkit-box-shadow: 0px -4px 7px rbga(230, 230, 230, .5); 
-moz-box-shadow: 0px -4px 7px rbga(230, 230, 230, .5); 
box-shadow: 0px -4px 7px rbga(230, 230, 230, .5); 

Spero che questo aiuti!

+0

Grazie :) Il client utilizza Firefox e l'ho verificato con il tuo suggerimento, purtroppo lo ha reso più evidente. Penso che quello con cui ho finito (vedere il commento alla mia domanda) è il più vicino che otterrò. Ma ho intenzione di sperimentare un po 'la tua risposta, probabilmente sarà utile su progetti futuri. Grazie ancora :) – NightMICU

+0

I browser che supportano box-shadow supportano anche rgba!: p –

+0

good call, updated – jdhartley

26

utilizzare il valore diffusione ...

box-shadow ha i seguenti valori

box-shadow: x y blur spread color; 

così si potrebbe usare qualcosa come ..

box-shadow: 0px -10px 10px -10px black; 

UPDATE: sto aggiungendo un jsfiddle

14

Si può dare più valori di box-shadow proprietà
esempio

-moz-box-shadow: 0px 10px 12px 0px #000, 
        0px -10px 12px 0px #000; 
-webkit-box-shadow: 0px 10px 12px 0px #000, 
        0px -10px 12px 0px #000; 
box-shadow: 0px 10px 12px 0px #000, 
      0px -10px 12px 0px #000; 

è ombra di sinistra e solo solo, si c un adattarlo alle proprie esigenze

+0

Questo è ottimo, questo nasconde la mia ombra inferiore (sovrappone l'ombra bianca su di essa) box-shadow: 0px 8px 0px -1px #FFFFFF, 0px 0px 1rem 0px rgba (0, 0, 0, 0,26); –

+0

è 'left, right, top, bottom' presumo? –

6

ho trovato un modo per coprire l'ombra con ": dopo", qui è il mio codice:

#div:after { 
    content:""; 
    position:absolute; 
    width:5px; 
    background:#fff; 
    height:38px; 
    top:1px; 
    right:-5px; 
} 
+0

Ho usato qualcosa lungo queste linee - finché il dopo ha un'altezza e uno sfondo funziona bene –

4

Il codice seguente ha fatto per me fare un inserto ombra del lato destro:

-moz-box-shadow: inset -10px 0px 10px -10px #000; 
-webkit-box-shadow: inset -10px 0px 10px -10px #000; 
box-shadow: inset -10px 0px 10px -10px #000; 

Spero che possa essere d'aiuto !!!!

1

Stavo avendo lo stesso problema e stavo cercando una possibile idea per risolvere questo.

ho avuto qualche CSS già in vigore per le mie schede e questo è ciò che ha funzionato per me:

(noti in particolare la padding-bottom: 2px; all'interno #tabs #selected a { che nasconde il fondo box-shadow ordinatamente e ha lavorato molto per me con il seguente CSS..)

#tabs { 
    margin-top: 1em; 
    margin-left: 0.5em; 
} 
#tabs li a { 
    padding: 1 1em; 
    position: relative; 
    top: 1px; 
    background: #FFFFFF; 
} 
#tabs #selected { 
    /* For the "selected" tab */ 
    box-shadow: 0 0 3px #666666; 
    background: #FFFFFF; 
} 
#tabs #selected a { 
    position: relative; 
    top: 1px; 
    background: #FFFFFF; 
    padding-bottom: 2px; 
} 
#tabs ul { 
    list-style: none; 
    padding: 0; 
    margin: 0; 
} 
#tabs li { 
    float: left; 
    border: 1px solid; 
    border-bottom-width: 0; 
    margin: 0 0.5em 0 0; 
    border-top-left-radius: 3px; 
    border-top-right-radius: 3px; 
} 

Pensavo che l'avrei messo lì come un'altra possibile soluzione per chiunque avesse bisogno di SO per questo.

1

So che questo è molto vecchio, ma nessuna di queste risposte mi ha aiutato, quindi sto aggiungendo la mia risposta. Questo, come la risposta di @ yichengliu, utilizza l'elemento Pseudo ::after.

#div { 
    position: relative; 
} 



#div::after { 
    content: ''; 
    position: absolute; 
    right: 0; 
    width: 1px; 
    height: 100%; 
    z-index: -1; 

    -webkit-box-shadow: 0px 0px 5px 0px rgba(0,0,0,1); 
    -moz-box-shadow: 0px 0px 5px 0px rgba(0,0,0,1); 
    box-shadow: 0px 0px 5px 0px rgba(0,0,0,1); 
} 

/*or*/ 

.filter.right::after { 
    content: ''; 
    position: absolute; 
    right: 0; 
    top: 0; 
    width: 1px; 
    height: 100%; 
    background: white; 
    z-index: -1; 

    -webkit-filter: drop-shadow(0px 0px 1px rgba(0, 0, 0, 1)); 
    filter: drop-shadow(0px 0px 1px rgba(0, 0, 0, 1)); 
} 

Fiddle

Se si decide di cambiare la X del ombra (misurazione primo pixel del drop-shadow o box-shadow), modificando la larghezza contribuirà in modo non sembra che ci sia un bianco gap tra il div e l'ombra.

Se si decide di cambiare la Y dell'ombra discendente (seconda misurazione pixel di drop-shadow o box-shadow), la modifica dell'altezza aiuterà per lo stesso motivo di cui sopra.

+0

Grazie per il vostro contributo! Vecchio davvero e una delle mie migliori domande qui. :) – NightMICU

+0

sostituire ** larghezza: 1; ** a ** larghezza: 1px; **) – Tegos

0
#div:before { 
content:""; 
position:absolute; 
width:100%; 
background:#fff; 
height:38px; 
top:1px; 
right:-5px; 
} 
+1

Spiegare in che modo il codice risponde alla domanda. –

Problemi correlati