Как заставить преобразование перевода начинаться с элемента?

Я реализовал простой наскок в анимации в CSS. Эта анимация запускается при нажатии кнопки. Результатом доволен, но могу его улучшить. Я хочу, чтобы текст, который появляется, начинался с самого элемента кнопки, а не от края страницы. Я попытался изменить свойства перевода, но мне не повезло. Мне было интересно, может ли кто-нибудь дать мне несколько советов о том, как это исправить, а также было бы здорово, если бы код можно было оптимизировать для использования SASS/SCSS.

Обновлено: обновлен код с помощью SCSS:

Вот код анимации:

HTML:

<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "swoop-in">
  <div class = "swoop-in-content">
    PRETTY NEAT TRANSITION BLAH BLAH..
  </div>
</div>

<button class = "toggle">Toggle</button>

CSS:

 swoop-in {
   position: absolute;
   right: 0px;
   top: 140px;
   width: 220px;
   margin-left: -30px;
   &.show .swoop-in-content {
      transform: translateX(0);
      opacity: 1;
      -webkit-transform: translateX(0);
   }
   .swoop-in-content {
      transform: translateX(100%);
      -webkit-transform: translateX(100%);
      opacity: 0;
      transition: all .5s ease;
   }
}

.toggle {
  position: absolute;
  top: 120px;
  right: 20px;
  background: none;
  border: 2px solid;
  border-bottom-width: 4px;
  margin: 1em;
  padding: 1em 2em;
  height: auto;
  text-align: center;
  text-transform: uppercase;
  background-color: red;
  &:hover {
    background-color: #9c89f7;
    cursor: pointer;
  }
}

jQuery:

$('.toggle').click(function() {
  $('.swoop-in').toggleClass('show');
});

Вот для него CODEPEN. Обновлен CODEPEN с помощью SCSS.

Спасибо.

Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
1
0
79
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Предположим, это не лучшее решение, но вы можете поиграть с ним, чтобы сделать его красивее (в зависимости от содержимого этого анимированного div). https://codepen.io/Yulia_pi/pen/oddpZY Вместо изменения свойства позиции я изменил исходный width: 0px; на желаемый и расположил его у левого края кнопки. Для этого нам также необходимо установить размер кнопки. overflow: hidden делает текст в переходном div не таким уж странным, но все же не идеальным.

Круто :) Спасибо за попытку. Это действительно дает мне отличное представление о том, как к этому подойти. Примет ответ через 24 часа, чтобы у него было достаточно времени для любых других ответов :)

ShellZero 12.05.2018 00:12
Ответ принят как подходящий

Возможно, это подходит для ваших нужд https://codepen.io/AElkhodary/pen/MGGBvV, вы можете просто указать процентное значение свойства translate, если вы хотите изменить эффект

ОБНОВЛЕНО

У Safari есть проблема с transition: all, мы всегда должны указывать, что мы хотим перейти, поэтому решение

  transition: transform .4s cubic-bezier(0.25, 0.46, 0.45, 0.94), opacity .4s cubic-bezier(0.25, 0.46, 0.45, 0.94);

$('.toggle').on('click', function() {
  $('.swoop-in').toggleClass('show');
});
body {
  max-width: 1200px;
  position: relative;
  margin: auto;
}

.swoop-in {
  transform: translateX(45%);
  opacity: 0;
  position: absolute;
  right: 120px;
  top: 22px;
  overflow: hidden;
    transition: transform .4s cubic-bezier(0.25, 0.46, 0.45, 0.94), opacity .4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
  z-index: -1;
}
.swoop-in.show {
  transform: translateX(0);
  opacity: 1;
}

.btn {
  text-align: right;
}

.toggle {
  background: none;
  border: 2px solid;
  border-bottom-width: 4px;
  margin: 1em;
  padding: 1em 2em;
  min-width: 100px;
  height: auto;
  text-align: center;
  text-transform: uppercase;
  background-color: red;
}
.toggle:hover {
  background-color: #9c89f7;
  cursor: pointer;
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "swoop-in">
  PRETTY NEAT TRANSITION BLAH BLAH..
</div>

<div class = "btn">
  <button class = "toggle">Toggle</button>
</div>

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

Adel Elkhodary 13.05.2018 22:14

Это не переключение текста. Я вообще не вижу текста.

ShellZero 13.05.2018 22:17

Я только что проверил его снова, он полностью работает нормально, и даже в коде codepen.io/AElkhodary/pen/MGGBvV все в порядке

Adel Elkhodary 13.05.2018 22:18

Аааа. он не работает в Safari ... Он работает в Firefox, Chrome, IE 11 и Edge. Я предполагаю, что это из-за кубической кривой Безье. Хотя я не уверен. Любая идея?

ShellZero 14.05.2018 19:26

Привет, Адель, у тебя была возможность попробовать это в Safari?

ShellZero 15.05.2018 23:16

@ShellZero да, я исправил это и уже обновил в сообщении и коде, а также в сафари, когда вы говорите transition:all .2s ease-in-out, независимо от того, какая функция ведет себя по-разному, мы должны указать, какое свойство мы хотим перенести, поэтому я исправил, и исправление заключается в использовании transition: transform .4s cubic-bezier(0.25, 0.46, 0.45, 0.94), opacity .4s cubic-bezier(0.25, 0.46, 0.45, 0.94);

Adel Elkhodary 16.05.2018 09:19

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

ShellZero 16.05.2018 22:23

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