【问题标题】:Fix to make transition smooth in CSS (animated search bar)修复以使 CSS 中的过渡平滑(动画搜索栏)
【发布时间】:2021-09-03 22:51:23
【问题描述】:
我试图制作一个动画搜索栏,在点击 React 中的搜索图标时打开。我添加了背景颜色以清楚地显示正在发生的事情
这里是codesandbox
代码很长,但让我快速分解一下。
我有一个 flexbox 导航容器。它有 2 个元素 - 徽标和搜索图标。徽标最初占据了所有剩余空间(因为 flex-grow),而搜索图标只占据了所需的空间。
当点击搜索图标时,搜索输入会从 0 扩展到固定宽度,并将徽标推向左。
我还通过将 search-bar-mobile div 的位置设置为相对并将搜索图标设置为绝对,在搜索输入中放置相同的搜索图标。
但是当搜索栏处于关闭位置时:absolute 会立即从搜索图标中移除,使其立即捕捉到其原始位置。但是我想顺利过渡,请您提出任何解决方法。
【问题讨论】:
标签:
html
css
reactjs
transition
【解决方案1】:
你必须做两件事
首先 - 像这样改变下面类的样式
.search-icon-mobile-active {
color: var(--clr-grey-5);
font-size: 10px;
}
其次将输入组件放在代码中搜索图标的后面
<form className="search-form-mobile">
<FaSearch
className={`nav-icon search-icon-mobile ${
searchBarMobileActive ? "search-icon-mobile-active" : ""
}`}
onClick={() => setSearchBarMobileActive(true)}
/>
<FaTimesCircle
className={`search-close-button-mobile ${
searchBarMobileActive ? "search-close-button-mobile-active" : ""
}`}
onClick={() => setSearchBarMobileActive(false)}
/>
<input
type="text"
className={`search-input-mobile ${
searchBarMobileActive ? "search-input-mobile-active" : ""
}`}
onBlur={() => setSearchBarMobileActive(false)}
/>
<button
type="submit"
className="search-submit-button-mobile"
></button>
</form>
所以图标的大小会平滑变化,宽度动画将取决于输入。