Pola wyboru na stronach internetowych - jak je powiększyć?

115

Standardowe pola wyboru renderowane w większości przeglądarek są dość małe i nie powiększają się, nawet jeśli używana jest większa czcionka. Jaki jest najlepszy, niezależny od przeglądarki sposób wyświetlania większych pól wyboru?

Tony the Pony
źródło

Odpowiedzi:

144

Jeśli to może pomóc każdemu, tutaj jest prosty CSS jako punkt wyjścia. Zmienia go w podstawowy zaokrąglony kwadrat, wystarczająco duży, aby pomieścić kciuki z przełączanym kolorem tła.

input[type='checkbox'] {
    -webkit-appearance:none;
    width:30px;
    height:30px;
    background:white;
    border-radius:5px;
    border:2px solid #555;
}
input[type='checkbox']:checked {
    background: #abd;
}
<input type="checkbox" />

Paweł
źródło
@GabrielW Zgadza się. Po prostu użyj odpowiednika dla innych
taylorcressy
@taylorcressy Z wyjątkiem IE (także IE 11) caniuse.com/#search=Appearance - ale działało dobrze w innych przeglądarkach. Dzięki!
CodeBrauer
16
byłoby miło, gdyby w środku też był kleszcz :)
robert king
@Paul: Dzięki za udostępnienie. Zastanawiałem się, jak sobie radzisz z wyświetlaniem znacznika wyboru. Gdy tło jest już ustawione na kolor, biały znacznik wyboru w polu nie jest już widoczny. Czy istnieje proste rozwiązanie? Próbowałem dodać jednostkę html do sprawdzenia w: przed, ale zastanawiałem się, czy istnieje alternatywa
PBandJen
1
Użyłem ciemniejszego koloru tła w kratkę i nie jest tak źle bez „czeku”
JR Lawhorne
47

Właściwie jest sposób, aby je powiększyć, pola wyboru, jak wszystko inne (nawet ramka iframe, taka jak przycisk na Facebooku).

Umieść je w „powiększonym” elemencie:

.double {
  zoom: 2;
  transform: scale(2);
  -ms-transform: scale(2);
  -webkit-transform: scale(2);
  -o-transform: scale(2);
  -moz-transform: scale(2);
  transform-origin: 0 0;
  -ms-transform-origin: 0 0;
  -webkit-transform-origin: 0 0;
  -o-transform-origin: 0 0;
  -moz-transform-origin: 0 0;
}
<div class="double">
  <input type="checkbox" name="hello" value="1">
</div>

Może wyglądać na nieco „przeskalowaną”, ale działa.

Oczywiście możesz sprawić, że div float: left i umieścić obok siebie etykietę, float: left.

FlorianB
źródło
1
Zwróć uwagę, że w przeglądarce Firefox (od wersji 36) spowoduje to bardzo rozmyty wygląd. Jednak dobrze skaluje się w Chrome. Demo: jsfiddle.net/tzp858j3
Kat,
czy nie ma lepszego rozwiązania, które NIE wygląda na skalowane?
basZero
3
Nie można zoom: 2i transform: scale(2)można go zastosować bezpośrednio do pola wyboru? Dlaczego potrzebuje opakowania?
Atav32
Dzięki! wygląda na to, że twój kod bierze pod uwagę więcej przeglądarek niż kiedykolwiek mogłem przetestować, ale działa na wszystkim, czego próbowałem. Szczególnie ładne na moim I-phone, gdzie pola wyboru stają się kropkami! Przy okazji, możesz umieścić mniejsze skalowanie ułamkowe (np. 1.5) w miejscach, w których ten snipet wstawia "2", i dla średniej wielkości pola wyboru.
Randy
26

Wypróbuj ten CSS

