Come creo un bordo trasparente con i CSS?


101

Ho uno listile come segue:

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

Quando passo il mouse sopra il libordo appare senza fare lo lispostamento di intorno. È possibile avere un "bordo" non visibile?

Risposte:


107

Puoi usare "trasparente" come colore. In alcune versioni di IE, appare nero, ma non l'ho testato dai giorni di IE6.

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


3
Bene, ha funzionato su ie8, Mozilla, Opera e Chrome, abbastanza buono per me, non l'ho provato su Safari ma non mi dispiace molto. molte grazie!
William Calleja

5
Sì, è specificamente IE6 che non funziona. IE7 è OK.
bobince

Questo non ha funzionato per me sfortunatamente. Ho finito per usare elementi pseudo-dopo fatti interamente fuori dai confini ... che casino!
Alex

51

Molti di voi devono essere atterrati qui per trovare una soluzione per il bordo opaco invece di uno trasparente. In quel caso puoi usare rgba, dove asta per alpha.

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

dimostrazione

Qui puoi modificare opacityil borderda0-1


Se vuoi semplicemente un bordo trasparente completo, la cosa migliore da usare è transparent, comeborder: 1px solid transparent;


E puoi usare questo strumento per convertire da esadecimale a colore rgba ... hexcolortool.com ... dove puoi facoltativamente specificare il colore esadecimale nell'URL, in questo modo ... hexcolortool.com/#ffcc00
clayRay

32

Puoi rimuovere il bordo e aumentare l'imbottitura:

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

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


Bene, questo ha funzionato a meraviglia, mi chiedevo solo se ci fosse un modo più pulito come farlo? se fosse possibile avere un confine invisibile? Grazie ancora per il suggerimento.
William Calleja

3
Mi sembra una soluzione più compatibile
NibblyPig

Ho appena realizzato che il codice funziona al contrario di quanto ti serve! Fisso. Inoltre, andrei con il colore trasparente. Semplicemente non lo sapevo: D
Matt Ellen

Diminuire il bordo e aumentare la spaziatura interna è inutile se si desidera, ad esempio (il mio caso), una <a/>casella completamente selezionabile . Il bordo appartiene all'elemento (quindi cliccabile), mentre il padding appartiene al genitore.
Nico

13

hey questa è la migliore soluzione che abbia mai provato .. questo è CSS3

usa la proprietà seguente al tuo div o ovunque tu voglia mettere un bordo trasparente

per esempio

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

questo funzionerà ..


4

Sì, puoi usare border: 1px solid transparent

Un'altra soluzione è usare outlineal passaggio del mouse (e impostare il bordo su 0) che non influisce sul flusso del documento:

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

NB. È possibile impostare il contorno solo come proprietà di marcatura e non per i singoli lati. È pensato solo per essere usato per il debug ma funziona bene.


Molte grazie! più opzioni ho, meglio è
William Calleja

3

Dato che hai detto in un commento che più opzioni hai, meglio è, eccone un'altra.

In CSS3, ci sono due diversi cosiddetti "box model". Uno aggiunge il bordo e il riempimento alla larghezza di un elemento di blocco, mentre l'altro no. Puoi usare quest'ultimo specificando

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

Quindi, nei browser moderni, l'elemento avrà sempre la stessa larghezza. Ad esempio, se si applica un bordo al passaggio del mouse, la larghezza del bordo non si aggiungerà alla larghezza complessiva dell'elemento; il bordo verrà aggiunto "all'interno" dell'elemento, per così dire. Tuttavia, se ricordo bene, è necessario specificare widthesplicitamente perché funzioni. Che probabilmente non è un'opzione per te in questo caso particolare, ma puoi tenerlo a mente per situazioni future.


Questo potrebbe essere un caso d'uso per un bordo trasparente: invece di applicare un bordo al passaggio del mouse, cambia il suo colore da trasparente a qualcosa che puoi vedere.
DaveWalley

2

Questa voce di blog ha un modo per emulare border-color: transparentin IE6. L'esempio seguente include la correzione "hasLayout" visualizzata nei commenti del post di 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);
}

Assicurati che l' border-colorusato nella correzione di IE6 non sia usato da nessuna parte .testDivnell'elemento. Ho cambiato l'esempio da pinka #FEFEFEperché sembra ancora meno probabile che venga utilizzato.


0

La soluzione più semplice è usare rgbacome colore: border-color: rgba(0,0,0,0);questo è il colore del bordo completamente trasparente.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.