50个前端实战项目之04:隐藏的搜索小组件

ops/2024/9/23 21:18:21/

大家好,我是宝哥。

今天讲50个前端实战项目之04:隐藏的搜索小组件。

源码下载地址

https://github.com/bradtraversy/50projects50days/tree/master/hidden-search

前端实战项目系列正在更新:04/50

  • 01:可展开卡片

  • 02:进度条

  • 03:旋转导航动画

  • 04:隐藏的搜索小组件

项目介绍

本项目演示了一个简洁实用的隐藏式搜索小部件。点击搜索按钮后,搜索栏会展开,并输入框自动获得焦点,方便用户输入搜索内容。

效果预览

b1cf3e48812675b9ac37af8f4a6123df.png

在线预览(文末点击原文链接可直达):

https://qdkfweb.cn/50projects50days/hidden-search/

实现方法

  1. HTML 结构中定义搜索栏的布局,包括输入框和按钮。

  2. CSS 样式定义搜索栏的初始外观、展开后的外观以及按钮的移动效果。

  3. JavaScript 代码监听按钮的点击事件,并根据 active 类的状态控制搜索栏的展开/收起,并设置输入框的焦点。

核心代码

HTML 结构

  • .search 容器包含搜索栏的输入框和按钮。

  • .input 输入框用于输入搜索内容。

  • .btn 按钮用于展开或收起搜索栏。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.14.0/css/all.min.css" integrity="sha512-1PKOgIY59xJ8Co8+NE6FZ+LOAZKjy+KY8iq0G4B3CyeY6wYHN3yt9PW0XpSriVlkMXe40PTKnXrLnZ9+fkDaog==" crossorigin="anonymous" /><link rel="stylesheet" href="style.css" /><title>Hidden Search</title></head><body><div class="search"><input type="text" class="input" placeholder="Search..."><button class="btn"><i class="fas fa-search"></i></button></div><script src="script.js"></script></body>
</html>

CSS 样式

  • .searchposition: relative 属性使其可以定位子元素。

  • .input.btn 的样式定义了初始外观和大小。

  • .search.active .input.search.active .btn 的伪类控制搜索栏展开后的样式变化。

