Input type checkbox checked: — HTML: HyperText Markup Language

Обман с флажками с помощью CSS / Coder’s Block

Флажки — это здорово. Объедините их с правильным CSS, и вы сможете реализовать несколько действительно крутых трюков. Эта статья призвана продемонстрировать некоторые творческие вещи, которые вы можете делать с помощью флажков. Читайте дальше и имейте в виду, что в демонстрациях в этой статье используется без JavaScript .

Все начинается с HTML.

  

Здесь нет ничего сложного. на 9Атрибут 0013 на соответствует id на , поэтому нажатие на переключит флажок . Это важно, потому что наш следующий шаг — скрыть .

 ввод { 
позиция: абсолютная;
слева: -9999px;
}

Почему не отображается : нет ? Потому что это приведет к его игнорированию программами чтения с экрана и табуляцией клавиатуры. Этот метод сохраняет в потоке, но скрывает его за кадром.

Сокрытие облегчает нам выполнение собственных задач. Нам по-прежнему нужно передать состояние проверено/не проверено, но мы можем сделать это с помощью . Здесь начинается вечеринка.

 input:checked + label { 
/* awesome styles */
}

Мы используем комбинацию псевдокласса :checked и соседнего селектора + , чтобы сказать «когда флажок установлен , найти <метка> сразу после него и примените потрясающие стили». Вы даже можете использовать псевдоэлементы ( ::before и ::after ) внутри для большей свободы творчества.

 input:checked + label::before { 
/* стили для индикатора «включено» */
}

Хорошо, давайте посмотрим на это в действии. В этой демонстрации используется базовая формула, которую мы только что обсуждали, чтобы превратить обычные флажки во что-то более впечатляющее.

См. Обман с флажком пера: простой переключатель Уилла Бойда (@lonekorean) на CodePen.

Самое приятное то, что они все еще флажки. Оберните их в

, и они будут отправлены, как вы и ожидали. Мы меняем внешность, но не поведение.

До сих пор речь шла о стиле , но мы можем пойти дальше. Эта демонстрация динамически скрывает/показывает части формы в зависимости от выбора пользователя.

См. «Обман с флажком пера: раскрытие формы» Уилла Бойда (@lonekorean) на CodePen.

Псевдокласс :checked работает с переключателями так же, как и с флажками. Имея это в виду, вот HTML для «Как вы узнали о нас?» Радио-кнопки.

  






Индикаторы радиокнопок отображаются в пределах с использованием комбинации ::before (для внешнего кольца) и ::after (для зеленой точки). Отображение/скрытие ::после , когда переключатель установлен/снят, достаточно просто.

 .side-label::after { 
display: none;

/* другие стили */
}

input:checked + .side-label::after {
display: block;
}

скрыт до тех пор, пока не будет установлен переключатель «Другое…». Я скрываю
с display: none , потому что на этот раз я хочу, чтобы содержимое игнорировалось программами чтения с экрана и табуляцией клавиатуры до тех пор, пока оно не будет раскрыто. CSS для отображения
при включенном переключателе выглядит следующим образом.

 #how-other:checked ~ .how-other-disclosure { 
display: block;
}

До сих пор мы использовали селектор соседнего брата + , но на этот раз мы используем ~ общий селектор родственных элементов. Он похож, но может найти несмежных братьев и сестер, например, наш

.

Мы можем повторно использовать методы из предыдущей демонстрации для создания виджета дерева папок, который имеет аналогичное поведение скрытия/отображения.

См. «Обман пера с флажком: дерево папок» Уилла Бойда (@lonekorean) на CodePen.

HTML для одной папки приведен ниже. — это папка, а два элемента — это «файлы» внутри нее.

  

Значки Font Awesome используются для обозначения проверенного (открытого) и непроверенного (закрытого) состояний.

 label::before, a::before { 
display: block;
позиция: абсолютная;
сверху: 6px;
осталось: -25px;
семейство шрифтов: «FontAwesome»;
}

label::before {
content: '\f07b'; /* закрытая папка */
}

input:checked + label::before {
content: '\f07c'; /* открыть папку */
}

a::before {
content: '\f068'; /* тире */
}

Содержимое папки переключается с помощью общего родственного селектора ~ . Вот почему в HTML есть дополнительные обертки

, чтобы этот селектор не «просачивался» и не открывал родственные папки.

 ввод: проверено ~ .sub { 
дисплей: блок;
}

Естественно, папки могут быть вложенными. Просто перетащите HTML для другой папки в

. Нажмите на папку «Многоцветный» в демоверсии, чтобы увидеть пример.

Наконец, давайте поговорим о кнопке сброса.

  

