Która z dwóch metod jest zgodna ze standardami W3C? Czy oba zachowują się zgodnie z oczekiwaniami w różnych przeglądarkach?
granica: brak;
granica: 0;
Która z dwóch metod jest zgodna ze standardami W3C? Czy oba zachowują się zgodnie z oczekiwaniami w różnych przeglądarkach?
granica: brak;
granica: 0;
Odpowiedzi:
Oba są ważne. To Twój wybór.
Wolę, border:0
ponieważ jest krótszy; Uważam to za łatwiejsze do odczytania. Możesz znaleźć none
bardziej czytelny. Żyjemy w świecie bardzo zdolnych postprocesorów CSS, więc polecam użyć tego, co wolisz, a następnie uruchomić go przez „kompresor”. Nie ma tu żadnej świętej wojny, o którą warto walczyć.
To powiedziawszy, jeśli piszesz odręcznie cały produkcyjny CSS, utrzymuję - pomimo narzekania w komentarzach - nie zaszkodzi być świadomym przepustowości. Użycie border:0
pozwoli zaoszczędzić nieskończenie małą przepustowość. Samo to się liczy bardzo niewiele, ale jeśli sprawisz, że każdy bajt się liczy , przyspieszysz swoją stronę.
Specyfikacje CSS2 są tutaj . Są one rozszerzone w CSS3, ale w żaden sposób ich nie dotyczą.
'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
Możesz użyć dowolnej kombinacji szerokości, stylu i koloru.
Tutaj 0
ustawia szerokość, none
styl. Mają ten sam wynik renderowania: nic nie jest wyświetlane.
border:none
jest jakoś lepiej, ale używanie tego, ponieważ twoje rozumowanie jest błędne.
Są one równoważne w działaniu , wskazując na różne skróty :
border: 0;
//short for..
border-width: 0;
I inni..
border: none;
//short for...
border-style: none;
Oba działają, po prostu wybierz jeden i idź z nim :)
border: 0;
jest ważny.
border: 0
NIE jest to skrót border-width: 0
. Zamiast tego, wersja skrócona zawsze ustawia wszystkie trzy właściwości: border-color
, border-style
i border-width
.
Jak powiedzieli inni, oba są ważne i załatwią sprawę. Nie jestem jednak w 100% przekonany, że są identyczne. Jeśli masz trochę kaskadowego stylu, teoretycznie mogą one dać różne wyniki, ponieważ skutecznie zastępują różne wartości.
Na przykład. Jeśli ustawisz „border: none;” a potem mają dwa różne style, które zastępują szerokość i styl ramki, jeden z nich coś zrobi, a drugi nie.
W poniższym przykładzie zarówno dla IE, jak i Firefoksa pierwsze dwa div testowe wychodzą bez ramki. Druga dwójka jest jednak inna, ponieważ pierwszy div w drugim bloku jest gładki, a drugi div w drugim bloku ma przerywaną granicę o średniej szerokości.
Mimo że oba są poprawne, być może trzeba mieć oko na swoje style, jeśli robią dużo kaskady i takie, jak myślę.
<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
zamiast border: 0
.
(Uwaga: ta odpowiedź została zaktualizowana w dniu 01.08.2014 r., aby była bardziej szczegółowa, dokładniejsza i aby dodać prezentację na żywo )
Zgodnie ze specyfikacją W3C CSS2.1 ( „Wartości pominięte są ustawiane na wartości początkowe” ), następujące właściwości są równoważne:
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>
Jeśli te reguły są najbardziej szczegółowe stosowane do granic elementu, wówczas ramki nie zostaną wyświetlone ani z powodu zerowej szerokości, ani z powodu hidden
/ none
style. Na pierwszy rzut oka te trzy zasady wyglądają równorzędnie. Zachowują się jednak na różne sposoby w połączeniu z innymi zasadami.
Gdy tabela jest renderowana za pomocą border-collapse: collapse
, wówczas każda renderowana granica jest dzielona między wiele elementów (granice wewnętrzne są dzielone jako komórki sąsiadujące; granice zewnętrzne są dzielone między komórkami i samą tabelą; ale również wiersze, grupy wierszy, kolumny i grupy kolumn dzielą granice ). Specyfikacja określa niektóre zasady rozwiązywania konfliktów granicznych :
Graniczy z
border-style
odhidden
nadrzędna wobec wszystkich innych spornych granic. […]Granice o stylu
none
mają najniższy priorytet. […]Jeśli żaden ze stylów nie istnieje
hidden
i przynajmniej jeden z nich nie jestnone
, wówczas wąskie granice są odrzucane na korzyść szerszych. […]Jeśli style obramowania różnią się tylko kolorem, […]
Zatem w kontekście tabeli border: hidden
(lub border-style: hidden
) będzie miał najwyższy priorytet i spowoduje ukrycie wspólnej granicy, bez względu na wszystko.
Na drugim końcu priorytetów border: none
(lub border-style: none
) mają najniższy priorytet, a następnie obramowanie o zerowej szerokości (ponieważ jest to najwęższe obramowanie). Oznacza to, że oblicza się wartość z border-style: none
, a obliczona wartość od border-width: 0
są zasadniczo takie same.
Ponieważ none
i 0
wpływają na różne właściwości ( border-style
i border-width
), będą zachowywać się inaczej, gdy bardziej szczegółowy przepis definiuje właśnie stylu lub po prostu szerokości. Zobacz na przykład odpowiedź Chrisa .
Chcesz zobaczyć wszystkie te przypadki na jednej stronie? Otwórz demo na żywo !
Za pomocą
border: none;
nie działa w niektórych wersjach IE. IE9 jest w porządku, ale we wcześniejszych wersjach wyświetla ramkę, nawet jeśli styl jest „none”. Doświadczyłem tego, gdy korzystałem z arkusza stylów drukowania, w którym nie chciałem obramowań pól wprowadzania.
border: 0;
wydaje się działać dobrze we wszystkich przeglądarkach.
Możesz po prostu użyć obu zgodnie ze specyfikacją uprzejmie dostarczoną przez Oli.
Zawsze używam border:0 none;
.
Chociaż ich oddzielne określenie nie jest szkodliwe, a niektóre przeglądarki szybciej analizują CSS, jeśli użyjesz starszych wywołań właściwości CSS1.
Chociaż border:0;
zwykle domyślnie ustawia styl ramki none
, zauważyłem jednak, że niektóre przeglądarki wymuszają swój domyślny styl ramki, który może dziwnie nadpisywać border:0;
.
Używam:
border: 0;
Od 8.5.4 w CSS 2.1 :
'granica'
Wartość: [<border-width> || <border-style> || <'border-top-color'>] | dziedziczyć
Każda z twoich metod wygląda dobrze.
Cóż, aby dokładnie zobaczyć różnicę border: 0
i border: none
możemy wykonać pewne eksperymenty.
Utwórzmy trzy divy, pierwszy, którego obramowanie można wyłączyć, ustawiając jego szerokość na zero, drugi, który można wyłączyć, ustawiając jego styl na none, a trzeci z obramowaniem, które można „wyłączyć”, ustawiając jego kolor do przezroczystego. Następnie spróbujmy efektu:
border: 0;
border: none;
border: transparent
styl graniczny: solidny! ważny; kolor obramowania: czerwony! ważne; border-width: 2px! ważne; kolor obramowania: czerwony! ważne; border-width: 2px! ważne; styl graniczny: solidny! ważny;
Moje wyniki były takie same w przypadku Firefoxa i Chrome:
border: 0;
Wygląda na to, aby ustawić szerokość 0
i styl ramki none
, ale nie zmieniać jej koloru;
border: none;
Wygląda na to, że zmienia tylko styl graniczny (na none
);
border: transparent;
Wydaje się zmienić kolor transparent
obramowania na i styl obramowania na none
;
Podczas gdy wyniki najprawdopodobniej będą takie same (bez obramowania), zero i zero technicznie odnoszą się do różnych rzeczy.
0 adresów szerokość ramki i brak adresu styl ramki. Oczywiście granica 0 szerokości nie istnieje, więc nie będzie miała stylu.
Jeśli jednak później w swoim arkuszu stylów zamierzasz to zmienić, naturalnie konkretnie zwróć się do jednego lub drugiego. Gdybym chciał teraz obramowania 3px, byłoby to bezpośrednio zastępujące obramowanie: 0 w odniesieniu do szerokości. Gdybym teraz chciał kropkowaną ramkę, byłaby to bezpośrednio nadrzędna ramka: brak w odniesieniu do stylizacji.
Najprostszym sposobem na usunięcie obramowania za pomocą css
border: 0;
NALEŻY KORZYSTAĆ Z GRANIC 0
Zgodnie z moją opinią i doświadczeniem sugeruję skorzystanie z opcji Border: 0; Istnieje ważny i bardzo dobry powód, ponieważ za każdym razem, gdy używamy obramowania: nie, rozumiem, że to działa, ale pomyśl o tym, że używamy obramowania, 1px, 2px, 3px itp. Mam na myśli, że nadajemy wartość naszej granicy ... px / em / rem w prawo, więc musimy użyć border: 0; do usuwania wartości granicy, ponieważ jak wiemy, gdy używamy tła: brak; oznacza to, że usuwamy z tła jakieś tło, które nie jest wartością, która jest czymś innym.
Dzięki