html - 如何仅使用 css 为搜索栏设置动画并保持输入为用户输入打开?
问题描述
我试图制作一个可以在我网站的各个地方使用的搜索栏模板。它应该通过将鼠标悬停在图标上,使图标从圆形变为方形,并且当用户单击图标时,它会扩展搜索输入。当我单击它关闭的输入时,我无法让输入字段保持展开状态。我不想在这上面使用 JS 或 jQuery。此外,当您再次单击按钮或网页的任何其他部分时,输入应该关闭并且输入的信息应该被清空。
这是代码的css部分:
.search_bar {
position: relative;
top: 0;
float: right;
right: 20px;
width: 100%;
background-color: red;
}
.search_input {
width: 0%;
margin: 0px;
padding: 0px;
float: right;
height: 36px;
border: 2px solid var(--accent_colour_1);
outline: none;
transition: 0.3s;
}
.search_icon {
float: right;
outline: none;
padding: 0px;
margin: 0px;
text-align: center;
height: 40px;
width: 40px;
right: 0px;
border-radius: 100%;
background-color: var(--dark_colour);
transition: 0.3s;
}
.search_icon:hover {
border-radius: 0;
transition: 0.3s;
}
.search_icon:focus {
border-radius: 0px;
}
.search_icon:focus + .search_input {
width: 50%;
transition: 0.3s;
}
<div class="search_bar">
<button class="search_icon">S</button>
<input type="text" name="#" class="search_input">
</div>
任何帮助将非常感激!
解决方案
因为width
ofinput
被设置为0%
并且它只扩展到50%
当button
聚焦时。
要在单击时保持输入字段的宽度相同,您可以width
设置input:focus
.
.search_bar {
position: relative;
top: 0;
float: right;
right: 20px;
width: 100%;
background-color: red;
}
.search_input {
width: 0%;
margin: 0px;
padding: 0px;
float: right;
height: 36px;
border: 2px solid var(--accent_colour_1);
outline: none;
transition: 0.3s;
}
.search_icon {
float: right;
outline: none;
padding: 0px;
margin: 0px;
text-align: center;
height: 40px;
width: 40px;
right: 0px;
border-radius: 100%;
background-color: var(--dark_colour);
transition: 0.3s;
}
.search_icon:hover {
border-radius: 0;
transition: 0.3s;
}
.search_icon:focus {
border-radius: 0px;
}
.search_icon:focus + .search_input,
.search_input:focus /* added this */ {
width: 50%;
transition: 0.3s;
}
<div class="search_bar">
<button class="search_icon">S</button>
<input type="text" name="#" class="search_input">
</div>
推荐阅读
- scala - 即使使用 POJO,Flink 中的任务也无法序列化
- watir - Watir 如何在浏览器上执行脚本时记录步骤以及如何从所有脚本中生成报告
- azure-devops - VSTS 选项卡扩展内容的大小
- reactjs - 如何为上一个/下一个按钮 ReactJS 创建单独的组件
- python - python在迭代时从集合中删除元素
- html - CSS Parallax 效果:如何仅转换部分的背景?
- android - 2列未对齐的Android回收器视图
- linux - 在 WHM 中创建新的 cPanel 之前是否需要购买域?
- javascript - 如何捕获用于访问网页的浏览器?
- python - PyQT5 中的“闪烁”按钮