Verwenden Sie Bilder anstelle von Optionsfeldern


167

Wenn ich eine Radiogruppe mit Schaltflächen habe:

Bild 1

... wie kann ich nur Bilder in der Auswahloption anstelle der Schaltflächen anzeigen, z

Geben Sie hier die Bildbeschreibung ein


Können wir einen Live-Link oder eine jsFiddle für Ihren Code sehen?
Nitesh

3
Erstellen Sie ein Optionsfeld und legen Sie es in einem versteckten Div ab. Wenn Sie auf ein Bild klicken, setzen Sie das Kontrollkästchen aktiviert. Beim ersten Bild klicken Sie auf das erste Optionsfeld und in ähnlicher Weise auf die anderen beiden. Wenn Sie nicht haben, kann ich auch per Code erklären.
Chiragit007

Es funktioniert hier nicht. Können
Code Guy

Antworten:


387
  • Wickeln Sie Radio und Bild ein<label>
  • Optionsfeld ausblenden (Nicht verwenden display:noneoder visibility:hiddenda dies die Zugänglichkeit beeinträchtigt)
  • Richten Sie das Bild neben dem versteckten Radio mit dem Auswahlschalter für benachbarte Geschwister aus +

/* HIDE RADIO */
[type=radio] { 
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

/* IMAGE STYLES */
[type=radio] + img {
  cursor: pointer;
}

/* CHECKED STYLES */
[type=radio]:checked + img {
  outline: 2px solid #f00;
}
<label>
  <input type="radio" name="test" value="small" checked>
  <img src="http://placehold.it/40x60/0bf/fff&text=A">
</label>

<label>
  <input type="radio" name="test" value="big">
  <img src="http://placehold.it/40x60/b0f/fff&text=B">
</label>

Vergessen Sie nicht , Ihren Labels eine Klasse hinzuzufügen , und verwenden Sie diese Klasse stattdessen in CSS .


Benutzerdefinierte Stile und Animationen

Hier ist eine erweiterte Version, die das <i>Element und das :afterPseudo verwendet:

Benutzerdefiniertes CSS-Radio und Kontrollkästchen

body{color:#444;font:100%/1.4 sans-serif;}


/* CUSTOM RADIO & CHECKBOXES
   http://stackoverflow.com/a/17541916/383904 */
.rad,
.ckb{
  cursor: pointer;
  user-select: none;
  -webkit-user-select: none;
  -webkit-touch-callout: none;
}
.rad > input,
.ckb > input{ /* HIDE ORG RADIO & CHECKBOX */
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}
/* RADIO & CHECKBOX STYLES */
/* DEFAULT <i> STYLE */
.rad > i,
.ckb > i{ 
  display: inline-block;
  vertical-align: middle;
  width:  16px;
  height: 16px;
  border-radius: 50%;
  transition: 0.2s;
  box-shadow: inset 0 0 0 8px #fff;
  border: 1px solid gray;
  background: gray;
}
/* CHECKBOX OVERWRITE STYLES */
.ckb > i {
  width: 25px;
  border-radius: 3px;
}
.rad:hover > i{ /* HOVER <i> STYLE */
  box-shadow: inset 0 0 0 3px #fff;
  background: gray;
}
.rad > input:checked + i{ /* (RADIO CHECKED) <i> STYLE */
  box-shadow: inset 0 0 0 3px #fff;
  background: orange;
}
/* CHECKBOX */
.ckb > input + i:after{
  content: "";
  display: block;
  height: 12px;
  width:  12px;
  margin: 2px;
  border-radius: inherit;
  transition: inherit;
  background: gray;
}
.ckb > input:checked + i:after{ /* (RADIO CHECKED) <i> STYLE */
  margin-left: 11px;
  background:  orange;
}
<label class="rad">
  <input type="radio" name="rad1" value="a">
  <i></i> Radio 1
</label>
<label class="rad">
  <input type="radio" name="rad1" value="b" checked>
  <i></i> Radio 2
</label>

<br>

<label class="ckb">
  <input type="checkbox" name="ckb1" value="a" checked>
  <i></i> Checkbox 1
</label>
<label class="ckb">
  <input type="checkbox" name="ckb2" value="b">
  <i></i> Checkbox 2
</label>


10
+1 für den Pseudo-Selektor, ich glaube, ich habe in der Vergangenheit JavaScript verwendet, um nach ausgewählten zu suchen! Das wird mich lehren ...
zik

3
Versteckte Sichtbarkeit bedeutet, dass es nicht anklickbar ist, und Position Absolue nimmt es aus dem Dokumentenfluss heraus
99 Probleme - Syntax ist nicht ein

1
Dies ist eine ausgezeichnete Antwort. Darf ich hinzufügen, dass das auch funktioniert type="checkbox".
Wtower

ok das ist schön .. funktioniert super, funktioniert anscheinend auch im IE, ist es aber eigentlich nicht. Das Bild verhält sich korrekt, aber wenn das Formular gesendet wird, erfolgt keine Auswahl der Miniaturansichten. Ich denke, ich benutze den neuen IE, der mit Win 8.1 kommt. Irgendeine Idee?
Junaid Rehman

3
Spät zur Party, aber sei vorsichtig damit. Visibility:hiddenversteckt die Eingaben vom Bildschirmleser und ein großes Nein Nein vom Standpunkt der Barrierefreiheit.
DPac

99

Beispiel:

Kopf hoch! Diese Lösung ist nur CSS.

Bei der Kreditkartenauswahl befindet sich die MasterCard in der modifizierten Demo.

Ich empfehle Ihnen, CSS3 zu nutzen, indem Sie das Optionsfeld für die Standardeingabe mit den CSS3-Regeln ausblenden :

.options input{
    margin:0;padding:0;
    -webkit-appearance:none;
       -moz-appearance:none;
            appearance:none;
}

Ich habe vor ein paar Tagen nur ein Beispiel gemacht.


1
Das war großartig! Ich habe es in ein ASP.NET-Formular integriert und es hat wie ein Zauber funktioniert :)
Gus

Dieses Beispiel funktioniert nicht in Firefox 49.0.2 unter XUbuntu 16.04.1
Sergey Kudriavtsev

@SergeyKudriavtsev Möglicherweise muss der Code aktualisiert werden (diese Antwort stammt aus dem Jahr 2013). Zum Glück kann jeder den Code verbessern. Ich werde es mir bald ansehen. Prost.
Richard Cotrina

Funktioniert gut für mich in Firefox 60, Windows 10.
Trevor

Ich habe dies für einen Satz von 3 Smileys arbeiten. Jetzt muss ich mehrere Zeilen in einem Formular haben, jede mit ihren eigenen Smileys. Mein Problem ist, dass sich alle ändern, wenn eine Zeile geändert wird. Irgendwelche Ideen, welcher Teil modifiziert werden muss, um dies zu erreichen?
Dave317

19

Sie können dafür CSS verwenden.

HTML (nur für Demo, es ist anpassbar)

<div class="button">
    <input type="radio" name="a" value="a" id="a" />
    <label for="a">a</label>
</div>
<div class="button">
    <input type="radio" name="a" value="b" id="b" />
    <label for="b">b</label>
</div>
<div class="button">
    <input type="radio" name="a" value="c" id="c" />
    <label for="c">c</label>
</div>
...

CSS

input[type="radio"] {
    display: none;
}
input[type="radio"]:checked + label {
    border: 1px solid red;
}

jsFiddle


6

Lassen Sie Optionsfelder ausgeblendet, und wählen Sie sie beim Klicken auf Bilder mit JavaScript aus und gestalten Sie Ihr Bild so, dass es wie ausgewählt aussieht. Hier ist das Markup -

<div id="radio-button-wrapper">
    <span class="image-radio">
        <input name="any-name" style="display:none" type="radio"/>
        <img src="...">
    </span>
    <span class="image-radio">
        <input name="any-name" style="display:none" type="radio"/>
        <img src="...">
    </span>
</div>

und JS

 $(".image-radio img").click(function(){
     $(this).prev().attr('checked',true);
 })

CSS

span.image-radio input[type="radio"]:checked + img{
    border:1px solid red;
}

4

Verwenden Sie einfach eine Klasse, um nur einige auszublenden ... basierend auf https://stackoverflow.com/a/17541916/1815624

/* HIDE RADIO */
.hiddenradio [type=radio] { 
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

/* IMAGE STYLES */
.hiddenradio [type=radio] + img {
  cursor: pointer;
}

/* CHECKED STYLES */
.hiddenradio [type=radio]:checked + img {
  outline: 2px solid #f00;
}
<div class="hiddenradio">
<label>
  <input type="radio" name="test" value="small" checked>
  <img src="http://placehold.it/40x60/0bf/fff&text=A">
</label>

<label>
  <input type="radio" name="test" value="big">
  <img src="http://placehold.it/40x60/b0f/fff&text=B">
</label>
</div>

<div class="">
<label>
  <input type="radio" name="test" value="small" checked>
  <img src="http://placehold.it/40x60/0bf/fff&text=A">
</label>

<label>
  <input type="radio" name="test" value="big">
  <img src="http://placehold.it/40x60/b0f/fff&text=B">
</label>
</div>


1

Hier ist eine einfache jQuery-UI-Lösung, die auf dem folgenden Beispiel basiert:

http://jqueryui.com/button/#radio

Geänderter Code:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>jQuery UI Button - Radios</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.11.3/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.3/jquery-ui.js"></script>
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script>
  $(function() {
    $( "#radio" ).buttonset();
  });
  </script>
</head>
<body>

<form>
  <div id="radio">
    <input type="radio" id="radio1" name="radio"><label for="radio1"><img src="image1.gif" /></label>
    <input type="radio" id="radio2" name="radio" checked="checked"><label for="radio2"><img src="image2.gif" /></label>
    <input type="radio" id="radio3" name="radio"><label for="radio3"><img src="image3.gif" /></label>
  </div>
</form>

</body>
</html>

jQueryUI kümmert sich um den Bildhintergrund, damit Sie wissen, welche Schaltfläche aktiviert ist.

Achtung: Wenn Sie eine Schaltfläche so einstellen möchten, dass sie über Javascript aktiviert oder deaktiviert ist, müssen Sie die Aktualisierungsfunktion aufrufen:

        $('#radio3').prop('checked', true).button("refresh");

0

Bilder können anstelle von Optionsfeldern mithilfe von Beschriftungs- und Bereichselementen platziert werden.

   <div class="customize-radio">
        <label>Favourite Smiley</label><br>
        <label for="hahaha">
        <input type="radio" name="smiley" id="hahaha">
        <span class="haha-img"></span>
        HAHAHA
        </label>
        <label for="kiss">
        <input type="radio" name="smiley" id="kiss">
        <span class="kiss-img"></span>
        Kiss
        </label>
        <label for="tongueOut">
        <input type="radio" name="smiley" id="tongueOut">
        <span class="tongueout-img"></span>
        TongueOut
        </label>
    </div>

Das Optionsfeld sollte ausgeblendet sein.

.customize-radio label > input[type = 'radio'] {
    visibility: hidden;
    position: absolute;
}

Das Bild kann im span-Tag angegeben werden.

.customize-radio label > input[type = 'radio'] ~ span{
    cursor: pointer;
    width: 27px;
    height: 24px;
    display: inline-block;
    background-size: 27px 24px;
    background-repeat: no-repeat;
}
.haha-img {
    background-image: url('hahabefore.png');
}

.kiss-img{
    background-image: url('kissbefore.png');
}
.tongueout-img{
    background-image: url('tongueoutbefore.png');
}

Um das Bild beim Klicken auf das Optionsfeld zu ändern, fügen Sie dem Eingabe-Tag den aktivierten Status hinzu.

.customize-radio label > input[type = 'radio']:checked ~ span.haha-img{
     background-image: url('haha.png');
}
.customize-radio label > input[type = 'radio']:checked ~ span.kiss-img{
    background-image: url('kiss.png');
}
.customize-radio label > input[type = 'radio']:checked ~ span.tongueout-img{
        background-image: url('tongueout.png');
}

Wenn Sie Fragen haben, lesen Sie den folgenden Link: Wie ich die Lösung aus dem folgenden Blog entnommen habe: http://frontendsupport.blogspot.com/2018/06/cool-radio-buttons-with-images.html


0

Hier ist ein sehr einfaches Beispiel

input[type="radio"]{
   display:none;
}

input[type="radio"] + label
{
    background-image:url(http://www.clker.com/cliparts/c/q/l/t/l/B/radiobutton-unchecked-sm-md.png);
    background-size: 100px 100px;
    height: 100px;
    width: 100px;
    display:inline-block;
    padding: 0 0 0 0px;
    cursor:pointer;
}

input[type="radio"]:checked + label
{
    background-image:url(http://www.clker.com/cliparts/M/2/V/6/F/u/radiobutton-checked-sm-md.png);
}
<div>
  <input type="radio" id="shipadd1" value=1 name="address" />
  <label for="shipadd1"></label>
  value 1
</div>

<div>
  <input type="radio" id="shipadd2" value=2 name="address" />
  <label for="shipadd2"></label>
  value 2
</div>

Demo: http://jsfiddle.net/La8wQ/2471/

Dieses Beispiel basiert auf diesem Trick: https://css-tricks.com/the-checkbox-hack/

Ich habe es getestet auf: Chrom, Firefox, Safari

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.