Làm cách nào để tạo đường viền trong suốt bằng CSS?


101

tôi có một li kiểu như sau:

li{
    display:inline-block;
    padding:5px;
    border:1px solid none;
}
li:hover{
    border:1px solid #FC0;
}

Khi tôi di chuột qua liđường viền xuất hiện mà không làm lithay đổi xung quanh. Có thể có 'đường viền' không nhìn thấy được không?

Câu trả lời:


107

Bạn có thể sử dụng "trong suốt" làm màu. Trong một số phiên bản IE, nó có màu đen, nhưng tôi đã không thử nghiệm nó kể từ ngày IE6.

http://www.researchkitchen.de/blog/archives/css-bordercolor-transparent.php


3
Nó hoạt động trên ie8, Mozilla, Opera và Chrome, đủ tốt cho tôi, tôi đã không thử nó trên Safari nhưng tôi không bận tâm lắm đến safari. cảm ơn rất nhiều!
William Calleja

5
Vâng, cụ thể là IE6 mà điều này không hoạt động. IE7 thì không sao.
bobince

Điều này không hiệu quả với tôi rất tiếc. Tôi đã kết thúc bằng cách sử dụng giả sau khi các yếu tố được tạo hoàn toàn ngoài biên giới ... thật là một mớ hỗn độn!
Alex

51

Chắc hẳn nhiều bạn đang đổ bộ vào đây để tìm giải pháp cho viền mờ thay vì trong suốt. Trong trường hợp đó, bạn có thể sử dụng rgba, aviết tắt của từ đâu alpha.

.your_class {
    height: 100px;
    width: 100px;
    margin: 100px;
    border: 10px solid rgba(255,255,255,.5);
}

Bản giới thiệu

Ở đây, bạn có thể thay đổi opacitycủa bordertừ0-1


Nếu bạn chỉ muốn có một đường viền trong suốt hoàn toàn, thì điều tốt nhất để sử dụng là transparent, nhưborder: 1px solid transparent;


Và bạn có thể sử dụng công cụ này để chuyển đổi từ màu hex sang màu rgba ... hexcolortool.com ... nơi bạn có thể tùy chọn chỉ định màu hex trong URL, giống như vậy ... hexcolortool.com/#ffcc00
clayRay

32

Bạn có thể xóa đường viền và tăng phần đệm:

li {
  display: inline-block;
  padding: 6px;
  border-width: 0px;
}

li:hover {
  border: 1px solid #FC0;
  padding: 5px;
}
<ul>
  <li>Hovering is great</li>
</ul>


Chà, điều này hoạt động như một sự quyến rũ, tôi chỉ tự hỏi liệu có cách nào tốt hơn để làm điều đó không? nếu nó có thể có một biên giới vô hình? cảm ơn một lần nữa vì lời khuyên của bạn.
William Calleja

3
Âm thanh này giống như một giải pháp tương thích hơn với tôi
NibblyPig

Chỉ cần nhận ra mã hoạt động ngược lại với cách bạn cần! Đã sửa. Ngoài ra, tôi muốn chọn màu trong suốt. Tôi chỉ không biết về nó: D
Matt Ellen

Giảm đường viền và tăng phần đệm sẽ không có ích gì nếu bạn muốn, ví dụ (trường hợp của tôi), một <a/>hộp hoàn toàn có thể nhấp được . Đường viền thuộc về phần tử (do đó có thể nhấp được), trong khi phần đệm thuộc về phần tử chính.
Nico

13

Này, đây là giải pháp tốt nhất mà tôi từng trải nghiệm .. đây là CSS3

sử dụng thuộc tính sau cho div của bạn hoặc bất kỳ nơi nào bạn muốn đặt dấu trasparent đường viền

ví dụ

div_class { 
 border: 10px solid #999;
 background-clip: padding-box; /* Firefox 4+, Opera, for IE9+, Chrome */
}

điều này sẽ hoạt động ..


4

Đúng, bạn có thể sử dụng border: 1px solid transparent

Một giải pháp khác là sử dụng outlinekhi di chuột (và đặt đường viền thành 0) không ảnh hưởng đến luồng tài liệu:

li{
    display:inline-block;
    padding:5px;
    border:0;
}
li:hover{
    outline:1px solid #FC0;
}

NB. Bạn chỉ có thể đặt đường viền dưới dạng thuộc tính sharthand, không cho các mặt riêng lẻ. Nó chỉ được sử dụng để gỡ lỗi nhưng nó hoạt động tốt.


Cảm ơn rất nhiều! các tùy chọn tôi càng có thì càng tốt
William Calleja

3

Vì bạn đã nói trong một nhận xét rằng bạn càng có nhiều tùy chọn thì càng tốt, đây là một tùy chọn khác.

Trong CSS3, có hai cái gọi là "mô hình hộp" khác nhau. Một phần thêm đường viền và phần đệm vào chiều rộng của một phần tử khối, trong khi phần tử kia thì không. Bạn có thể sử dụng cái sau bằng cách chỉ định

-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;

Sau đó, trong các trình duyệt hiện đại, phần tử sẽ luôn có cùng chiều rộng. Tức là, nếu bạn áp dụng đường viền cho nó khi di chuột, chiều rộng của đường viền sẽ không thêm vào chiều rộng tổng thể của phần tử; đường viền sẽ được thêm vào "bên trong" phần tử, có thể nói như vậy. Tuy nhiên, nếu tôi nhớ không lầm, bạn phải chỉ định widthrõ ràng để điều này hoạt động. Có thể đây không phải là một lựa chọn dành cho bạn trong trường hợp cụ thể này, nhưng bạn có thể ghi nhớ nó cho các tình huống sau này.


Đây có thể là một trường hợp sử dụng cho đường viền trong suốt - thay vì áp dụng đường viền khi di chuột, hãy thay đổi màu của nó từ trong suốt thành màu mà bạn có thể nhìn thấy.
DaveWalley

2

Mục nhập blog này có một cách để mô phỏng border-color: transparenttrong IE6. Ví dụ dưới đây bao gồm bản sửa lỗi "hasLayout" được hiển thị trong các nhận xét về mục nhập blog:

/* transparent border */
.testDiv {
    width: 200px;
    height: 200px;
    border: solid 10px transparent;
}
/* IE6 fix */
*html .testDiv {
    zoom: 1;
    border-color: #FEFEFE;
    filter: chroma(color=#FEFEFE);
}

Đảm bảo rằng bản border-colorsửa lỗi được sử dụng trong IE6 không được sử dụng ở bất kỳ đâu trong .testDivphần tử. Tôi đã thay đổi ví dụ từ pinkthành #FEFEFEvì điều đó dường như thậm chí còn ít được sử dụng hơn.


0

Giải pháp dễ nhất là sử dụng rgbamàu sắc: border-color: rgba(0,0,0,0);Đó là màu đường viền hoàn toàn trong suốt.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.