Кнопки сброса формы теперь редко используются, но для одного это достойный случай. Нажатие на нее возвращает все флажки в исходное неотмеченное состояние, закрывая все папки. Аккуратный.

В этой демонстрации элементы разбиваются на два отдельных списка в зависимости от того, отмечены они как выполненные или нет.

См. Обман с флажком пера: список дел от Уилла Бойда (@lonekorean) на CodePen.

Обновление: некоторые люди отмечают, что по соглашению флажки должны быть квадратными, в отличие от того, что я сделал в этой демонстрации. Они не ошибаются.

HTML выглядит следующим образом.

 




Механика разделения списка реализована с помощью CSS flexbox. Вот соответствующий CSS.

 .items { 
display: flex;
flex-direction: столбец;
}

.done {
заказ: 1;
}

input:checked + label {
order: 2;
}

.undone {
заказ: 3;
}

этикетка {
порядок: 4;
}

CSS flexbox позволяет напрямую переставлять элементы с помощью свойства order . Значение заказа <метка> изменяется с 4 на 2 , когда его флажок установлен, перемещая его из-под «Не выполнено»

под «Готово»

.

К сожалению, навигация с помощью клавиатуры и многие средства чтения с экрана будут следовать порядку элементов в DOM, даже если они были визуально изменены с помощью CSS flexbox. Это делает заголовки «Готово» и «Не выполнено» бесполезными для программ чтения с экрана, поэтому я добавил aria-hidden="true" им — лучше их игнорировать, чем вызывать путаницу. Кроме того, разделенным списком по-прежнему можно полностью управлять с помощью клавиатуры, а средства чтения с экрана по-прежнему сообщают о состоянии элемента (отмечен/не отмечен).

Если вам интересны счетчики рядом с «Готово» и «Не выполнено», они генерируются с помощью счетчиков CSS. Прочтите эту статью, если хотите узнать больше.

Последняя демонстрация. Здесь показано, как выделить сечение данных, которое соответствует выбранному критерию.

См. Обман с флажком пера: групповой фильтр Уилла Бойда (@lonekorean) на CodePen.

Вот сокращенный HTML. Обратите внимание, что атрибут data-teams представляет собой список разделенных пробелами атрибутов переключателя id . Вот как мы сопоставляем персонажей с командами.

  