@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');* {box-sizing: border-box;
}body {background-image: linear-gradient(90deg, #7d5fff, #7158e2);font-family: 'Roboto', sans-serif;display: flex;align-items: center;justify-content: center;height: 100vh;overflow: hidden;margin: 0;
}.search {position: relative;height: 50px;
}.search .input {background-color: #fff;border: 0;font-size: 18px;padding: 15px;height: 50px;width: 50px;transition: width 0.3s ease;
}.btn {background-color: #fff;border: 0;cursor: pointer;font-size: 24px;position: absolute;top: 0;left: 0;height: 50px;width: 50px;transition: transform 0.3s ease;
}.btn:focus,
.input:focus {outline: none;
}.search.active .input {width: 200px;
}.search.active .btn {transform: translateX(198px);
}

JavaScript 代码

  • 获取搜索栏、按钮和输入框的 DOM 元素引用。

  • 按钮的点击事件处理程序:

    • 切换 .search 元素的 active 类,控制搜索栏的展开/收起。

    • 搜索栏展开时,自动将焦点移至输入框。

const search = document.querySelector('.search')
const btn = document.querySelector('.btn')
const input = document.querySelector('.input')btn.addEventListener('click', () => {search.classList.toggle('active')input.focus()
})

总结

通过理解本项目的代码,您学习了如何使用 HTML、CSS 和 JavaScript 创建交互式搜索小部件。您可以根据需要修改本项目的样式和功能,例如添加搜索提示、搜索历史记录等,打造更实用的搜索体验。

动图全过程展示:

2fdba6b60d7d56c041535c6c95bc2681.gif

在线预览(点底部原文链接可直达):https://qdkfweb.cn/50projects50days/hidden-search/

最后

如果你觉得宝哥今天的尝试对你有帮助,就给我点个赞,关注一波。分享出去,也许你的转发能给别人带来一点启发。

以后我也会多尝试共读其它项目,如果看到喜欢的项目也可以留言告诉我,今天的教程你学会了吗?学会了,就在评论区刷一个,学会了。

欢迎长按图片加好友,宝哥会第一时间和你分享前端行业趋势,面试资源,学习途径等等。

7eeee82ec89c7b5fe072dba36147ec8a.png

添加好友备注【加群】拉你进技术交流群

公众号前端开发博客 专注 前端开发技术,分享 前端开发资源WEB前沿资讯,如果喜欢我的分享,给 宝哥 点一个 或者 分享 都是对我的支持

关注公众号后,在首页:

  • 回复「小抄」,领取Vue、JavaScript 和 WebComponent 小抄 PDF

  • 回复「Vue脑图」获取 Vue 相关脑图

  • 回复「思维图」获取 JavaScript 相关思维图

  • 回复「简历」获取简历制作建议

  • 回复「简历模板」获取精选的简历模板

  • 回复「电子书」下载我整理的大量前端资源,含面试、Vue实战项目、CSS和JavaScript电子书等。

  • 回复「知识点」下载高清JavaScript知识点图谱

  • 回复「读书」下载成长的相关电子书


http://www.ppmy.cn/ops/33451.html

相关文章

代码审计之浅谈RASP技术

前言&#xff1a; 想摆会烂&#xff0c;所以就落个笔吧。 其实本来是想写关于iast技术的&#xff0c;但是认真思考了下&#xff0c;感觉笔者自己本身也不太能讲清楚iast技术&#xff0c;怕误人子弟。 所以最后还是基于笔者的理解以及实际应用写一篇关于RASP技术的文章&#xf…

项目使用MySQL,现需要切换到oracle,需要注意什么地方?

在将一个已经使用Mybatis Plus开发完成的Java项目从MySQL数据库切换到Oracle数据库时&#xff0c;需要进行一系列的改造。以下是主要的改造步骤、SQL语句的差异、预估的工作量以及需要注意的事项。 1. 改造步骤 配置数据源 首先&#xff0c;需要更改项目中的数据库连接配置&…

ctfshow 框架复现

文章目录 web 466web 467web 468web469web 470web 471web 472web 473web 474web 475web 476 web 466 Laravel5.4版本 &#xff0c;提交数据需要base64编码 代码审计学习—Laravel5.4 - 先知社区 (aliyun.com) 用第二条链子 反序列化格式 /admin/序列化串base64<?php na…

(39)4.29数据结构(栈,队列和数组)栈

#include<stdlib.h> #include<stdio.h> #define MaxSize 10 #define Elemtype int 1.栈的基本概念 2.栈的基本操作 typedef struct { Elemtype data[MaxSize]; int top; }Sqstack;//初始化栈 void InitStack(Sqstack& S) { S.top -1; //初始化…

某度假村薪酬体系优化项目成功案例纪实

——增强薪酬弹性、重塑薪酬标准、释放薪酬增长潜力 【客户行业】文旅行业、酒店行业、文旅集团、度假村 【问题类型】薪酬体系 【客户背景】 某度假村是一家集住宿、娱乐、健身等服务为一体的综合服务场所&#xff0c;度假村内部环境优美、设施齐全&#xff0c;备有休闲中…

linux的压缩与备份

一、打包 格式&#xff1a;tar -参数 <打包文件名> <打包的目标> 作用&#xff1a;将文件或者目录打包 重要参数&#xff1a;-f 使用归档文件&#xff0c;一定要加上这个参数 -c 新建打包文件 -x 解包文件 -t 可以不用解包就能查看包文件内容 -v 打包和解包时显…

Ubuntu20.04 [Ros Noetic]版本——在catkin_make编译时出现报错的解决方案

今天在新的笔记本电脑上进行catkin_make的编译过程中遇到了报错&#xff0c;这个报错在之前也遇到过&#xff0c;但是&#xff0c;我却忘了怎么解决。很是头痛&#xff01; 经过多篇博客的查询&#xff0c;特此解决了这个编译报错的问题&#xff0c;于此特地记录&#xff01;&…

OceanBase 分布式数据库【信创/国产化】- OceanBase 平台产品 - 迁移评估工具 OMA

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 平台产品 - 迁移评估工具 OMA前言OceanBase 数据更新架构OceanBase 平台产品 - 迁移评估工具 OMA兼容性评估性能评估导出 OceanBase 数据库对象和 SQL 语句OceanBase 分布式数据库【信创/国产…