background: none vs background: transparent qual è la differenza?


119

C'è una differenza tra queste due proprietà CSS:

background: none;
background: transparent;
  1. Sono entrambi validi?
  2. Quale dovrebbe essere usato e perché?

Risposte:


111

Non c'è differenza tra loro.

Se non specifichi un valore per nessuna delle mezza dozzina di proprietà che backgroundè un'abbreviazione per, allora viene impostato sul suo valore predefinito. nonee transparentsono le impostazioni predefinite.

Uno imposta esplicitamente il background-imagea nonee imposta implicitamente il background-colora transparent. L'altro è il contrario.


2
@herman - No, non possono. Questo è lo stesso di background-color: transparent; background-image: none;. Un foglio di stile utente potrebbe sovrascrivere uno o entrambi questi valori, ma lo farà esattamente come se background-color: transparent; background-image: none;fosse stato scritto esplicitamente.
Quentin

Quindi, stai dicendo che il valore della proprietà "iniziale" (che è usato per proprietà non specificate) sovrascrive anche i fogli di stile del programma utente? Hai qualche referenza?
Herman

I fogli di stile del programma utente implementano la specifica, che definisce il valore della proprietà iniziale di quelle proprietà come transparente none.
Quentin

63

Come informazioni aggiuntive sulla risposta di @Quentin , e come dice giustamente, la backgroundproprietà CSS stessa, è una scorciatoia per:

background-color
background-image
background-repeat
background-attachment
background-position

Ciò significa che puoi raggruppare tutti gli stili in uno, come:

background: red url(../img.jpg) 0 0 no-repeat fixed;

Questo sarebbe (in questo esempio):

background-color: red;
background-image: url(../img.jpg);
background-repeat: no-repeat;
background-attachment: fixed;
background-position: 0 0;

Quindi ... quando imposti: background:none;
stai dicendo che tutte le proprietà dello sfondo sono impostate su nessuno ...
Stai dicendo questo background-image: none;e tutte le altre allo initialstato (poiché non vengono dichiarate).
Quindi background:none;è:

background-color: initial;
background-image: none;
background-repeat: initial;
background-attachment: initial;
background-position: initial;

Ora, quando definisci solo il colore (nel tuo caso transparent), in pratica stai dicendo:

background-color: transparent;
background-image: initial;
background-repeat: initial;
background-attachment: initial;
background-position: initial;

Ripeto, come dice giustamente @Quentin, i valori default transparente in questo caso sono gli stessi, quindi nel tuo esempio e per la tua domanda originale, No, non c'è differenza tra loro.none

Ma! .. se dici background:noneVs background:redallora sì ... c'è una grande differenza, come ho detto, il primo imposterebbe tutte le proprietà a none/defaulte il secondo, cambierà solo il colore rimarrà il resto nel suo defaultstato.

Quindi in breve:

Risposta breve : No, non c'è alcuna differenza (nel tuo esempio e nella domanda originale)
Risposta lunga : Sì, c'è una grande differenza, ma dipende direttamente dalle proprietà assegnate all'attributo.


Upd1: valore iniziale (aka default)

Valore iniziale la concatenazione dei valori iniziali delle sue proprietà a mano:

background-image: none
background-position: 0% 0%
background-size: auto auto
background-repeat: repeat
background-origin: padding-box
background-style: is itself a shorthand, its initial value is the concatenation of its own longhand properties
background-clip: border-box
background-color: transparent

Vedi più backgrounddescrizioni qui


Upd2: chiarire meglio le background:none;specifiche.


thx for answer quali sono i valori predefiniti per background-image, background repeat ...? dipendono dal browser? Se capisco la tua spiegazione, è meglio usare lo sfondo: nessuno quindi nessuno dei valori è impostato di default?
web-tiki

Hai provato quello che pubblichi ?? Tutti i valori sono impostati su nessuno? Controlla consolesu questa demo jsfiddle.net/dnzy2/6
DaniP

quando si imposta: background: nessuno; stai dicendo che tutte le proprietà dello sfondo sono impostate su nessuno ... Non è un modo per dire che è sbagliato
DaniP

2
+1, questa deve essere la risposta accettata (se è corretta).
Pacerier

7

Per completare le altre risposte: se vuoi ripristinare tutte le proprietà dello sfondo al loro valore iniziale (che include background-color: transparente background-image: none) senza specificare esplicitamente alcun valore come transparento none, puoi farlo scrivendo:

background: initial;

5
Fai attenzione, IE non supporta initial. vedi Can I Use e MDN
chharvey
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.