Sidenav в стиле Stripe с помощью React

Есть ли у кого-нибудь идеи, как я могу добиться боковой навигации на странице документации полосы https://stripe.com/docs Боковая навигационная панель имеет вложенные элементы. Мне было интересно, как, щелкнув «Платежи» на домашней странице, я могу открыть навигацию стороны платежей и ее вложенный список и выполнить перенаправление на страницу платежей. Я знаю, что это не имеет смысла, но если вы щелкните страницу документации и попытаетесь, вы поймете, чего я пытаюсь достичь.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
0
93
1

Ответы 1

Вы можете добиться аналогичного поведения с переходом высоты CSS. На рабочем столе они кажутся довольно плавными (60 кадров в секунду достижимы, но не через полный переходный период). Если вам нужно больше контроля (например, закрыть другие элементы навигации, когда другие открыты), вы можете удалить элементы флажков и изменить элементы меток на «h2». Затем установите прослушиватель «onclick» для элементов «h2» в коде JS, который добавит класс (со стилями из «input: checked ~ ul») к выбранному «ul».

:root {
  --liHeight: 1em
}

label {
  cursor: pointer
}

ul {
  opacity: 0;
  height: 0px;
  overflow: hidden;
  transition: 0.3s;
}

ul li {
  height: var(--liHeight);
}

input {
  position: absolute;
  opacity: 0;
}

input:checked ~ ul {
  opacity: 1;
  position: initial;
  height: calc(7 * var(--liHeight));
}
<!DOCTYPE html>
<html>
<head>
  <meta charset = "utf-8">
  <meta name = "viewport" content = "width=device-width">
  <title>JS Bin</title>
</head>
<body>
  <div class = "item">
    <label for = "item1">
      Item 1
    </label>
    <input id = "item1" type = "checkbox"/>
    <ul>
      <li>1</li>
      <li>1</li>
      <li>1</li>
      <li>1</li>
      <li>1</li>
      <li>1</li>
    </ul>
  </div>
  <div class = "item">
    <label for = "item2">
      Item 2
    </label>
    <input id = "item2" type = "checkbox"/>
    <ul>
      <li>1</li>
      <li>1</li>
      <li>1</li>
      <li>1</li>
      <li>1</li>
      <li>1</li>
    </ul>
  </div>
  <div class = "item">
    <label for = "item3">
      Item 3
    </label>
    <input id = "item3" type = "checkbox"/>
    <ul>
      <li>1</li>
      <li>1</li>
      <li>1</li>
      <li>1</li>
      <li>1</li>
      <li>1</li>
    </ul>
  </div>
</body>
</html>

Другое решение - написать JS-анимацию, например, с использованием API «window.requestAnimationFrame», чтобы анимировать высоту элемента «ul». (Я думаю, что именно это и происходит на stripe.com)

Другие вопросы по теме