Nano Hash - криптовалюты, майнинг, программирование

Мне нужно развернуть и свернуть чистый аккордеон css, когда я нажимаю клавишу Enter на клавиатуре для веб-доступности

Я создал аккордеон с флажком ввода. Js не используется. Мне нужно развернуть и свернуть аккордеон, когда я нажимаю клавишу Enter на клавиатуре. Это для веб-доступности. пожалуйста, помогите мне решить это.

HTML-код ниже

<div class="tabs">
        <div class="tab">
          <input type="checkbox" id="chck1" />
          <label class="tab-label" for="chck1">
            Item 1
          </label>
          <div class="tab-content">
            Lorem ipsum dolor sit amet consectetur, adipisicing elit. Ipsum, reiciendis!
          </div>
        </div>
      </div>

CSS-код ниже

$midnight: #2c3e50;
$clouds: #ecf0f1;
input {
  position: absolute;
  opacity: 0;
  z-index: -1;
}
.tab {
  width: 100%;
  color: white;
  overflow: hidden;
  &-label {
    display: flex;
    justify-content: space-between;
    padding: 1em;
    background: $midnight;
    font-weight: bold;
    cursor: pointer;
  }
  &-content {
    max-height: 0;
    padding: 0 1em;
    color: $midnight;
    background: white;
    transition: all .35s;
  }
}
input:checked {
  + .tab-label {
    background: darken($midnight, 10%);
    &::after {
      transform: rotate(90deg);
    }
  }
  ~ .tab-content {
    max-height: 100vh;
    padding: 1em;
  }
}

Ответы:


1

Проблема с вашим текущим шаблоном

Я знаю, что это расстраивает, когда вы задаете простой вопрос о том, как мне это сделать, а кто-то говорит, сделайте это вместо этого, но, поскольку вы отметили это как доступность, способ, которым вы это реализуете в данный момент, проблематичен.

Например, <input type="checkbox"> не должен существовать вне <form>, поэтому, чтобы сделать ваш HTML действительным, вам придется обернуть его в элемент <form>. Затем это изменяет поведение пользователя программы чтения с экрана, поскольку программа чтения с экрана переходит в режим форм, который изменяет поведение программы чтения с экрана. Есть и другие причины, такие как режим форм, ожидающий, что Enter отправит что-то и т. д. и т. д.

Поскольку вы, кажется, ищете что-то, что будет работать без JavaScript (в качестве запасного варианта... вам все еще нужен JavaScript для постепенного повышения доступности), могу ли я предложить гораздо более простой способ.

<details> и <summary>

Нечасто я могу прописать волшебную таблетку для решения проблемы, но <details> и <summary> на самом деле довольно крутые.

Во-первых, поддержка довольно хорошая, и большая часть семантики обрабатывается автоматически!

Способ его использования довольно прост: <details> — это ваша внешняя оболочка, содержащая элемент <summary>. Элемент <summary> фактически является заголовком раздела аккордеона, а затем вы можете добавить все, что хотите, в разделе <details> под ним.

См. следующую скрипку:

<details>
   <summary>Item 1</summary>
   <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Ipsum, reiciendis!</p>
</details>

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

Как насчет Internet Explorer и т. д.?

Теперь есть пара проблем с <details> и <summary>. Internet Explorer не поддерживает его.

Здесь мы используем JavaScript для улучшения доступности.

Если мы немного изменим HTML, включив в него aria-expanded, tabindex="0" и role="button", это решит проблему. Однако нет смысла делать это для любого браузера, кроме IE, поэтому я бы добавил его условно.

<details>
       <summary role="button" aria-expanded="false" tabindex="0">Item 1</summary>
       <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Ipsum, reiciendis!</p>
    </details>
    <details>
       <summary role="button" aria-expanded="false" tabindex="0">Item 2</summary>
       <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Ipsum, reiciendis!</p>
    </details>

Вы также можете добавить aria-controls для полноты картины, но я хотел дать вам решение, совместимое на 99 %, как можно проще.

Также имейте в виду, что вам нужно будет обрабатывать переключение состояния aria-expanded и фактически скрывать и отображать содержимое и т. д.

Полифилл, который я нашел, который может помочь, и последнее слово о заголовках

Это полифилл Я обнаружил, что для <details> и <summary> это выглядит неплохо. Я подтвердил, что это лицензия MIT, поэтому вы можете ее использовать.

Я бы поделился своим собственным полифиллом, но он имеет несколько зависимостей, тогда как этот является автономным.

похоже, что он также касается части, которую я до сих пор не обсуждал, — заголовков. Если вы используете заголовки (от <h2> до <h6>) для обозначения каждого раздела (зависит от структуры страницы, правильной или нет), то в идеале они должны располагаться вокруг <summary>.

Это потому, что <summary> рассматривается как кнопка. Однако, кроме заголовков и элементов раздела, почти все остальное может быть включено в элемент <summary>, поскольку он принимает фразовое содержание.

**В большинстве случаев я бы сказал, что полезно обернуть <summary> в соответствующий уровень от <h2> до <h6> из-за того, как пользователи программ чтения с экрана перемещаются, но это не является обязательным требованием. **

Стайлинг и т.д.

Последнее, что может быть не сразу очевидно. Если вы хотите применить стиль на основе текущего начала (расширенный/закрытый), он предоставляет атрибут open при расширении.

<details open> (расширенный) и <details> (закрытый).

Вы можете использовать это для селекторов CSS с details['open'] для оформления контейнера и details[open]>summary для оформления сводки.

24.09.2020

2
  • плохая идея, зачем прикреплять Enter только к определенному элементу html 24.09.2020
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..