<ул>


  • Ангел


    png" alt="">

  • Что касается доступности, я использую пустые атрибуты alt , потому что имена персонажей уже находятся в тегах

    — нет смысла читать каждое имя дважды. Кроме того, поскольку я на самом деле не скрываю элементов (просто сжимаю и исчезаю), это упрощает работу программ чтения с экрана, чтобы они пропускали невыделенные символы. Мне нужно только скрыть

    .

    Вот CSS, который выделяет персонажей, когда выбрана их команда.

     #original:checked ~ .characters [data-teams~="original"] h3, 
    #force:checked ~ .characters [data-teams~="force"] h3,
    #factor:checked ~ .characters [ data-teams~="factor"] h3,
    #hellfire:checked ~ .characters [data-teams~="hellfire"] h3 {
    /* стили для отображения имени персонажа */
    }

    #original:checked ~ . символы [data-teams~="original"] img,
    #force:checked ~ . characters [data-teams~="force"] img,
    #factor:checked ~ .characters [data-teams~="factor"] img,
    #hellfire:checked ~ .characters [data-teams~="hellfire"] img {
    /* стили для отображения аватара персонажа */
    }

    Я знаю, что эти селекторы выглядят неубедительно, но они не так уж плохи. Давайте разберем строку 1 в качестве примера. Говоря об этом, «когда проверяется элемент с id «оригинал», найдите в элементе «символы» родственного элемента что-либо с атрибутом data-teams , содержащим «оригинал», затем найдите

    внутри. Повторите для слов «сила», «фактор» и «адский огонь» в строках 2–4. Теперь проделайте все это снова по строкам 8-11, но для вместо

    .

    Надеюсь, вы получили такое же удовольствие, играя с этими демонстрационными примерами, как и я, создавая их. Мне было очень интересно посмотреть, что я могу сделать с чем-то таким скромным, как флажок. Я не стесняюсь использовать JavaScript, когда это уместно, но приятно иметь возможность делать так много без него. Спасибо за чтение!

    Привязка: Флажки | Aurelia

    Введение

    Aurelia поддерживает двустороннюю привязку различных типов данных к элементам ввода флажков.

    Логические значения

    Привяжите логическое свойство к проверенному атрибуту элемента ввода, используя checked.bind="myBooleanProperty" .

      приложение класса экспорта {
        материнская плата = ложь;
        процессор = ложь;
        память = ложь;
      }
      
       
       приложение класса экспорта {
        материнская плата = ложь;
        процессор = ложь;
        память = ложь;
      }
      
       
      <шаблон>
        <форма>
           
    Товары
    материнская плата = ${материнская плата}
    ЦП = ${ЦП}
    память = ${память}

    Массив чисел

    Набор элементов-флажков представляет собой интерфейс множественного выбора.

    Если у вас есть массив, который служит списком «выбранных элементов», вы можете привязать массив к атрибуту
    проверенного каждого входа. Система привязки будет отслеживать статус проверки ввода, добавляя значение ввода в массив, когда ввод проверен, и удаляя значение ввода из массива, когда ввод не проверен.

    Чтобы определить «значение» входа, привяжите 9 входов0012 модель атрибут: model.bind="product.id" .

      приложение класса экспорта {
        продукты = [
          {идентификатор: 0, имя: «Материнская плата»},
          {идентификатор: 1, имя: 'ЦП'},
          {идентификатор: 2, имя: «Память»},
        ];
      
        выбранныепродуктидс = [];
      }
      
       
      интерфейс экспорта IProduct {
          идентификационный номер;
          имя: строка;
      }
      
      приложение класса экспорта {
        продукты: IProduct[] = [
          {идентификатор: 0, имя: «Материнская плата»},
          {идентификатор: 1, имя: 'ЦП'},
          {идентификатор: 2, имя: «Память»},
        ];
      
        selectedProductIds: число[] = [];
      }
      
       
      <шаблон>
        <форма>
           
    Товары

    Массив объектов

    Числа — не единственный тип значений, которые вы можете хранить в массиве «выбранных элементов». Система привязки поддерживает все типы, включая объекты. Вот пример, который добавляет и удаляет объекты «продукт» из массив selectedProducts

    с помощью флажка привязки данных.

      приложение класса экспорта {
        продукты = [
          {идентификатор: 0, имя: «Материнская плата»},
          {идентификатор: 1, имя: 'ЦП'},
          {идентификатор: 2, имя: «Память»},
        ];
      
        выбранные продукты = [];
      }
      
       
      интерфейс экспорта IProduct {
          идентификационный номер;
          имя: строка;
      }
      
      приложение класса экспорта {
        продукты: IProduct[] = [
          {идентификатор: 0, имя: «Материнская плата»},
          {идентификатор: 1, имя: 'ЦП'},
          {идентификатор: 2, имя: «Память»},
        ];
      
        selectedProducts: IProduct[] = [];
      }
      
       
      <шаблон>
        <форма>
           
    Товары

    Массив объектов с Matcher

    Вы можете столкнуться с ситуациями, когда объект, к которому привязана модель вашего входного элемента, не имеет ссылочного равенства ни на один из объектов в проверенном массиве. Объекты могут совпадать по идентификатору, но они могут не быть одним и тем же экземпляром объекта. Чтобы поддержать этот сценарий, вы можете переопределить «сопоставитель» Aurelia по умолчанию, который представляет собой функцию сравнения на равенство, которая выглядит следующим образом: (a, b) => a === b . Вы можете заменить функцию по вашему выбору, которая имеет правильную логику для сравнения ваших объектов.

      приложение класса экспорта {
        выбранные продукты = [
          {идентификатор: 1, имя: 'ЦП'},
          {id: 2, имя: 'Память'}
        ];
      
        productMatcher = (a, b) => a.
    id === b.id; }
      интерфейс экспорта IProduct {
          идентификационный номер;
          имя: строка;
      }
      
      приложение класса экспорта {
        selectedProducts: IProduct[] = [
          {идентификатор: 1, имя: 'ЦП'},
          {id: 2, имя: 'Память'}
        ];
      
        productMatcher = (a, b) => a.id === b.id;
      }
      
       
      <шаблон>
        <форма>
           
    Товары
    <метка> Системная плата <метка> Процессор <метка>
    Память Выбранные продукты: <ул>
  • for="product of selectedProducts">${product.id} - ${product.name}
  • Массив строк

    Наконец, вот пример добавления и удаления строк из массива selectedProducts с использованием привязки данных флажка. Этот пример уникален, потому что он не использует model.bind для присвоения значения каждому флажку. Вместо этого используется стандартный входной атрибут value . Обычно мы не можем использовать стандартный атрибут value в сочетании с привязкой checked, потому что он принуждает все, что ему назначено, к строке. В этом примере используется массив строк, поэтому все работает нормально.

      приложение класса экспорта {
        products = ['Материнская плата', 'ЦП', 'Память'];
        выбранные продукты = [];
      }
      
       
      приложение класса экспорта {
        products: string[] = ['Материнская плата', 'ЦП', 'Память'];
        selectedProducts: строка[] = [];
      }
      
       
     <шаблон> <форма>
    Товары

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *