Welche der beiden Methoden entspricht den W3C-Standards? Verhalten sich beide in allen Browsern wie erwartet?
Grenze: keine;
Rand: 0;
Welche der beiden Methoden entspricht den W3C-Standards? Verhalten sich beide in allen Browsern wie erwartet?
Grenze: keine;
Rand: 0;
Antworten:
Beide sind gültig. Es ist deine Wahl.
Ich bevorzuge, border:0
weil es kürzer ist; Ich finde das leichter zu lesen. Möglicherweise finden Sie none
besser lesbar. Wir leben in einer Welt sehr leistungsfähiger CSS-Postprozessoren. Ich würde Ihnen daher empfehlen, alles zu verwenden, was Sie bevorzugen, und es dann über einen "Kompressor" laufen zu lassen. Hier gibt es keinen heiligen Krieg, der es wert ist, geführt zu werden.
Abgesehen davon, wenn Sie Ihr gesamtes Produktions-CSS von Hand schreiben, schadet es - trotz des Murrens in den Kommentaren - nicht, bandbreitenbewusst zu sein. Durch border:0
die Verwendung wird eine infinitesimale Menge an Bandbreite gespart. Das allein zählt nur sehr wenig, aber wenn Sie jedes Byte zählen lassen , wird Ihre Website schneller.
Die CSS2-Spezifikationen finden Sie hier . Diese werden in CSS3 erweitert, sind jedoch in keiner Weise relevant.
'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
Sie können eine beliebige Kombination aus Breite, Stil und Farbe verwenden.
Hier 0
legt die Breite none
den Stil fest. Sie haben das gleiche Rendering-Ergebnis: Es wird nichts angezeigt.
border:none
es irgendwie besser finde , aber dies als Argumentation zu verwenden, ist falsch.
Sie sind in ihrer Wirkung gleichwertig und verweisen auf verschiedene Verknüpfungen :
border: 0;
//short for..
border-width: 0;
Und der andere..
border: none;
//short for...
border-style: none;
Beide funktionieren, wählen Sie einfach eine aus und machen Sie mit :)
border: 0;
gültig ist.
border: 0
ist NICHT die Abkürzung für border-width: 0
. Stattdessen legt die Kurzversion immer alle drei Eigenschaften fest : border-color
, border-style
und border-width
.
Wie andere gesagt haben, sind beide gültig und werden den Trick tun. Ich bin jedoch nicht zu 100% davon überzeugt, dass sie identisch sind. Wenn eine Stilkaskadierung stattfindet, können diese theoretisch zu unterschiedlichen Ergebnissen führen, da sie unterschiedliche Werte effektiv überschreiben.
Zum Beispiel. Wenn Sie "border: none" setzen; und später zwei verschiedene Stile haben, die die Randbreite und den Stil überschreiben, dann wird einer etwas tun und der andere nicht.
Im folgenden Beispiel für IE und Firefox werden die ersten beiden Test-Divs ohne Rand angezeigt. Die zweiten beiden unterscheiden sich jedoch, wobei der erste Teil im zweiten Block einfach ist und der zweite Teil im zweiten Block einen gestrichelten Rand mittlerer Breite aufweist.
Obwohl beide gültig sind, müssen Sie möglicherweise Ihre Stile im Auge behalten, wenn sie viel kaskadieren und so, wie ich denke.
<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
stattdessen verwenden border: 0
.
(Hinweis: Diese Antwort wurde am 01.08.2014 aktualisiert, um sie detaillierter und genauer zu gestalten und eine Live-Demo hinzuzufügen. )
Gemäß der W3C CSS2.1-Spezifikation ( „Ausgelassene Werte werden auf ihre Anfangswerte gesetzt“ ) sind die folgenden Eigenschaften äquivalent:
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>
Wenn diese Regeln die spezifischsten sind, die auf die Ränder eines Elements angewendet werden, werden die Ränder weder wegen der Breite Null noch wegen hidden
/ none
style angezeigt . Auf den ersten Blick sehen diese drei Regeln also gleich aus. In Kombination mit anderen Regeln verhalten sie sich jedoch unterschiedlich.
Wenn eine Tabelle mit gerendert wird border-collapse: collapse
, wird jeder gerenderte Rand von mehreren Elementen gemeinsam genutzt (innere Ränder werden als Nachbarzellen geteilt, äußere Ränder werden zwischen Zellen und der Tabelle selbst geteilt, aber auch Zeilen, Zeilengruppen, Spalten und Spaltengruppen teilen Ränder ). Die Spezifikation definiert einige Regeln für die Lösung von Grenzkonflikten :
Grenzen mit dem
border-style
von habenhidden
Vorrang vor allen anderen widersprüchlichen Grenzen. […]Rahmen mit einem Stil von
none
haben die niedrigste Priorität. […]Wenn keiner der Stile vorhanden ist
hidden
und mindestens einer nichtnone
, werden schmale Ränder zugunsten breiterer verworfen. […]Wenn sich Randstile nur in der Farbe unterscheiden, […]
In einem Tabellenkontext hat border: hidden
(oder border-style: hidden
) also die höchste Priorität und macht den gemeinsamen Rand verborgen, egal was passiert.
Am anderen Ende der Prioritäten haben border: none
(oder border-style: none
) die niedrigste Priorität, gefolgt von der Grenze mit der Breite Null (da es sich um die engste Grenze handelt). Dies bedeutet, dass ein berechneter Wert von border-style: none
und ein berechneter Wert von border-width: 0
im Wesentlichen gleich sind.
Da none
und sich 0
auf verschiedene Eigenschaften ( border-style
und border-width
) auswirken , verhalten sie sich unterschiedlich, wenn eine spezifischere Regel nur den Stil oder nur die Breite definiert. Siehe Chris Antwort für ein Beispiel.
Möchten Sie alle diese Fälle auf einer einzigen Seite sehen? Öffnen Sie die Live-Demo !
Verwenden von
border: none;
funktioniert in einigen Versionen von IE nicht. IE9 ist in Ordnung, aber in früheren Versionen wird der Rahmen angezeigt, auch wenn der Stil "keine" ist. Ich habe dies erlebt, als ich ein Druck-Stylesheet verwendet habe, bei dem ich keine Rahmen für die Eingabefelder haben wollte.
border: 0;
scheint in allen Browsern gut zu funktionieren.
Sie können einfach beide gemäß der von Oli freundlicherweise angegebenen Spezifikation verwenden.
Ich benutze immer border:0 none;
.
Es schadet jedoch nicht, sie separat anzugeben, und einige Browser analysieren das CSS schneller, wenn Sie die alten CSS1-Eigenschaftsaufrufe verwenden.
Obwohl border:0;
normalerweise der Rahmenstil standardmäßig verwendet wird none
, habe ich jedoch festgestellt, dass einige Browser ihren Standardrahmenstil erzwingen, der seltsamerweise überschrieben werden kann border:0;
.
Ich benutze:
border: 0;
Ab 8.5.4 in CSS 2.1 :
'Rand'
Wert: [<Breitenbreite> || <Bordstil> || <'border-top-color'>] | erben
Jede Ihrer Methoden sieht also gut aus.
Nun, um zu sehen , genau den Unterschied zwischen border: 0
und border: none
wir können einige Experimente machen.
Erstellen wir drei Divs, einen, dessen Rand nur durch Setzen der Breite auf Null deaktiviert werden kann, den zweiten, der nur durch Setzen des Stils auf "Null" deaktiviert werden kann, und einen dritten mit einem Rand, der nur durch Setzen des "Rahmens" deaktiviert werden kann Farbe zu transparent. Dann versuchen wir den Effekt von:
border: 0;
border: none;
border: transparent
Randstil: solide! wichtig; Randfarbe: rot! wichtig; Randbreite: 2px! wichtig; Randfarbe: rot! wichtig; Randbreite: 2px! wichtig; Randstil: solide! wichtig;
Meine Ergebnisse waren sowohl bei Firefox als auch bei Chrom gleich:
border: 0;
Scheint die Rahmenbreite auf 0
und den Rahmenstil auf zu setzen none
, aber die Rahmenfarbe nicht zu ändern;
border: none;
Scheint nur den Rahmenstil zu ändern (zu none
);
border: transparent;
Scheint die Rahmenfarbe in transparent
und den Rahmenstil in zu ändern none
;
Während die Ergebnisse höchstwahrscheinlich gleich sind (kein Rand), sprechen die 0 und keine technisch unterschiedliche Dinge an.
0 adressiert die Randbreite und keine adressiert den Randstil. Offensichtlich ist ein Rand mit einer Breite von 0 nicht vorhanden und hat daher keinen Stil.
Wenn Sie dies jedoch später in Ihrem Stylesheet überschreiben möchten, würden Sie sich natürlich speziell mit dem einen oder anderen befassen. Wenn ich jetzt einen 3px-Rand wollte, würde dieser den Rand direkt überschreiben: 0 in Bezug auf die Breite. Wenn ich jetzt einen gepunkteten Rand haben wollte, würde dieser den Rand direkt überschreiben: keinen in Bezug auf das Styling.
Einfachster Weg, um Rand mit CSS zu entfernen
border: 0;
WIR SOLLTEN GRENZE 0 VERWENDEN
Nach meiner Meinung und Erfahrung würde ich vorschlagen, bitte Border: 0 zu verwenden; Es gibt einen gültigen und sehr guten Grund, denn wenn wir einen Rand verwenden: Keiner, ich verstehe, dass es funktioniert, aber denken Sie daran, dass wir einen Rand verwenden, 1px, 2px, 3px usw. Ich meine, wir geben den Wert an, den unser Rand ist ... px / em / rem richtig, also müssen wir border verwenden: 0; zum Entfernen des Randwerts, weil, wie wir wissen, wenn wir Hintergrund verwenden: keine; Es bedeutet, dass wir den Hintergrund entfernen, wenn es sich nicht um einen anderen Wert handelt.
Vielen Dank