Анимация входа и выхода тегов hr при наведении

Я пытаюсь анимировать тег hr в теге привязки. По сути, я хочу, чтобы при наведении курсора на тег привязки тег hr должен скользить вправо, а при перемещении мыши тег hr должен скользить слева.

Что я делал до сих пор, так это то, что при наведении тег hr скользит влево, а не вправо, а при перемещении мыши он скользит обратно слева.

Я хочу добиться примерно следующего:
Анимация входа и выхода тегов hr при наведении

Компонент кнопки

<Fragment>
    <Link className = "btn" to = { this.props.linkTo }>
        <div>
            <span>{ this.props.text }</span>
            <hr/>
        </div>
    </Link>
</Fragment>

CSS

.btn {
    color: var(--black);
    text-decoration: none;
    display: flex;
}
.btn > div > span {
    line-height: 30px;
}
.btn > div > hr {
    margin: 0;
    border: 0;
    border-top: 2px solid var(--black);
    width: 100%;
    transition: width 0.2s ease-out;
}
.btn:hover div > hr {
    width: 0;
}

Не могли бы вы создать песочницу, чтобы я мог поиграть с ней?

Brian Le 31.01.2019 19:43

@ Брайан Ле, я был бы рад сделать это, но сейчас я пользуюсь мобильным устройством.

Ayan 31.01.2019 19:56

Дай мне сделать это тогда. Это весь код, который у вас сейчас есть?

Brian Le 31.01.2019 19:57

Да, это просто компонент реакции, над которым я работаю.

Ayan 31.01.2019 19:59

Знаешь что, у тебя там действительно хороший и простой ответ. Проверьте это

Brian Le 31.01.2019 20:00

@ Брайан Ле проверил. Но он оставляет маленькую точку справа, когда анимация наведения завершается.

Ayan 31.01.2019 20:07
Приемы 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 сценарий полностью изменился.
1
6
899
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Плавающее право приведет к переходу вправо, а когда оно вернется, оно также будет слева направо, как на изображении, которое вы разместили.

.btn:hover div > hr { width: 0; float: right; }

Ответ принят как подходящий

Для этого вы можете использовать свойство float. Вот простой пример с простым HTML.

div > hr {
  transition: width 1s ease-out; /* For Safari 3.1 to 6.0 */
  transition: width 1s  ease-out;
  width : 100%;
  float: left;
}
div:hover > hr {
   width:0%;
   float: right;
}
<div>
  <h2>
  Fooo Barrr
  </h2>
  <hr/>
</div>

Красиво и просто!

Brian Le 31.01.2019 19:58

Хороший. :) Почти так, как я ищу, но оставляет маленькую точку справа, когда анимация наведения завершена. Можно ли это сделать без float, поскольку все остальные части макета выполняются с помощью flexbox?

Ayan 31.01.2019 20:03

Вы можете использовать свойство float вместе с border-style и height сайта hr. Вы также можете изменить background-color на hr.

См. Фрагмент ниже:

.container{
  display:inline-block;
  position:relative;
}
.container > span{
  cursor:pointer;
  font-size:20px;
}
.container > hr {
  transition: width 0.3s ease-out;
  width:100%;
  float:left;
  border-style: none;
  background: #000;
  height: 2px;
  margin:0;
}
.container:hover > hr {
  width:0%;
  float:right;
}
<div class = "container">
  <span>See what we do</span>
  <hr/>
</div>

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