Quale dei due metodi è conforme agli standard W3C? Si comportano entrambi come previsto tra i browser?
bordo: nessuno;
bordo: 0;
Quale dei due metodi è conforme agli standard W3C? Si comportano entrambi come previsto tra i browser?
bordo: nessuno;
bordo: 0;
Risposte:
Entrambi sono validi È la vostra scelta.
Preferisco border:0
perché è più corto; Lo trovo più facile da leggere. Potresti trovare none
più leggibile. Viviamo in un mondo di post-processori CSS molto capaci, quindi ti consiglio di usare quello che preferisci e poi eseguirlo attraverso un "compressore". Non c'è guerra santa degna di essere combattuta qui.
Detto questo, se stai scrivendo a mano tutto il tuo CSS di produzione, sostengo - nonostante il brontolio nei commenti - non fa male essere consapevoli della larghezza di banda. L'uso border:0
consente di risparmiare una quantità infinitesimale di larghezza di banda. Di per sé conta poco, ma se fai ogni byte conta , renderai il tuo sito più veloce.
Le specifiche CSS2 sono qui . Questi sono estesi in CSS3 ma non sono in alcun modo rilevanti per questo.
'border'
Value: [ <border-width> || <border-style> || <'border-top-color'> ] | inherit
Initial: see individual properties
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual
Computed value: see individual properties
Puoi usare qualsiasi combinazione di larghezza, stile e colore.
Qui, 0
imposta la larghezza, none
lo stile. Hanno lo stesso risultato di rendering: non viene mostrato nulla.
border:none
sia in qualche modo migliore, ma usare questo come ragionamento è errato.
Sono equivalenti in effetti , indicando diverse scorciatoie :
border: 0;
//short for..
border-width: 0;
E l'altro..
border: none;
//short for...
border-style: none;
Entrambi funzionano, scegline uno e prosegui :)
border: 0;
è valido.
border: 0
NON è la scorciatoia per border-width: 0
. Invece, la versione corta imposta sempre tutte le tre proprietà: border-color
, border-style
e border-width
.
Come altri hanno già detto, entrambi sono validi e faranno il trucco. Non sono convinto al 100% che siano identici però. Se hai in corso uno stile a cascata, in teoria potrebbero produrre risultati diversi dal momento che stanno effettivamente scavalcando valori diversi.
Per esempio. Se si imposta "border: none;" e poi in seguito hanno due stili diversi che sovrascrivono la larghezza e lo stile del bordo, quindi uno farà qualcosa e l'altro no.
Nell'esempio seguente sia su IE che su firefox i primi due test div non hanno bordi. I secondi due tuttavia sono diversi con il primo div nel secondo blocco che è semplice e il secondo div nel secondo blocco con un bordo tratteggiato di larghezza media.
Quindi, sebbene siano entrambi validi, potrebbe essere necessario tenere d'occhio i tuoi stili se fanno molto a cascata e simili come penso.
<html>
<head>
<style>
div {border: 1px solid black; margin: 1em;}
.zerotest div {border: 0;}
.nonetest div {border: none;}
div.setwidth {border-width: 3px;}
div.setstyle {border-style: dashed;}
</style>
</head>
<body>
<div class="zerotest">
<div class="setwidth">
"Border: 0" and "border-width: 3px"
</div>
<div class="setstyle">
"Border: 0" and "border-style: dashed"
</div>
</div>
<div class="nonetest">
<div class="setwidth">
"Border: none" and "border-width: 3px"
</div>
<div class="setstyle">
"Border: none" and "border-style: dashed"
</div>
</div>
</body>
</html>
border: none
invece di border: 0
.
(nota: questa risposta è stata aggiornata il 01-08-2014 per renderla più dettagliata, più accurata e per aggiungere una demo dal vivo )
Secondo la specifica CSS2.1 del W3C ( "I valori omessi sono impostati sui loro valori iniziali" ), le seguenti proprietà sono equivalenti:
border: hidden; border-style: hidden;
border-width: medium;
border-color: <the same as 'color' property>
border: none; border-style: none;
border-width: medium;
border-color: <the same as 'color' property>
border: 0; border-style: none;
border-width: 0;
border-color: <the same as 'color' property>
Se queste regole sono le più specifiche applicate ai bordi di un elemento, i bordi non verranno mostrati, a causa della larghezza zero o a causa di hidden
/none
style. Quindi, a prima vista, queste tre regole sembrano equivalenti. Tuttavia, si comportano in modi diversi se combinati con altre regole.
Quando viene eseguito il rendering di una tabella utilizzando border-collapse: collapse
, ogni bordo renderizzato viene condiviso tra più elementi (i bordi interni vengono condivisi tra celle adiacenti; i bordi esterni vengono condivisi tra le celle e la tabella stessa; ma anche righe, gruppi di righe, colonne e gruppi di colonne condividono i bordi ). La specifica definisce alcune regole per la risoluzione dei conflitti di frontiera :
I bordi con il
border-style
dihidden
hanno la precedenza su tutti gli altri confini in conflitto. [...]I bordi con uno stile
none
hanno la priorità più bassa. [...]Se nessuno degli stili lo è
hidden
e almeno uno di essi non lo ènone
, i bordi stretti vengono scartati a favore di quelli più ampi. [...]Se gli stili del bordo differiscono solo per il colore, […]
Quindi, in un contesto di tabella, border: hidden
(o border-style: hidden
) avrà la massima priorità e renderà nascosto il bordo condiviso, qualunque cosa accada.
All'altra estremità delle priorità, border: none
(o border-style: none
) hanno la priorità più bassa, seguita dal bordo a larghezza zero (perché è il bordo più stretto). Ciò significa che un valore calcolato di border-style: none
e un valore calcolato di border-width: 0
sono essenzialmente gli stessi.
Poiché none
e 0
influenzano proprietà diverse ( border-style
e border-width
), si comporteranno in modo diverso quando una regola più specifica definisce solo lo stile o solo la larghezza. Vedi la risposta di Chris per un esempio.
Vuoi vedere tutti questi casi in un'unica pagina? Apri la demo live !
utilizzando
border: none;
non funziona in alcune versioni di IE. IE9 va bene, ma nelle versioni precedenti mostra il bordo anche quando lo stile è "nessuno". L'ho sperimentato durante l'utilizzo di un foglio di stile di stampa in cui non volevo bordi sulle caselle di input.
border: 0;
sembra funzionare bene in tutti i browser.
Puoi semplicemente utilizzare entrambi secondo le specifiche gentilmente fornite da Oli.
Lo uso sempre border:0 none;
.
Sebbene non ci sia nulla di male nel specificarli separatamente e alcuni browser analizzeranno il CSS più velocemente se si utilizzano le chiamate di proprietà CSS1 legacy.
Anche se border:0;
normalmente lo stile del bordo viene automaticamente impostato su predefinito none
, ho comunque notato alcuni browser che applicano il loro stile del bordo predefinito che può stranamente sovrascrivere border:0;
.
Io uso:
border: 0;
Da 8.5.4 in CSS 2.1 :
'confine'
Valore: [<border-width> || <border-style> || <'border-top-color'>] | ereditare
Quindi uno dei tuoi metodi sembra a posto.
Bene, per vedere esattamente la differenza tra border: 0
e border: none
possiamo fare alcuni esperimenti.
Consente di creare tre div, il primo il cui bordo può essere disabilitato solo impostando la sua larghezza su zero, il secondo che può essere disabilitato solo impostando il suo stile su nessuno e un terzo con un bordo che può essere "disabilitato" solo impostando il suo colore a trasparente. Quindi proviamo l'effetto di:
border: 0;
border: none;
border: transparent
stile bordo: solido! importante; colore del bordo: rosso! importante; bordo-larghezza: 2px! importante; colore del bordo: rosso! importante; bordo-larghezza: 2px! importante; stile bordo: solido! importante;
I miei risultati sono stati gli stessi in Firefox e Chrome:
border: 0;
Sembra impostare la larghezza del 0
bordo su e lo stile del bordo sunone
, ma non cambiare il colore del bordo;
border: none;
Sembra cambiare solo lo stile del bordo (in none
);
border: transparent;
Sembra cambiare il colore del transparent
bordo in e lo stile del bordo in none
;
Mentre i risultati saranno molto probabilmente gli stessi (nessun bordo), lo 0 e nessuno stanno affrontando tecnicamente cose diverse.
0 indirizzi larghezza bordo e nessuno indirizzo stile bordo. Ovviamente un bordo di larghezza 0 è inesistente, quindi non avrà stile.
Tuttavia, se in seguito nel tuo foglio di stile hai intenzione di sovrascriverlo, ti rivolgeresti naturalmente in modo specifico l'uno o l'altro. Se ora volessi un bordo di 3px, quello sarebbe il bordo di sovrascrittura diretta: 0 per quanto riguarda la larghezza. Se ora volessi un bordo tratteggiato, ciò significherebbe sovrascrivere direttamente il bordo: nessuno per quanto riguarda lo stile.
Il modo più semplice per rimuovere il bordo con css
border: 0;
DOVREBBE USARE IL CONFINE 0
Secondo la mia opinione ed esperienza, suggerirei di usare Border: 0; C'è un motivo valido e molto valido perché ogni volta che utilizziamo il bordo: nessuno, capisco che funzioni ma penso che stiamo usando un bordo, 1px, 2px, 3px ecc. Voglio dire, stiamo dando il valore che il nostro bordo è ... px / em / rem giusto quindi dobbiamo usare border: 0; per rimuovere il valore del bordo perché come sappiamo quando usiamo lo sfondo: none; significa che stiamo rimuovendo lo sfondo un po 'di sfondo che non è un valore che è qualcos'altro.
Grazie