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.