Как сделать так, чтобы текст метки отображался рядом с переключателем, если сам переключатель использует метку для своего стиля - PullRequest
0 голосов
/ 18 марта 2020

Я написал небольшой компонент-переключатель, который можно использовать вместо флажка.

То, как он работает, заключается в том, что сам элемент метки является переключателем, что означает, что он должен быть доступен и работать, если нажата либо метка, либо метка.

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

Демонстрационная версия здесь: https://svelte.dev/repl/84cfc5281b5d4289b99b222b338f48ae?version=3.20.1

Код состоит из следующего CSS:

.switch {
    position: relative;
    display: inline-block;
    width: 60px;
    height: 34px;
  }

  .switch input {
    opacity: 0;
    width: 0;
    height: 0;
  }

  .slider {
    position: absolute;
    cursor: pointer;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: #ccc;
    -webkit-transition: 0.4s;
    transition: 0.4s;
    border-radius: 34px;
  }

  .slider:before {
    position: absolute;
    content: "";
    height: 26px;
    width: 26px;
    left: 4px;
    bottom: 4px;
    background-color: white;
    -webkit-transition: 0.4s;
    transition: 0.4s;
    border-radius: 50%;
  }

  input:checked + .slider {
    background-color: #2196f3;
  }

  input:checked + .slider {
    box-shadow: 0 0 1px #2196f3;
  }

  input:checked + .slider:before {
    -webkit-transform: translateX(26px);
    -ms-transform: translateX(26px);
    transform: translateX(26px);
  }

и следующего html :

<label class="switch">
  <input type="checkbox" bind:checked />
  <span class="slider" />
  <span>Accept Terms</span>
</label>

Очевидно, что простое решение - убрать текст с метки, но тогда я теряю доступность, что не идеально.

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Вы можете сделать это, поместив текстовый диапазон как абсолютный:

span:last-child {
    position: absolute;
    white-space: nowrap;
    left: calc(100% + 10px);
    top: 6px
}
0 голосов
/ 18 марта 2020

Поскольку элемент переключателя имеет position: relative, а slider имеет фиксированный вид, вы можете добавить position: absolute к <span> с текстом.

.slider + span {
  position: absolute;
  left: 70px;
}

Затем вы можете расположить его как Вы хотите.
Вы также можете использовать white-space: nowrap, чтобы сделать текст в одну строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...