CSS ile nasıl şeffaf bir kenarlık yaparım?


101

liAşağıdaki gibi bir tarzım var :

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

liSınırın üzerine geldiğimde, lietrafında kaydırma yapmadan belirir . Görünmeyen bir 'sınır'a sahip olmak mümkün mü?

Yanıtlar:


108

Renk olarak "şeffaf" kullanabilirsiniz. IE'nin bazı sürümlerinde bu siyah olarak çıkıyor, ancak IE6 günlerinden beri test etmedim.

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


3
İe8, Mozilla, Opera ve Chrome'da çalıştı, benim için yeterince iyi, Safari'de denemedim ama safariyi pek umursamıyorum. çok teşekkürler!
— William Calleja

5
Evet, özellikle IE6'da çalışmıyor. IE7 tamam.
— bobince

Bu maalesef benim için işe yaramadı. Tamamen sınırların dışında yapılmış öğelerden sonra sözde kullandım ... ne dağınıklık!
— Alex

51

Çoğunuz, şeffaf bir sınır yerine opak bir sınır için bir çözüm bulmak için buraya iniyor olmalısınız. Bu durumda rgba, nerede aduruyor kullanabilirsiniz alpha.

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

Demo

Burada, değiştirebilir opacityarasında bordergelen0-1


Sadece tam şeffaf sınır istiyorsanız, kullanımına en iyi şey transparentgibi,border: 1px solid transparent;


Ve bu aracı onaltılıktan rgba rengine dönüştürmek için kullanabilirsiniz ... hexcolortool.com ... isteğe bağlı olarak URL'de onaltılık rengi belirtebilirsiniz, örneğin ... hexcolortool.com/#ffcc00
— clayRay

32

Kenarlığı kaldırabilir ve dolguyu artırabilirsiniz:

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

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


Bu bir cazibe gibi çalıştı, sadece bunu yapmanın daha temiz bir yolu olup olmadığını merak ettim. görünmez bir sınıra sahip olmak mümkün olsaydı? öneri için tekrar teşekkürler.
— William Calleja

3
Bu bana daha uyumlu bir çözüm gibi geliyor
— NibblyPig

Kodun ihtiyacınız olanın tam tersi çalıştığını anladım! Sabit. Ayrıca şeffaf renkle giderdim. Bunu bilmiyordum: D
— Matt Ellen

Örneğin (benim durumum) tamamen tıklanabilir bir <a/>kutu istiyorsanız, kenarlığı azaltın ve dolguyu artırın hiçbir faydası yoktur . Kenarlık öğeye aittir (dolayısıyla tıklanabilir), dolgu ise üst öğeye aittir.
— Nico

13

hey bu şimdiye kadar yaşadığım en iyi çözüm .. bu CSS3

aşağıdaki özelliği div'inizde veya sınır şeffaflığını koymak istediğiniz herhangi bir yerde kullanın

Örneğin

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

bu çalışacak..


4

Evet, kullanabilirsin border: 1px solid transparent

Başka bir çözüm outlinede belge akışını etkilemeyen fareyle üzerine gelindiğinde kullanmak (ve sınırı 0 olarak ayarlamaktır):

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

NB. Anahattı, tek tek taraflar için değil, yalnızca paylaşılan el özelliği olarak ayarlayabilirsiniz. Yalnızca hata ayıklama için kullanılması amaçlanmıştır, ancak güzel bir şekilde çalışır.


Çok teşekkürler! ne kadar çok seçeneğim varsa o kadar iyi
— William Calleja

Chrome'un bugünlerde şeffaf kenarlıkları yok saydığını fark ettim, bu nedenle border: 1px solid transparent, Chrome sürüm 84'ten itibaren artık çalışmıyor. Go figure
— MC9000

3

Bir yorumda ne kadar çok seçeneğiniz varsa o kadar iyi olduğunu söylediğinizden, işte bir tane daha.

CSS3'te iki farklı sözde "kutu modeli" vardır. Biri bir blok elemanının genişliğine sınır ve dolguyu eklerken, diğeri eklemez. İkincisini belirterek kullanabilirsiniz

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

Ardından, modern tarayıcılarda öğe her zaman aynı genişliğe sahip olacaktır. Yani, fareyle üzerine gelindiğinde bir sınır uygularsanız, sınırın genişliği öğenin toplam genişliğine eklenmez; sınır, tabiri caizse öğenin "içine" eklenecektir. Ancak, doğru hatırlıyorsam, widthbunun işe yaraması için açıkça belirtmelisiniz . Muhtemelen bu özel durumda sizin için bir seçenek değildir, ancak gelecekteki durumlar için aklınızda bulundurabilirsiniz.


Bu, şeffaf bir sınır için bir kullanım durumu olabilir - fareyle üzerine gelindiğinde bir kenarlık uygulamak yerine, rengini şeffaftan görebileceğiniz bir şeye değiştirin.
— DaveWalley

2

Bu blog girişininborder-color: transparent IE6'da taklit etmenin bir yolu var . Aşağıdaki örnek, blog girişi yorumlarında ortaya çıkan "hasLayout" düzeltmesini içerir:

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

border-colorIE6 düzeltmesinde kullanılan .testDivöğenin herhangi bir yerinde kullanılmadığından emin olun . Örneği yerine olarak pinkdeğiştirdim #FEFEFEçünkü kullanılması daha da az olası görünüyor.


0

Bunun en kolay çözümü rgbarenk olarak kullanmaktır : border-color: rgba(0,0,0,0);Bu tamamen şeffaf bordür rengidir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.