CSS-путь клипа с фоном - PullRequest
       2

CSS-путь клипа с фоном

0 голосов
/ 24 сентября 2019

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

enter image description here

Когда я запускаю инспектор и наведите элемент,фон, кажется, гаснет:

enter image description here

Это мой код.Я пробовал низкий, но не могу найти проблему:

let toggle = document.getElementById('container');
let toggleContainer = jQuery('#toggle-container');
let toggleNumber;

jQuery('#container').click( function() {
  toggleNumber = !toggleNumber;
  if (toggleNumber) {
    toggleContainer.css( "clip-path", "inset(0 0 0 50%)" );
  } else {
    toggleContainer.css( "clip-path", "inset(0 50% 0 0)" );
  }
});
#container {
  width: 100%;
  height: 56px;
  margin-bottom: 20px;
  position: relative;
  overflow: hidden;
  user-select: none;
  cursor: pointer;
  border-radius: 3px;
  -webkit-box-shadow: 0 0.2rem 0.4rem 0 rgba(0, 0, 0, .2);
  box-shadow: 0 0.12rem 0.4rem 0 rgba(0, 0, 0, .2);
}

.inner-container {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  text-transform: uppercase;
}

.inner-container:first-child {
  background: gray;
  color: #ffffff;
}

.inner-container:nth-child(2) {
  background: chartreuse;
  color: #ffffff;
  clip-path: inset(0 50% 0 0);
  -webkit-transition: 0.2s;
  -o-transition: 0.2s;
  transition: 0.2s;
}

.toggle {
  width: 50%;
  position: absolute;
  height: inherit;
  display: flex;
  font-weight: 600;
}

.toggle p {
  margin: auto;
}

.toggle:nth-child(1) {
  right: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">
    <div class="inner-container">
      <div class="toggle">
        <p>Private</p>
      </div>
      <div class="toggle">
        <p>Public</p>
      </div>
    </div>
    <div class="inner-container" id='toggle-container'>
      <div class="toggle">
        <p>Private</p>
      </div>
      <div class="toggle">
        <p>Public</p>
      </div>
    </div>
  </div>

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Я бы предложил оптимизированную версию с меньшим количеством кода и без использования clip-path:

let toggle = document.getElementById('container');
let toggleContainer = jQuery('.inner-container');

jQuery('#container').click(function() {
  toggleContainer.toggleClass('second');
  });
#container {
  margin-bottom: 20px;
  user-select: none;
  cursor: pointer;
  border-radius: 3px;
  box-shadow: 0 0.12rem 0.4rem 0 rgba(0, 0, 0, .2);
}

.inner-container {
  height: 56px;
  text-transform: uppercase;
  display: flex;
  background: 
    linear-gradient(chartreuse,chartreuse) left/50% 100% no-repeat,
    gray;
  color: #ffffff;
  transition: 0.2s;
}
.inner-container.second {
  background-position:right;
}

.toggle {
  width: 50%;
  display: flex;
  font-weight: 600;
}

.toggle p {
  margin: auto;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">
  <div class="inner-container">
    <div class="toggle">
      <p>Private</p>
    </div>
    <div class="toggle">
      <p>Public</p>
    </div>
  </div>
</div>
0 голосов
/ 24 сентября 2019

Кажется, это то, что вы видите: что было сделано с помощью CSS: clip-path: inset(0 50% 0 1px);

Может быть, просто попробуйте добавить отрицательное пространство слева:

toggleContainer.css( "clip-path", "inset(0 50% 0 -10px)" );

enter image description here

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