Передача буквы в MD C Переключатель не работает внутри выдвижного ящика MD C - PullRequest
0 голосов
/ 02 апреля 2020

Переключатель MD C внутри выдвижного ящика MD C (RTL) имеет большой палец, который при включении помещается справа, а не слева. Я хочу, чтобы большой палец находился слева, когда он выключен, и справа, когда он включен (я хочу, чтобы большой палец двигался с левой стороны на правую сторону).

Я попытался добавить dir="ltr" приписать элемент mdc-switch, но не повезло.

window.mdc.autoInit();
var drawer = mdc.drawer.MDCDrawer.attachTo(document.querySelector('.mdc-drawer'));

var button = document.querySelector('button');
mdc.ripple.MDCRipple.attachTo(button);
button.addEventListener('click', function() {
  drawer.open = true;
});
<link href="https://unpkg.com/material-components-web@latest/dist/material-components-web.css" rel="stylesheet"/>
<script src="https://unpkg.com/material-components-web@latest/dist/material-components-web.js"></script>
<aside class="mdc-drawer mdc-drawer--modal" dir="rtl">
  <div class="mdc-drawer__content">
    <nav class="mdc-list">
      <div class="mdc-form-field">
        <div class="mdc-switch" data-mdc-auto-init="MDCSwitch" id="mdcAutoScroll" dir="ltr">
          <div class="mdc-switch__track"></div>
          <div class="mdc-switch__thumb-underlay">
            <div class="mdc-switch__thumb">
              <input type="checkbox" id="autoscroll-switch" class="mdc-switch__native-control" role="switch">
            </div>
          </div>
        </div>
        <label for="autoscroll-switch"><span class="mdc-typography--subtitle2 omnicolor">Log Auto Scroll</span></label>
      </div>
      <a class="mdc-list-item mdc-list-item--activated" href="#" aria-selected="true">
        <i class="material-icons mdc-list-item__graphic" aria-hidden="true">inbox</i>
        <span class="mdc-list-item__text">Inbox</span>
      </a>
      <a class="mdc-list-item" href="#">
        <i class="material-icons mdc-list-item__graphic" aria-hidden="true">send</i>
        <span class="mdc-list-item__text">Outgoing</span>
      </a>
      <a class="mdc-list-item" href="#">
        <i class="material-icons mdc-list-item__graphic" aria-hidden="true">drafts</i>
        <span class="mdc-list-item__text">Drafts</span>
      </a>
    </nav>
  </div>
</aside>
<div class="mdc-drawer-scrim"></div>
<button class="mdc-button">Open</button>

CODEPEN

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

Проблема

Навигационный ящик MD C не предназначен для размещения на правой стороне. Вот цитата по этой ссылке, обсуждающая эту конкретную проблему c :

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

Я вижу, что из-за этого вы использовали обходной путь, чтобы поместить навигационную панель вправо. Этот обходной путь включает использование dir="rtl". Затем вы хотели инвертировать направление переключателя MD C, используя dir="ltr" на одном из элементов-предков. Однако, согласно документам , в сложных макетах («сложный» не указан) выполнение вышеуказанного не всегда работает постоянно. Я попытался сделать это, и это не сработало.


Объяснение

Когда коммутатор MDN обнаруживает, что его предок имеет атрибут [dir="rtl"], он изменяет два свойства CSS: right и transform: translateX(...) (если отмечено). Что мы можем сделать? Мы можем изменить эти свойства CSS назад, когда у коммутатора нет указанных модификаторов. При этом коммутатор MDN будет правильно включаться слева направо и выключаться справа налево.


Решение

Для этого мы можем легко добавить еще один класс mdn-switch--ltr к контейнеру коммутатора MDN. Свойства CSS, которые заставили коммутатор MDN двигаться в противоположном направлении и начать справа, равны transform: translate(-20px) и right: 18px соответственно. Переопределение (с использованием более высокой специфичности или ключевого слова !important) этих значений на ltr transform: translate(20px) и right: 0px решает проблему.

Вот рабочий пример (с более высокой специфичностью). Попробуйте запустить его.

window.mdc.autoInit();
var drawer = mdc.drawer.MDCDrawer.attachTo(document.querySelector('.mdc-drawer'));

var button = document.querySelector('button');
mdc.ripple.MDCRipple.attachTo(button);
button.addEventListener('click', function() {
  drawer.open = true;
});
[dir="rtl"] .mdc-switch--ltr .mdc-switch__thumb-underlay  {
  right: 0;
}

[dir="rtl"] .mdc-switch--ltr.mdc-switch--checked .mdc-switch__thumb-underlay {
  transform: translateX(20px);
}
<script src="https://unpkg.com/material-components-web@latest/dist/material-components-web.js"></script>
<link href="https://unpkg.com/material-components-web@latest/dist/material-components-web.css" rel="stylesheet"/>
<aside class="mdc-drawer mdc-drawer--modal" dir="rtl">
  <div class="mdc-drawer__content">
    <nav class="mdc-list">
      <div class="mdc-form-field">
      
      
        <div class="mdc-switch mdc-switch--ltr" data-mdc-auto-init="MDCSwitch" id="mdcAutoScroll">
          <div class="mdc-switch__track"></div>
          <div class="mdc-switch__thumb-underlay">
            <div class="mdc-switch__thumb">
              <input type="checkbox" id="autoscroll-switch" class="mdc-switch__native-control" role="switch">
            </div>
          </div>
        </div>
        
        
        <label for="autoscroll-switch">
          <span class="mdc-typography--subtitle2 omnicolor">Log Auto Scroll</span>
        </label>
      </div>
      <a class="mdc-list-item mdc-list-item--activated" href="#" aria-selected="true">
        <i class="material-icons mdc-list-item__graphic" aria-hidden="true">inbox</i>
        <span class="mdc-list-item__text">Inbox</span>
      </a>
      <a class="mdc-list-item" href="#">
        <i class="material-icons mdc-list-item__graphic" aria-hidden="true">send</i>
        <span class="mdc-list-item__text">Outgoing</span>
      </a>
      <a class="mdc-list-item" href="#">
        <i class="material-icons mdc-list-item__graphic" aria-hidden="true">drafts</i>
        <span class="mdc-list-item__text">Drafts</span>
      </a>
    </nav>
  </div>
</aside>
<div class="mdc-drawer-scrim"></div>
<button class="mdc-button">Open</button>
1 голос
/ 07 апреля 2020

Этого можно добиться, вращая переключатель. Вот рабочая Codepen

// rotate the switch
.mdc-switch {
  transform: rotate(180deg);
  transform-origin: center;

  // to keep knob shadow down rotate the knob underlay
  .mdc-switch__thumb-underlay {
    transform: rotate(180deg);
    transform-origin: center;
  }

  // for some reason the action region moves when
  // switch status changes. fix that.
  &:not(.mdc-switch--checked) {
    .mdc-switch__native-control {
      transform: translateX(25%);
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...