Wie erstelle ich mit CSS einen transparenten Rahmen?

101

Ich habe einen liStil wie folgt:

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

Wenn ich über die liGrenze schwebe, erscheint sie, ohne dass sich das liverschiebt. Ist es möglich, eine 'Grenze' zu haben, die nicht sichtbar ist?

William Calleja
quelle

Antworten:

107

Sie können "transparent" als Farbe verwenden. In einigen IE-Versionen wird das schwarz angezeigt, aber ich habe es seit den IE6-Tagen nicht mehr getestet.

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

Douglas
quelle
3
Nun, es hat auf IE8, Mozilla, Opera und Chrome funktioniert, gut genug für mich. Ich habe es nicht auf Safari ausprobiert, aber Safari macht mir nichts aus. Vielen Dank!
William Calleja
5
Ja, es ist speziell IE6, in dem dies nicht funktioniert. IE7 ist in Ordnung.
Bobince
Das hat bei mir leider nicht geklappt. Ich habe Pseudo verwendet, nachdem Elemente komplett aus Grenzen gemacht wurden ... was für ein Durcheinander!
Alex
51

Viele von Ihnen müssen hier landen, um eine Lösung für eine undurchsichtige Grenze anstelle einer transparenten zu finden. In diesem Fall können Sie verwenden rgba, wo asteht für alpha.

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

Demo

Hier können Sie die Änderung opacityder bordervon0-1


Wenn Sie einfach einen vollständigen transparenten Rand wünschen, ist das Beste, was Sie verwenden können transparent, wie zborder: 1px solid transparent;

Mr. Alien
quelle
Und Sie können dieses Tool verwenden, um von Hex in RGBA-Farbe zu konvertieren ... hexcolortool.com ... wo Sie optional die Hex-Farbe in der URL angeben können, wie so ... hexcolortool.com/#ffcc00
ClayRay
32

Sie können den Rand entfernen und die Polsterung erhöhen:

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
quelle
Nun, das hat wie ein Zauber funktioniert. Ich habe mich nur gefragt, ob es einen saubereren Weg gibt, wie man das macht. ob es überhaupt möglich war, eine unsichtbare Grenze zu haben? Nochmals vielen Dank für den Vorschlag.
William Calleja
3
Das klingt für mich nach einer kompatibleren Lösung
NibblyPig
Ich habe gerade festgestellt, dass der Code genau so funktioniert, wie Sie es brauchen! Fest. Auch würde ich mit der transparenten Farbe gehen. Ich wusste es einfach nicht: D
Matt Ellen
Das Verringern des Randes und das Erhöhen der Polsterung nützt nichts, wenn Sie beispielsweise (in meinem Fall) eine vollständig anklickbare <a/>Box wünschen . Der Rand gehört zum Element (daher anklickbar), während das Auffüllen dem übergeordneten Element gehört.
Nico
13

Hey, das ist die beste Lösung, die ich je erlebt habe. Das ist CSS3

Verwenden Sie die folgende Eigenschaft für Ihr Div oder überall dort, wo Sie die Grenze durchsichtig setzen möchten

z.B

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

das wird funktionieren..

Raau
quelle
4

Ja, du kannst verwenden border: 1px solid transparent

Eine andere Lösung ist die Verwendung outlinedes Hovers (und das Setzen des Rahmens auf 0), die den Dokumentfluss nicht beeinflusst:

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

NB. Sie können den Umriss nur als Sharthand-Eigenschaft festlegen, nicht für einzelne Seiten. Es ist nur zum Debuggen gedacht, funktioniert aber gut.

DisgruntledGoat
quelle
Vielen Dank! Je mehr Optionen ich habe, desto besser
William Calleja
3

Da Sie in einem Kommentar gesagt haben, je mehr Optionen Sie haben, desto besser, hier ist eine andere.

In CSS3 gibt es zwei verschiedene sogenannte "Box-Modelle". Einer fügt den Rand und den Abstand zur Breite eines Blockelements hinzu, der andere nicht. Sie können letzteres verwenden, indem Sie angeben

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

In modernen Browsern hat das Element dann immer die gleiche Breite. Wenn Sie also beim Hover einen Rahmen darauf anwenden, wird die Breite des Rahmens nicht zur Gesamtbreite des Elements hinzugefügt. Der Rand wird sozusagen "innerhalb" des Elements hinzugefügt. Wenn ich mich jedoch richtig erinnere, müssen Sie die widthexplizit angeben, damit dies funktioniert. Dies ist in diesem speziellen Fall wahrscheinlich keine Option für Sie, aber Sie können dies für zukünftige Situationen berücksichtigen.

ЯegDwight
quelle
Dies kann ein Anwendungsfall für einen transparenten Rand sein. Anstatt einen Rand beim Schweben anzuwenden, ändern Sie seine Farbe von transparent in etwas, das Sie sehen können.
DaveWalley
2

Dieser Blogeintrag kannborder-color: transparent in IE6 emuliert werden . Das folgende Beispiel enthält den Fix "hasLayout", der in den Kommentaren zu den Blogeinträgen angezeigt wird:

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

Stellen Sie sicher, dass das border-colorim IE6-Fix verwendete .testDivElement nirgendwo im Element verwendet wird. Ich habe das Beispiel von pinkin geändert , #FEFEFEda dies noch weniger wahrscheinlich ist.

Sonny
quelle
0

Die einfachste Lösung hierfür ist die Verwendung rgbaals Farbe: border-color: rgba(0,0,0,0);Das ist eine vollständig transparente Rahmenfarbe.

Jake Wilson
quelle
0

Verwenden Sie eine transparente Eigenschaft

border-color : transparent;
Prabesh Guragain
quelle