input[type=checkbox] {width:100px; height:100px;}
Collin White
źródło
2
Nie do końca między przeglądarkami (lepiej jest ustawić klasę w HTML i użyć selektora klas w CSS), ale może to być lepsze rozwiązanie niż moje. +1
Harmen
1
Na przykład użyłem szerokości i wysokości. Prawdopodobnie połączenie Harmena i mojego rozwiązania jest najlepszym rozwiązaniem, ponieważ możesz potrzebować więcej stylizacji, niż CSS może zapewnić.
Collin White,
6
Będzie to działać tylko w niektórych przeglądarkach, a nie w wielu nowoczesnych.
RJ Owen,
1
Działa to na iPadzie Safari, gdzie pola wyboru często muszą być większe, aby ułatwić użytkownikom klikanie.
user3032973
3
Głównym ograniczeniem jest to, że nie działa w ogóle w Firefoksie (jako Firefoksa 36) i będzie w rzeczywistości wyglądają dość nienaturalnie (pole wyboru jest regularny wielkości ale wyściółka wokół wypełnia obszar 100 x 100px.
Kat
5

Próbowałem zmienić paddingi margini dobrze jak widthi height, a potem w końcu stwierdziłem, że jeśli po prostu zwiększysz skalę, to zadziała:

input[type=checkbox] {
    transform: scale(1.5);
}
Justin
źródło
1

Oto sztuczka, która działa w najnowszych przeglądarkach (IE9 +) jako jedyne rozwiązanie CSS, które można ulepszyć za pomocą javascript do obsługi IE8 i starszych.

<div>
  <input type="checkbox" id="checkboxID" name="checkboxName" value="whatever" />
  <label for="checkboxID"> </label>
</div>

Stylizuj labeltak, jak chcesz, aby wyglądało pole wyboru

#checkboxID
{
  position: absolute fixed;
  margin-right: 2000px;
  right: 100%;
}
#checkboxID + label
{
  /* unchecked state */
}
#checkboxID:checked + label
{
  /* checked state */
}

W przypadku javascript będziesz mógł dodać klasy do etykiety, aby pokazać stan. Warto też skorzystać z następującej funkcji:

$('label[for]').live('click', function(e){
  $('#' + $(this).attr('for') ).click();
  return false;
});

EDYCJA, aby zmodyfikować #checkboxIDstyle

zzzzBov
źródło
Zobacz stackoverflow.com/a/3772914/190135, aby uzyskać link do pełnego kodu źródłowego tej techniki
AlexChaffee
1

Piszę aplikację phonegap, a pola wyboru różnią się rozmiarem, wyglądem itp. Dlatego stworzyłem własne proste pole wyboru:

Najpierw kod HTML:

<span role="checkbox"/>

Następnie CSS:

[role=checkbox]{
    background-image: url(../img/checkbox_nc.png);
    height: 15px;
    width: 15px;
    display: inline-block;
    margin: 0 5px 0 5px;
    cursor: pointer;
}

.checked[role=checkbox]{
    background-image: url(../img/checkbox_c.png);
}

Aby przełączyć stan pola wyboru, użyłem JQuery:

CLICKEVENT='touchend';
function createCheckboxes()
{
    $('[role=checkbox]').bind(CLICKEVENT,function()
    {
        $(this).toggleClass('checked');
    });
}

Ale można to łatwo zrobić bez tego ...

Mam nadzieję, że to pomoże!

wesamot
źródło
1

Tylko nowoczesna decyzja CSS 2020 , bez rozmytego skalowania lub nieporęcznej transformacji. I z kleszczem! =)

Działa dobrze w przeglądarkach opartych na Firefox i Chromium.

Możesz więc rządzić swoimi polami wyboru wyłącznie ADAPTACYJNIE , po prostu ustawiając bloki nadrzędne, font-heighta będzie rosnąć wraz z tekstem!

input[type='checkbox'] {
  -moz-appearance: none;
  -webkit-appearance: none;
  appearance: none;
  vertical-align: middle;
  outline: none;
  font-size: inherit;
  cursor: pointer;
  width: 1.0em;
  height: 1.0em;
  background: white;
  border-radius: 0.25em;
  border: 0.125em solid #555;
  position: relative;
}

input[type='checkbox']:checked {
  background: #adf;
}

input[type='checkbox']:checked:after {
  content: "✔";
  position: absolute;
  font-size: 90%;
  left: 0.0625em;
  top: -0.25em;
}
<label for="check1"><input type="checkbox" id="check1" checked="checked" /> checkbox one</label>
<label for="check2"><input type="checkbox" id="check2" /> another checkbox</label>

FlameStorm
źródło