Phương pháp nào trong hai phương pháp phù hợp với tiêu chuẩn W3C? Cả hai có hành xử như mong đợi trên các trình duyệt?
biên giới: không có;
viền: 0;
Phương pháp nào trong hai phương pháp phù hợp với tiêu chuẩn W3C? Cả hai có hành xử như mong đợi trên các trình duyệt?
biên giới: không có;
viền: 0;
Câu trả lời:
Cả hai đều hợp lệ. Đó là lựa chọn của bạn.
Tôi thích border:0
bởi vì nó ngắn hơn; Tôi thấy rằng dễ đọc hơn. Bạn có thể tìm thấy none
dễ đọc hơn. Chúng ta đang sống trong một thế giới của các bộ xử lý hậu kỳ CSS rất có khả năng vì vậy tôi khuyên bạn nên sử dụng bất cứ thứ gì bạn thích và sau đó chạy nó thông qua một "máy nén". Không có chiến tranh thần thánh nào đáng để chiến đấu ở đây.
Như đã nói, nếu bạn đang viết tay tất cả CSS sản xuất của mình, tôi vẫn duy trì sự càu nhàu trong các bình luận. Sử dụng border:0
sẽ tiết kiệm một lượng băng thông vô hạn. Bản thân nó chỉ tính rất ít nhưng nếu bạn thực hiện mỗi byte , bạn sẽ làm cho trang web của mình nhanh hơn.
Thông số kỹ thuật CSS2 có ở đây . Chúng được mở rộng trong CSS3 nhưng không liên quan đến điều này.
'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
Bạn có thể sử dụng bất kỳ sự kết hợp của chiều rộng, phong cách và màu sắc.
Ở đây, 0
đặt chiều rộng, none
kiểu dáng. Chúng có cùng kết quả hiển thị: không có gì được hiển thị.
border:none
là bằng cách nào đó tốt hơn, nhưng sử dụng điều này như lý luận của bạn là bị lỗi.
Chúng có hiệu lực tương đương , chỉ ra các phím tắt khác nhau :
border: 0;
//short for..
border-width: 0;
Và điều khác..
border: none;
//short for...
border-style: none;
Cả hai công việc, chỉ cần chọn một và đi với nó :)
border: 0;
là hợp lệ.
border: 0
KHÔNG phải là phím tắt cho border-width: 0
. Thay vào đó, phiên bản ngắn luôn đặt cả ba đặc tính: border-color
, border-style
và border-width
.
Như những người khác đã nói cả hai đều hợp lệ và sẽ thực hiện các mẹo. Tôi không tin chắc 100% rằng chúng giống hệt nhau. Nếu bạn có một số tầng phong cách đang diễn ra thì về lý thuyết họ có thể tạo ra các kết quả khác nhau vì chúng có hiệu quả ghi đè các giá trị khác nhau.
Ví dụ. Nếu bạn đặt "đường viền: không có;" và sau đó có hai kiểu khác nhau ghi đè lên chiều rộng và kiểu thì đường viền sẽ làm một cái gì đó còn kiểu kia thì không.
Trong ví dụ sau trên cả IE và firefox, hai div thử nghiệm đầu tiên xuất hiện không có viền. Tuy nhiên, hai thứ hai khác nhau với div thứ nhất trong khối thứ hai là đơn giản và div thứ hai trong khối thứ hai có đường viền đứt có chiều rộng trung bình.
Vì vậy, mặc dù cả hai đều hợp lệ, bạn có thể cần để mắt đến phong cách của mình nếu chúng làm nhiều tầng và như tôi nghĩ.
<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
thay vì border: 0
.
(lưu ý: câu trả lời này đã được cập nhật vào ngày 2014-08-01 để làm cho nó chi tiết hơn, chính xác hơn và để thêm bản demo trực tiếp )
Theo thông số kỹ thuật W3C CSS2.1 ( các giá trị Bỏ qua được đặt thành giá trị ban đầu của họ ), các thuộc tính sau là tương đương:
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>
Nếu các quy tắc này là các quy tắc cụ thể nhất được áp dụng cho các đường viền của một phần tử, thì các đường viền sẽ không được hiển thị, vì độ rộng bằng không hoặc do hidden
/ none
kiểu. Vì vậy, ở cái nhìn đầu tiên, ba quy tắc này trông tương đương nhau. Tuy nhiên, họ hành xử theo những cách khác nhau khi kết hợp với các quy tắc khác.
Khi một bảng được hiển thị bằng cách sử dụng border-collapse: collapse
, thì mỗi đường viền được kết xuất được chia sẻ giữa nhiều phần tử (viền bên trong được chia sẻ giữa các ô lân cận; viền ngoài được chia sẻ giữa các ô và chính bảng đó, nhưng cũng có các hàng, nhóm hàng, cột và nhóm cột chia sẻ ). Thông số kỹ thuật xác định một số quy tắc để giải quyết xung đột biên giới :
Biên giới với
border-style
cáchidden
ưu tiên hơn tất cả các biên giới mâu thuẫn khác. [Càng]Biên giới với một phong cách
none
có mức độ ưu tiên thấp nhất. [Càng]Nếu không có kiểu nào trong số đó
hidden
và ít nhất một trong số chúng không cónone
, thì các đường viền hẹp sẽ bị loại bỏ theo hướng rộng hơn. [Càng]Nếu các kiểu viền chỉ khác nhau về màu sắc, [thì]
Vì vậy, trong ngữ cảnh bảng, border: hidden
(hoặc border-style: hidden
) sẽ có mức ưu tiên cao nhất và sẽ làm cho đường viền chia sẻ bị ẩn đi, bất kể điều gì.
Ở đầu bên kia của các ưu tiên, border: none
(hoặc border-style: none
) có mức ưu tiên thấp nhất, theo sau là đường viền có độ rộng bằng không (vì đây là đường viền hẹp nhất). Điều này có nghĩa rằng một giá trị tính toán của border-style: none
và một giá trị tính toán của border-width: 0
cơ bản là giống nhau.
Vì none
và 0
ảnh hưởng đến các thuộc tính khác nhau ( border-style
và border-width
), chúng sẽ hành xử khác nhau khi một quy tắc cụ thể hơn xác định chỉ kiểu hoặc chỉ chiều rộng. Xem Chris trả lời cho một ví dụ.
Bạn muốn xem tất cả các trường hợp trong một trang duy nhất? Mở bản demo trực tiếp !
Sử dụng
border: none;
không hoạt động trong một số phiên bản IE. IE9 vẫn ổn nhưng trong các phiên bản trước, nó sẽ hiển thị đường viền ngay cả khi kiểu "không". Tôi đã trải nghiệm điều này khi sử dụng biểu định kiểu in mà tôi không muốn viền trên các hộp nhập.
border: 0;
dường như hoạt động tốt trong tất cả các trình duyệt.
Bạn chỉ có thể sử dụng cả hai theo thông số kỹ thuật được cung cấp bởi Oli.
Tôi luôn luôn sử dụng border:0 none;
.
Mặc dù không có hại trong việc chỉ định chúng một cách riêng biệt và một số trình duyệt sẽ phân tích CSS nhanh hơn nếu bạn sử dụng các lệnh gọi thuộc tính CSS1 cũ.
Mặc dù border:0;
thông thường sẽ mặc định kiểu đường viền thành none
, tuy nhiên tôi đã nhận thấy một số trình duyệt thực thi kiểu đường viền mặc định của chúng có thể ghi đè lên một cách kỳ lạ border:0;
.
Tôi sử dụng:
border: 0;
Từ 8.5.4 trong CSS 2.1 :
'biên giới'
Giá trị: [<width-width> || <kiểu viền> || <'viền trên cùng'>] | thừa kế
Vì vậy, một trong những phương pháp của bạn trông tốt.
Chà, để thấy chính xác sự khác biệt giữa border: 0
và border: none
chúng ta có thể thực hiện một số thí nghiệm.
Cho phép tạo ba div, cái đầu tiên có đường viền chỉ có thể bị vô hiệu hóa bằng cách đặt chiều rộng của nó thành 0, cái thứ hai chỉ có thể bị vô hiệu hóa bằng cách đặt kiểu của nó thành không, và thứ ba với đường viền chỉ có thể được "vô hiệu hóa" bằng cách đặt màu trong suốt. Sau đó, hãy thử hiệu ứng của:
border: 0;
border: none;
border: transparent
kiểu biên giới: vững chắc! quan trọng; viền màu: đỏ! quan trọng; đường viền rộng: 2px! quan trọng; viền màu: đỏ! quan trọng; đường viền rộng: 2px! quan trọng; kiểu biên giới: vững chắc! quan trọng;
Kết quả của tôi giống nhau ở cả firefox và chrome:
border: 0;
Có vẻ như đặt chiều rộng 0
đường viền thành và kiểu đường viền thành none
, nhưng không thay đổi màu đường viền;
border: none;
Có vẻ như chỉ thay đổi kiểu viền (sang none
);
border: transparent;
Có vẻ như thay đổi màu transparent
đường viền thành và kiểu đường viền thành none
;
Mặc dù kết quả rất có thể giống nhau (không có đường viền), nhưng 0 và không có gì giải quyết về mặt kỹ thuật những thứ khác nhau.
0 địa chỉ đường viền rộng và không có địa chỉ đường viền kiểu. Rõ ràng một đường viền có chiều rộng 0 là không tồn tại do đó sẽ không có kiểu dáng.
Tuy nhiên, nếu sau này trong biểu định kiểu của bạn, bạn có ý định ghi đè lên biểu đồ này, bạn sẽ tự nhiên giải quyết cụ thể cái này hoặc cái khác. Nếu bây giờ tôi muốn có viền 3px, thì đó sẽ là phần ghi đè trực tiếp: 0 liên quan đến chiều rộng. Nếu bây giờ tôi muốn có một đường viền chấm, đó sẽ là đường viền trực tiếp ghi đè: không liên quan đến kiểu dáng.
CHÚNG TÔI NÊN SỬ DỤNG BIÊN GIỚI 0
Theo ý kiến và kinh nghiệm của tôi, tôi sẽ đề nghị vui lòng sử dụng Border: 0; Có một lý do hợp lệ và rất tốt bởi vì bất cứ khi nào chúng tôi sử dụng đường viền: không, tôi hiểu nó hoạt động nhưng hãy nghĩ về việc chúng tôi đang sử dụng đường viền, 1px, 2px, 3px, v.v. Ý tôi là chúng tôi đang đưa ra giá trị đường viền của chúng tôi là ... px / em / rem phải vì vậy chúng ta cần sử dụng đường viền: 0; để loại bỏ giá trị biên bởi vì như chúng ta biết khi chúng ta sử dụng nền: none; nó có nghĩa là chúng tôi đang loại bỏ nền một số nền không phải là một giá trị mà là một cái gì đó khác.
Cảm ơn
Theo quan điểm của tôi,
border:none
đang hoạt động nhưng không hợp lệ tiêu chuẩn w3c
vì vậy tốt hơn chúng ta có thể sử dụng border:0;
border: none
.