2012-06-04 75 views
9

Tôi có một bảng có mọi đường viền được đặt thành độ rộng 1px. Tôi muốn đường viền trên cùng, bên trái và dưới cùng có màu đen và đường viền phải màu trắng. Vì vậy, tôi đã sử dụng mã này cssThứ tự màu đường viền

border-right-color: white;  
border-left-color: black; 
border-top-color: black; 
border-bottom-color: black; 
border: solid 1px; 

vấn đề này được đưa ra trong IE9, nơi góc trên bên phải điểm ảnh sẽ có màu trắng, nhưng góc dưới bên phải sẽ có màu đen.

tôi nghi ngờ vấn đề xuất phát hình thành cách IE9 tổ chức lại phong cách, bởi vì khi tôi nhìn vào css của bảng của tôi trong những công cụ developper console, nó được ra lệnh như thế này:

border-top-color: black; 
border-right-color: white; 
border-bottom-color: black; 
border-left-color: black; 
border-top-width: 1px; 
border-right-width: 1px; 
border-bottom-width: 1px; 
border-left-width: 1px; 
border-top-style: solid; 
border-right-style: solid; 
border-bottom-style: solid; 
border-left-style: solid; 

này hãy để tôi nghĩ có thể, thứ tự được sử dụng để xác định màu sắc làm cho đường viền trên có màu đen, sau đó viền phải có màu trắng (ghi đè góc trên cùng bên phải), sau đó viền dưới có màu đen (ghi đè góc dưới cùng bên phải) và finnaly đường viền trái có màu trái.

Vấn đề là, trên nền trắng, đường viền trên cùng và dưới cùng không có cùng chiều dài (bằng một pixel). Nó có thể không nhiều, nhưng tôi cần hai biên giới đó để phù hợp với các dòng khác trên trang của tôi.

Vì vậy, làm thế nào tôi có thể sửa lỗi này? Nó thực sự là về thứ tự các đường viền được tô màu, và nếu có, làm thế nào tôi có thể thay đổi nó?

Trả lời

4

Vì vậy, ở đây là, khá đơn giản trong thực tế

border: solid 1px black; 
border-right-style: hidden; 

Bằng cách đưa ra biên giới đúng một phong cách ẩn, nó hoạt động hoàn hảo bây giờ. Vấn đề là một đường viền có kiểu ẩn sẽ đi trước trên bất kỳ kiểu nào khác cho các đường viền bị sập hoặc nằm ngang.

+0

Trình duyệt vẽ một đường chéo fom góc ngoài vào góc trong, nơi xảy ra thay đổi màu. Nếu chiều rộng đường viền được đặt thành 1px, trình duyệt không thể chia nhỏ để IE chọn pixel trên cùng bên phải là màu trắng, FF - dưới cùng bên phải. Thông số CSS3 không cho biết trình duyệt nên xử lý các kết nối như thế nào. Bằng cách loại bỏ đường viền bên phải, đường chéo không được hiển thị. Bạn có thể thấy nó tốt hơn nếu bạn đặt chiều cao: 0; và cố gắng tạo một số hình tam giác CSS. – jasssonpet

+0

'border-right-style: hidden' về cơ bản là" border-right-style: none' cho các bảng không phải là bảng. Xem liệu 'border-right-color: transparent' có tạo ra bất kỳ điều gì khác nhau không? – BoltClock

+0

Có thể vì vậy bạn không thực sự muốn đường viền phải màu trắng, nhưng thực sự vô hình (giống như nền) hoặc không có viền? – Guffa

16

Thứ tự mà bạn xác định màu đường viền không liên quan. Trình duyệt chỉ hiển thị các đường viền theo nhiều cách khác nhau. Các điểm ảnh trong góc có được màu từ một trong hai bên, và nó phụ thuộc vào trình duyệt bạn đang sử dụng.

Có một số phương pháp khác nhau được sử dụng. Dưới đây là các trình duyệt phổ biến nhất, và làm thế nào họ vẽ các góc:

Internet Explorer:

+----------------------+--+ 
|      | | 
+----------------------| | 
| |     | | 
| |     | | 
| |     | | 
| +----------------------+ 
| |      | 
+--+----------------------+ 

Firefox:

+--+----------------------+ 
| |      | 
| +----------------------+ 
| |     | | 
| |     | | 
| |     | | 
+----------------------| | 
|      | | 
+----------------------+--+ 

Chrome:

+--+----------------------+ 
| |      | 
| |----------------------+ 
| |     | | 
| |     | | 
| |     | | 
| +----------------------+ 
| |      | 
+--+----------------------+ 

Safari:

+--+-------------------+--+ 
| |     | | 
| |-------------------| | 
| |     | | 
| |     | | 
| |     | | 
| +-------------------+ | 
| |     | | 
+--+-------------------+--+ 

Opera:

+-------------------------+ 
|       | 
+-------------------------+ 
| |     | | 
| |     | | 
| |     | | 
| +-------------------+ | 
| |     | | 
+--+-------------------+--+ 

Có vẻ như thể các nhà cung cấp trình duyệt khác nhau đi trên con đường của họ để sử dụng một phương pháp đó là khác biệt so với tất cả các trình duyệt khác .. .

(Đã thử nghiệm trong các phiên bản gần đây. Các phiên bản cũ hơn của bất kỳ trình duyệt nào có thể làm điều đó khác nhau, nhưng điều đó không thực sự quan trọng vì chúng khác nhau nhiều.)

Vì vậy, nếu bạn cần kiểm soát hoàn toàn cách các góc được vẽ, bạn sẽ sử dụng hai phần tử bên trong mỗi góc khác, đặt dọc biên giới trên một và biên giới horisontal trên khác.

+0

+1 đây là một câu trả lời hay. Bạn có bất kỳ nguồn nào bạn nhận được thông tin này từ đâu không? – Christoph

+1

@Christoph: Tôi đã làm một trang thử nghiệm và thử nghiệm nó trong các trình duyệt khác nhau: http://jsfiddle.net/Guffa/Ksdjs/ – Guffa

+0

awwww, điều này thật khủng khiếp: -D Bạn có mắt đại bàng không? – Christoph

1

Bạn có thể viết như thế này:

div{ 
border:1px solid black; 
border-right-color:white; 
} 
+0

Đó là những gì tôi đã có trước đây. Có vẻ như IE9 sắp xếp lại nó cho chính mình trước khi hiển thị trang. – Shadowxvii

Các vấn đề liên quan