Bagaimana cara membuat bingkai transparan dengan CSS?

101

Saya memiliki ligaya sebagai berikut:

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

Ketika saya mengarahkan kursor ke liperbatasan muncul tanpa membuat lipergeseran. Mungkinkah memiliki 'perbatasan' yang tidak terlihat?

William Calleja
sumber

Jawaban:

107

Anda dapat menggunakan "transparan" sebagai warna. Di beberapa versi IE, itu muncul sebagai hitam, tetapi saya belum mengujinya sejak IE6 hari.

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

Douglas
sumber
3
Ini bekerja pada ie8, Mozilla, Opera dan Chrome, cukup baik untuk saya, saya tidak mencobanya di Safari tapi saya tidak terlalu keberatan dengan safari. Terima kasih banyak!
William Calleja
5
Ya, secara khusus IE6 ini tidak berfungsi. IE7 OK.
bobince
Sayangnya ini tidak berhasil untuk saya. Saya akhirnya menggunakan pseudo setelah elemen yang seluruhnya terbuat dari perbatasan ... sungguh berantakan!
Alex
51

Banyak dari Anda harus mendarat di sini untuk menemukan solusi untuk batas buram, bukan yang transparan. Dalam hal ini Anda dapat menggunakan rgba, di mana asingkatan alpha.

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

Demo

Di sini, Anda dapat mengubah opacitydari borderdari0-1


Jika Anda hanya ingin bingkai transparan lengkap, hal terbaik untuk digunakan adalah transparent, likeborder: 1px solid transparent;

Tuan Alien
sumber
Dan Anda dapat menggunakan alat ini untuk mengonversi dari hex menjadi warna rgba ... hexcolortool.com ... di mana Anda dapat secara opsional menentukan warna hex di URL, seperti ... hexcolortool.com/#ffcc00
clayRay
32

Anda dapat menghapus perbatasan dan menambah bantalan:

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

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

Matt Ellen
sumber
Nah ini bekerja seperti pesona, saya hanya bertanya-tanya apakah ada cara yang lebih bersih bagaimana melakukannya? apakah mungkin memiliki perbatasan yang tidak terlihat? terima kasih sekali lagi atas sarannya.
William Calleja
3
Ini terdengar seperti solusi yang lebih kompatibel bagi saya
NibblyPig
Baru menyadari kode bekerja berlawanan dengan yang Anda butuhkan! Tetap. Juga, saya akan memilih warna transparan. Saya hanya tidak mengetahuinya: D
Matt Ellen
Mengurangi batas dan menambah bantalan tidak ada gunanya jika Anda ingin, misalnya (kasus saya), <a/>kotak yang dapat diklik sepenuhnya . Perbatasan milik elemen (karenanya dapat diklik), sedangkan padding milik induk.
Nico
13

hey ini adalah solusi terbaik yang pernah saya alami .. ini CSS3

gunakan properti berikut ke div Anda atau di mana pun Anda ingin meletakkan border trasparent

misalnya

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

ini akan berhasil ..

Raau
sumber
4

Ya, Anda bisa menggunakan border: 1px solid transparent

Solusi lain adalah menggunakan outlinesaat mengarahkan kursor (dan menyetel batas ke 0) yang tidak memengaruhi aliran dokumen:

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

NB. Anda hanya dapat mengatur garis luar sebagai properti sharthand, bukan untuk masing-masing sisi. Ini hanya dimaksudkan untuk digunakan untuk debugging tetapi berfungsi dengan baik.

Kambing Tidak Puas
sumber
Terima kasih banyak! semakin banyak pilihan yang saya miliki semakin baik
William Calleja
3

Karena Anda mengatakan dalam komentar bahwa semakin banyak opsi yang Anda miliki, semakin baik, inilah satu lagi.

Di CSS3, ada dua yang disebut "model kotak". Satu menambahkan border dan padding ke lebar elemen blok, sedangkan yang lainnya tidak. Anda dapat menggunakan yang terakhir dengan menentukan

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

Kemudian, di browser modern, elemen akan selalu memiliki lebar yang sama. Yaitu, jika Anda menerapkan perbatasan padanya saat melayang, lebar perbatasan tidak akan menambah lebar keseluruhan elemen; perbatasan akan ditambahkan "di dalam" elemen, jadi untuk berbicara. Namun, jika saya ingat dengan benar, Anda harus menentukan widthsecara eksplisit agar ini berfungsi. Yang mungkin bukan pilihan untuk Anda dalam kasus khusus ini, tetapi Anda dapat mengingatnya untuk situasi mendatang.

ЯegDwight
sumber
Ini mungkin salah satu kasus penggunaan untuk bingkai transparan - alih-alih menerapkan batas saat mengarahkan kursor, ubah warnanya dari transparan menjadi sesuatu yang dapat Anda lihat.
DaveWalley
2

Entri blog ini memiliki cara untuk ditiru border-color: transparentdi IE6. Contoh di bawah ini mencakup perbaikan "hasLayout" yang muncul di komentar entri 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);
}

Pastikan bahwa border-colordigunakan dalam perbaikan IE6 tidak digunakan di mana pun dalam .testDivelemen. Saya mengubah contoh dari pinkmenjadi #FEFEFEkarena tampaknya lebih kecil kemungkinannya untuk digunakan.

Nak
sumber
0

Solusi termudah untuk ini adalah dengan menggunakan rgbasebagai warna: border-color: rgba(0,0,0,0);Itu adalah warna perbatasan transparan sepenuhnya.

Jake Wilson
sumber
0

Gunakan properti transparan

border-color : transparent;
Prabesh Guragain
sumber