Прапорці на веб-сторінках - як зробити їх більшими?


113

Стандартні прапорці, що відображаються в більшості браузерів, досить малі та не збільшуються в розмірах, навіть якщо використовується більший шрифт. Який найкращий, незалежний від браузера спосіб відображення великих прапорців?

Відповіді:


144

Якщо це може допомогти будь-кому, ось простий CSS як точка, що стрибає. Перетворює його в основний округлий квадрат, достатньо великий для великих пальців із зміненим кольором фону.

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" />


@GabrielW Правильно. Просто використовуйте еквівалент для інших
taylorcressy

@taylorcressy За винятком IE (також IE 11) caniuse.com/#search=Appearance - але добре працював для інших браузерів. Дякую!
CodeBrauer

16
Було б добре, якби всередині був галочок :)
Роберт Кінг

@Paul: Дякую за спільний доступ. Мені було цікаво, як ти маєш справу з позначкою галочки. Якщо фон просто встановлений у кольорі, біла галочка у вікні більше не видно. Чи є просте рішення? Я спробував додати об'єкт html для перевірки в: раніше, але цікаво, чи є альтернатива
PBandJen

1
Я використовував темніший колір для перевіреного кольору фону, і це не так вже й погано без "перевірки"
JR Lawhorne

47

Насправді є спосіб зробити їх більшими, прапорці як і все інше (навіть кадр, як кнопка у Facebook).

Оберніть їх у "збільшений" елемент:

.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>

Це може виглядати трохи "переробленим", але це працює.

Звичайно, ви можете змусити цей div float: ліворуч і поставити свою мітку, крім нього, float: left too.


1
Зауважте, що на Firefox (версії 36) це призведе до дуже розмитого вигляду. Хоча це добре масштабує в Chrome. Демонстрація: jsfiddle.net/tzp858j3
Kat

чи немає кращого рішення, яке НЕ виглядає масштабним?
basZero

3
Не можна zoom: 2та transform: scale(2)безпосередньо застосувати до прапорця? Для чого потрібна обгортка?
Atav32

Дякую! схоже, що ваш код враховує більше браузерів, тому я можу коли-небудь перевірити, але він працює на все, що я спробував. Особливо приємно на моєму I-телефоні, де прапорці якраз і стають точками! До речі, ви можете розмістити менші дробові масштаби (наприклад, 1,5) у місцях, де цей фрагмент ставить "2", і серед середнього розміру.
Ренді

26

Спробуйте цей CSS

input[type=checkbox] {width:100px; height:100px;}

2
Не зовсім крос-браузер (краще встановити клас у HTML та використовувати селектор класів у CSS), але це може бути кращим рішенням, ніж мій. +1
Хармен

1
Я, наприклад, використовував ширину та висоту. Можливо, поєднання Harmen і мого рішення - це шлях, оскільки вам може знадобитися більше стилів, ніж CSS може надати.
Collin White

6
Це працюватиме лише в деяких браузерах, а не у багатьох сучасних.
RJ Owen

1
Це працює на сафарі ipad, де прапорці часто мають бути більшими, щоб користувачам було легше натискати.
користувач3032973

3
Основне обмеження полягає в тому, що він взагалі не працює у Firefox (як у Firefox 36) і насправді виглядатиме неприродно (прапорець має звичайний розмір, але оббивка навколо нього заповнює область 100 x 100 пікселів.
Кет

5

Я спробував змінити paddingі, marginі добре, widthі height, і, нарешті, виявив, що якщо ви просто збільшите масштаб, воно буде працювати:

input[type=checkbox] {
    transform: scale(1.5);
}

1

Ось хитрість, яка працює в останніх браузерах (IE9 +) як єдине рішення для CSS, яке можна покращити за допомогою javascript для підтримки IE8 та нижче.

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

Стиліруйте те, labelяк ви хочете, щоб виглядав прапорець

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

Для javascript ви зможете додати класи до мітки, щоб показати стан. Також було б розумно використовувати таку функцію:

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

EDIT для зміни #checkboxIDстилів


дивіться stackoverflow.com/a/3772914/190135 за посиланням на повний вихідний код для цієї методики
AlexChaffee

1

Я пишу на додаток для запису на телефон, і прапорці залежать від розміру, вигляду тощо. Тому я зробив свій власний простий прапорець:

Спочатку HTML-код:

<span role="checkbox"/>

Потім 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);
}

Для перемикання стану прапорців я використовував JQuery:

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

Але це легко зробити без нього ...

Сподіваюся, це може допомогти!


1

Чистий сучасний лише CSS 2020 року рішення для , без розмитого масштабування та не зручного перетворення. І з галочкою! =)

Добре працює у браузерах Firefox та Chromium.

Таким чином, ви можете керувати своїми прапорцями суто ADAPTIVE , просто встановивши батьківський блок, font-heightі він буде рости разом з текстом!

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>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.