Jak utworzyć przezroczystą ramkę za pomocą CSS?


101

Mam listylizację następująco:

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

Kiedy najeżdżam kursorem na ligranicę, pojawia się bez liprzesuwania. Czy jest możliwe, aby „obramowanie” było niewidoczne?

Odpowiedzi:


108

Możesz użyć „przezroczystego” jako koloru. W niektórych wersjach IE pojawia się jako czarny, ale nie testowałem go od czasów IE6.

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


3
Cóż, działało na ie8, Mozilla, Opera i Chrome, wystarczająco dobre dla mnie, nie wypróbowałem tego na Safari, ale nie mam nic przeciwko safari. wielkie dzięki!
— William Calleja,

5
Tak, to właśnie w IE6 to nie działa. IE7 jest OK.
— bobince

To niestety nie zadziałało. Skończyło się na tym, że użyłem pseudo po elementach wykonanych całkowicie poza granicami ... co za bałagan!
— Alex

51

Wielu z was musi tu wylądować, aby znaleźć rozwiązanie dla nieprzezroczystej granicy zamiast przezroczystej. W takim przypadku możesz użyć rgba, gdzie aoznacza alpha.

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

Próbny

Tutaj można zmienić opacityz borderod0-1


Jeśli chcesz po prostu mieć całkowicie przezroczyste obramowanie, najlepiej użyć na transparentprzykładborder: 1px solid transparent;


Możesz użyć tego narzędzia do konwersji z koloru szesnastkowego na kolor rgba ... hexcolortool.com ... gdzie możesz opcjonalnie określić kolor szesnastkowy w adresie URL, na przykład ... hexcolortool.com/#ffcc00
— clayRay

32

Możesz usunąć obramowanie i zwiększyć dopełnienie:

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

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


Cóż, to zadziałało jak urok, po prostu zastanawiałem się, czy istnieje czystszy sposób, jak to zrobić? czy w ogóle można było mieć niewidzialną granicę? dzięki jeszcze raz za sugestię.
— William Calleja,

3
To brzmi jak bardziej kompatybilne rozwiązanie dla mnie
— NibblyPig

Właśnie zdałem sobie sprawę, że kod działa odwrotnie niż potrzebujesz! Naprawiony. Poza tym wybrałbym przezroczysty kolor. Po prostu nie wiedziałem o tym: D
— Matt Ellen

Zmniejsz obramowanie i zwiększ dopełnienie nie przyda się, jeśli chcesz na przykład (w moim przypadku) w pełni klikalne <a/>pole. Obramowanie należy do elementu (stąd klikalne), podczas gdy wypełnienie należy do elementu nadrzędnego.
— Nico

13

hej, to najlepsze rozwiązanie, jakiego kiedykolwiek doświadczyłem .. to jest CSS3

użyj następującej własności do swojego div lub dowolnego miejsca, w którym chcesz umieścić border trasparent

na przykład

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

to zadziała ...


4

Tak, możesz użyć border: 1px solid transparent

Innym rozwiązaniem jest użycie outlinepo najechaniu (i ustawienie obramowania na 0), co nie wpływa na przepływ dokumentów:

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

NB. Kontur można ustawić tylko jako właściwość sharthand, a nie dla poszczególnych stron. Jest przeznaczony tylko do debugowania, ale działa dobrze.


Wielkie dzięki! im więcej opcji mam, tym lepiej
— William Calleja

Zauważyłem, że Chrome obecnie ignoruje przezroczyste ramki, więc border: 1px solid transparent nie działa już od wersji Chrome 84. Idź rysunek
— MC9000

3

Ponieważ powiedziałeś w komentarzu, że im więcej masz opcji, tym lepiej, oto kolejna.

W CSS3 istnieją dwa różne tak zwane „modele pudełkowe”. Jeden dodaje obramowanie i wypełnienie do szerokości elementu blokowego, a drugi nie. Możesz użyć tego ostatniego, określając

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

Wtedy w nowoczesnych przeglądarkach element będzie zawsze miał tę samą szerokość. To znaczy, jeśli zastosujesz do niego obramowanie po najechaniu kursorem, szerokość obramowania nie zwiększy całkowitej szerokości elementu; ramka zostanie dodana „wewnątrz” elementu, że tak powiem. Jeśli jednak dobrze pamiętam, musisz widthwyraźnie określić, aby to zadziałało. Co prawdopodobnie nie jest dla Ciebie opcją w tym konkretnym przypadku, ale możesz o tym pamiętać w przyszłych sytuacjach.


Może to być jeden przypadek użycia przezroczystej ramki - zamiast stosować obramowanie po najechaniu kursorem, zmień jej kolor z przezroczystego na taki, który widzisz.
— DaveWalley

2

Ten wpis na blogu ma sposób na emulację border-color: transparentw IE6. Poniższy przykład zawiera poprawkę „hasLayout”, która pojawia się w komentarzach do wpisu na blogu:

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

Upewnij się, że border-colorzastosowana w poprawce IE6 nie jest używana w żadnym miejscu .testDivelementu. Zmieniłem przykład z pinkna, #FEFEFEponieważ wydaje się, że jest to jeszcze mniej prawdopodobne.


0

Najłatwiejszym rozwiązaniem jest użycie rgbajako koloru: border-color: rgba(0,0,0,0);jest to całkowicie przezroczysty kolor obramowania.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.