Antworten:
Wenn in einem Browser etwas passiert, wäre ich überrascht. Dies ist eines dieser herausragenden Formularelemente, bei denen Browser in der Regel nicht so viel stylen lassen und die normalerweise von Menschen durch Javascript ersetzt werden, damit sie etwas stylen / codieren können, das wie ein Kontrollkästchen aussieht und sich verhält.
Ich schlage vor, "Gliederung" anstelle von "Grenze" zu verwenden. Zum Beispiel : outline: 1px solid #1e5180.
!importantIhrem CSS hinzufügen , wenn Sie Gliederung verwenden. Ich habe dies in Firefox 12.0 getestet und ohne! Wichtig würde der Umriss verschwinden, solange ich auf das Kontrollkästchen klickte.
Du solltest benutzen
-moz-appearance:none;
-webkit-appearance:none;
-o-appearance:none;
Dann entfernen Sie das Standard-Kontrollkästchen Bild / Stil und können es formatieren. Auf jeden Fall wird es in Firefox noch eine Grenze geben
Sie können Kastenschatten verwenden, um einen Rand zu fälschen:
-webkit-box-shadow: 0px 0px 0px 1px rgba(255,0,0,1);
-moz-box-shadow: 0px 0px 0px 1px rgba(255,0,0,1);
box-shadow: 0px 0px 0px 1px rgba(255,0,0,1);
Hier ist eine reine browserübergreifende CSS-Lösung (keine Bilder), die auf Martins benutzerdefinierten Kontrollkästchen und Optionsfeldern mit CSS3-LINK basiert: http://martinivanov.net/2012/12/21/imageless-custom-checkboxes-and-radio-buttons -with-css3-revisited /
Hier ist eine jsFiddle: http://jsfiddle.net/DJRavine/od26wL6n/
Ich habe dies in folgenden Browsern getestet:
label,
input[type="radio"] + span,
input[type="radio"] + span::before,
label,
input[type="checkbox"] + span,
input[type="checkbox"] + span::before
{
display: inline-block;
vertical-align: middle;
}
label *,
label *
{
cursor: pointer;
}
input[type="radio"],
input[type="checkbox"]
{
opacity: 0;
position: absolute;
}
input[type="radio"] + span,
input[type="checkbox"] + span
{
font: normal 11px/14px Arial, Sans-serif;
color: #333;
}
label:hover span::before,
label:hover span::before
{
-moz-box-shadow: 0 0 2px #ccc;
-webkit-box-shadow: 0 0 2px #ccc;
box-shadow: 0 0 2px #ccc;
}
label:hover span,
label:hover span
{
color: #000;
}
input[type="radio"] + span::before,
input[type="checkbox"] + span::before
{
content: "";
width: 12px;
height: 12px;
margin: 0 4px 0 0;
border: solid 1px #a8a8a8;
line-height: 14px;
text-align: center;
-moz-border-radius: 100%;
-webkit-border-radius: 100%;
border-radius: 100%;
background: #f6f6f6;
background: -moz-radial-gradient(#f6f6f6, #dfdfdf);
background: -webkit-radial-gradient(#f6f6f6, #dfdfdf);
background: -ms-radial-gradient(#f6f6f6, #dfdfdf);
background: -o-radial-gradient(#f6f6f6, #dfdfdf);
background: radial-gradient(#f6f6f6, #dfdfdf);
}
input[type="radio"]:checked + span::before,
input[type="checkbox"]:checked + span::before
{
color: #666;
}
input[type="radio"]:disabled + span,
input[type="checkbox"]:disabled + span
{
cursor: default;
-moz-opacity: .4;
-webkit-opacity: .4;
opacity: .4;
}
input[type="checkbox"] + span::before
{
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
}
input[type="radio"]:checked + span::before
{
content: "\2022";
font-size: 30px;
margin-top: -1px;
}
input[type="checkbox"]:checked + span::before
{
content: "\2714";
font-size: 12px;
}
input[class="blue"] + span::before
{
border: solid 1px blue;
background: #B2DBFF;
background: -moz-radial-gradient(#B2DBFF, #dfdfdf);
background: -webkit-radial-gradient(#B2DBFF, #dfdfdf);
background: -ms-radial-gradient(#B2DBFF, #dfdfdf);
background: -o-radial-gradient(#B2DBFF, #dfdfdf);
background: radial-gradient(#B2DBFF, #dfdfdf);
}
input[class="blue"]:checked + span::before
{
color: darkblue;
}
input[class="red"] + span::before
{
border: solid 1px red;
background: #FF9593;
background: -moz-radial-gradient(#FF9593, #dfdfdf);
background: -webkit-radial-gradient(#FF9593, #dfdfdf);
background: -ms-radial-gradient(#FF9593, #dfdfdf);
background: -o-radial-gradient(#FF9593, #dfdfdf);
background: radial-gradient(#FF9593, #dfdfdf);
}
input[class="red"]:checked + span::before
{
color: darkred;
}
<label><input type="radio" checked="checked" name="radios-01" /><span>checked radio button</span></label>
<label><input type="radio" name="radios-01" /><span>unchecked radio button</span></label>
<label><input type="radio" name="radios-01" disabled="disabled" /><span>disabled radio button</span></label>
<br/>
<label><input type="radio" checked="checked" name="radios-02" class="blue" /><span>checked radio button</span></label>
<label><input type="radio" name="radios-02" class="blue" /><span>unchecked radio button</span></label>
<label><input type="radio" name="radios-02" disabled="disabled" class="blue" /><span>disabled radio button</span></label>
<br/>
<label><input type="radio" checked="checked" name="radios-03" class="red" /><span>checked radio button</span></label>
<label><input type="radio" name="radios-03" class="red" /><span>unchecked radio button</span></label>
<label><input type="radio" name="radios-03" disabled="disabled" class="red" /><span>disabled radio button</span></label>
<br/>
<label><input type="checkbox" checked="checked" name="checkbox-01" /><span>selected checkbox</span></label>
<label><input type="checkbox" name="checkbox-02" /><span>unselected checkbox</span></label>
<label><input type="checkbox" name="checkbox-03" disabled="disabled" /><span>disabled checkbox</span></label>
<br/>
<label><input type="checkbox" checked="checked" name="checkbox-01" class="blue" /><span>selected checkbox</span></label>
<label><input type="checkbox" name="checkbox-02" class="blue" /><span>unselected checkbox</span></label>
<label><input type="checkbox" name="checkbox-03" disabled="disabled" class="blue" /><span>disabled checkbox</span></label>
<br/>
<label><input type="checkbox" checked="checked" name="checkbox-01" class="red" /><span>selected checkbox</span></label>
<label><input type="checkbox" name="checkbox-02" class="red" /><span>unselected checkbox</span></label>
<label><input type="checkbox" name="checkbox-03" disabled="disabled" class="red" /><span>disabled checkbox</span></label>
Ich bin veraltet, ich weiß. Aber eine kleine Problemumgehung wäre, Ihr Kontrollkästchen in ein Etiketten-Tag zu setzen und das Etikett dann mit einem Rand zu versehen:
<label class='hasborder'><input type='checkbox' /></label>
Stylen Sie dann das Etikett:
.hasborder { border:1px solid #F00; }
label { position: relative; overflow: hidden; width: 16px; height: 16px; border: 1px solid #0f0; }und dann label > input[type=checkbox] { position: absolute; left: -999px; }können Sie Ihr eigenes Kontrollkästchen individuell gestalten und das ursprüngliche Kontrollkästchen wird weiterhin aktiviert / deaktiviert, aber der Benutzer wird es nicht sehen. Sie sehen nur Ihr benutzerdefiniertes Kontrollkästchen.
:hoverund :checkedzum Formatieren anderer Status Ihres benutzerdefinierten Kontrollkästchens verwenden.
Hier ist meine Version, die FontAwesome als Kontrollkästchen verwendet. Ich denke, FontAwesome wird von fast jedem verwendet, daher kann man davon ausgehen, dass Sie es auch haben. Nicht in IE / Edge getestet und ich denke, niemand kümmert sich darum.
input[type=checkbox] {
-moz-appearance:none;
-webkit-appearance:none;
-o-appearance:none;
outline: none;
content: none;
}
input[type=checkbox]:before {
font-family: "FontAwesome";
content: "\f00c";
font-size: 15px;
color: transparent !important;
background: #fef2e0;
display: block;
width: 15px;
height: 15px;
border: 1px solid black;
margin-right: 7px;
}
input[type=checkbox]:checked:before {
color: black !important;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet"/>
<input type="checkbox">
Für Firefox , Chrome und Safari passiert nichts.
Für IE der Rahmen außerhalb des Kontrollkästchens angewendet (nicht als Teil des Kontrollkästchens), und der "ausgefallene" Schattierungseffekt im Kontrollkästchen ist weg (wird als altmodisches Kontrollkästchen angezeigt).
Für Opera wendet der Rahmenstil den Rand tatsächlich auf das Kontrollkästchenelement an.
Opera behandelt auch andere Stile auf dem Kontrollkästchen besser als andere Browser: Farbe wird als Farbe des Häkchens angewendet , Hintergrundfarbe wird als Hintergrundfarbe innerhalb des Kontrollkästchens angewendet (IE wendet den Hintergrund so an, als ob sich das Kontrollkästchen in einem <div>mit Hintergrund befindet). .
Die einfachste Lösung besteht darin, das Kontrollkästchen in ein Feld zu verpacken, <div>wie es andere vorgeschlagen haben.
Wenn Sie das Erscheinungsbild vollständig steuern möchten, müssen Sie sich für den erweiterten Bild- / Javascript-Ansatz entscheiden, der auch von anderen entwickelt wurde.
Das Stylen von Kontrollkästchen (und vielen anderen Eingabeelementen für dieses Material) ist mit reinem CSS nicht wirklich möglich, wenn Sie das visuelle Erscheinungsbild drastisch ändern möchten.
Am besten implementieren Sie etwas wie jqTransform , das Ihre Eingaben durch Bilder ersetzt und Javascript-Verhalten anwendet, um ein Kontrollkästchen (oder ein anderes Element) nachzuahmen.
Nein, Sie können das Kontrollkästchen selbst immer noch nicht formatieren, aber ich habe (endlich) herausgefunden, wie eine Illusion formatiert werden kann, während die Funktionalität des Klicken auf ein Kontrollkästchen beibehalten wird. Dies bedeutet, dass Sie es umschalten können, auch wenn der Cursor nicht perfekt stillsteht, ohne das Risiko einzugehen, Text auszuwählen oder Drag & Drop auszulösen!
Das Beispiel verwendet eine span-Schaltfläche sowie Text in einer Beschriftung. Sie erhalten jedoch eine Vorstellung davon, wie Sie das Kontrollkästchen unsichtbar machen und alles dahinter zeichnen können.
Diese Lösung passt wahrscheinlich auch zu Optionsfeldern.
Das Folgende funktioniert in IE9, FF30.0 und Chrome 40.0.2214.91 und ist nur ein einfaches Beispiel. Sie können es weiterhin in Kombination mit Hintergrundbildern und Pseudoelementen verwenden.
http://jsfiddle.net/o0xo13yL/1/
label {
display: inline-block;
position: relative; /* needed for checkbox absolute positioning */
background-color: #eee;
padding: .5rem;
border: 1px solid #000;
border-radius: .375rem;
font-family: "Courier New";
font-size: 1rem;
line-height: 1rem;
}
label > input[type="checkbox"] {
display: block;
position: absolute; /* remove it from the flow */
width: 100%;
height: 100%;
margin: -.5rem; /* negative the padding of label to cover the "button" */
cursor: pointer;
opacity: 0; /* make it transparent */
z-index: 666; /* place it on top of everything else */
}
label > input[type="checkbox"] + span {
display: inline-block;
width: 1rem;
height: 1rem;
border: 1px solid #000;
margin-right: .5rem;
}
label > input[type="checkbox"]:checked + span {
background-color: #666;
}
<label>
<input type="checkbox" />
<span> </span>Label text
</label>
Hier ist eine einfache Möglichkeit (vor oder nach Pseudoelementen / Klassen zu verwenden):
input[type=checkbox] {
position: relative;
}
input[type=checkbox]:after {
position: absolute;
top: 0;
left: 0;
/* Above three lines allow the checkbox:after position at checkbox's position */
content: '';
width: 32px;
height: 32px;
z-index: 1; /* This allows the after overlap the checkbox */
/* Anything you want */
}
<!DOCTYPE html>
<html>
<head>
<style>
.abc123
{
-webkit-appearance:none;
width: 14px;
height: 14px;
display: inline-block;
background: #FFFFFF;
border: 1px solid rgba(220,220,225,1);
}
.abc123:after {
content: "";
display: inline-block;
position: relative;
top: -3px;
left: 4px;
width: 3px;
height: 5px;
border-bottom: 1px solid #fff;
border-right: 1px solid #fff;
-webkit-transform: rotate(45deg);
}
input[type=checkbox]:checked {
background: #327DFF;
outline: none;
border: 1px solid rgba(50,125,255,1);
}
input:focus,input:active {
outline: none;
}
input:hover {
border: 1px solid rgba(50,125,255,1);
}
</style>
</head>
<body>
<input class="abc123" type="checkbox"></input>
</body>
</html>
Setze es in ein Div und füge dem Div einen Rand hinzu