小白学前端--第九天(2026/2/20)header设计

小白学前端--第九天(2026/2/20)header设计

首页搭建

上回我们将整个项目拆分成三个主体区域,并且决定用Layout来进行设计布局。那让我们一个一个来吧。

先设置一下整体的home-page样式

.home-page { min-height: 100vh; background: #f6f7f9; display: flex; flex-direction: column; }

min-height:100vh+flex-direction:column可以保证首页至少撑满整个页面,如果商品过多则往下自动撑开,不会被截断

一、header部分

import "./index.scss"; import { Layout,Input } from "antd"; const { Header} = Layout; const {Search} =Input const Home = () => { return ( <div className="home-page"> {/* 顶部:logo + 搜索 + 购物车&用户 */} <Layout> <Header className="header"> {/* <div className="logo"></div> */} {/* <Search placeholder="input search text" allowClear enterButton="Search" size="large" ></Search> */} </Header> </Layout> </div> ); }; export default Home; 

只加上背景色可以发现,header本身是有宽高的,要想控制样式,只需加上类名即可。

调完之后代码这样子:

import "./index.scss"; import { Layout } from "antd"; const { Header } = Layout; const Home = () => { return ( <div className="home-page"> {/* 顶部:logo + 搜索 + 购物车&用户 */} <Layout> <Header className="home-header"> </Header> </Layout> </div> ); }; export default Home; 
.home-page { min-height: 100vh; background: #f6f7f9; display: flex; flex-direction: column; } /* 顶部 */ .home-header { height: 72px; padding: 0 18px; display: flex; align-items: center; gap: 16px; background: linear-gradient(90deg, #ff2d2d, #ff6a00); box-shadow: 0 8px 22px rgba(0, 0, 0, 0.12); }

background: linear-gradient(90deg, #ff2d2d, #ff6a00);为水平方向加一个渐变

box-shadow: 0 8px 22px rgba(0, 0, 0, 0.12);为添加阴影,参数分别为水平位移,垂直位移,模糊半径以及阴影颜色,rgb(0,0,0),不透明度0.12。

效果如下:

1.header-left

左边我打算放置logo,在header-left里面进行设计成这种样式

<div className="header-left" > <div className="logo-badge"> <span className="logo-text">智慧商城</span> </div> </div>

这边样式的话大家可以自己设计,我在最后统一给scss样式代码供大家参考

2.header-mid

中间的位置放置搜索框,ant design里面search在input类里面

通过样例可知,search在input子类中,要先解构再使用。

在api文档中可知,enterButton为确认按钮属性,通过上面的例子可以得知enterButton既可以直接输入文字,也可以传过去一个Button,这里我们选择第二种。

<div className="header-mid"> <Search allowClear placeholder={`搜一搜`} enterButton={ <Button className="search-button" color="danger" variant="solid"icon={<SearchOutlined />}> 搜索 </Button> } onSearch={onSearch} size="large" /> </div>

注意传过去的时候修改样式的时候不可直接传类名,用search里面自带的.ant-input-search-btn类名进行修饰,详情请见react开发:ant design中ant design组件内套用ant design组件的样式问题(2026/2/18)-ZEEKLOG博客

最终效果如下:

3.header-right

右侧主要放置一个购物车按钮和个人中心按钮

用户头像方面我们采用Avatar来实现,它支持三种类型的头像:文字、图片、图标。这里我们先用Icon。

购物车的原理比较简单,外边是一个提示徽标,里面是一个Button即可。

最后总体写完的index.js代码如下:

import "./index.scss"; import { Layout, Input } from "antd"; import { SearchOutlined } from "@ant-design/icons"; import { Button } from "antd"; import { Space, Badge, Avatar } from "antd"; import { ShoppingCartOutlined, UserOutlined } from "@ant-design/icons"; import classNames from "classnames"; const { Header } = Layout; const { Search } = Input; const onSearch = (value) => { console.log("搜索内容:", value); }; const Home = () => { return ( <div className="home-page"> {/* 顶部:logo + 搜索 + 购物车&用户 */} <Layout> <Header className="home-header"> <div className="header-left" > <div className="logo-badge"> <span className="logo-text">智慧商城</span> </div> </div> <div className="header-mid"> <Search allowClear placeholder={`搜一搜`} onSearch={onSearch} size="large" className="search-input" enterButton={ <Button color="danger" variant="solid" icon={<SearchOutlined />}>搜索</Button> } /> </div> <div className="header-right"> <Space size={14}> <Badge count={3} size="small"> <Button className="icon-btn" icon={<ShoppingCartOutlined />} /> </Badge> <div className="user-mini"> <Avatar size={34} icon={<UserOutlined />} /> <div className="user-mini-text"> <div className="user-name">刘同学</div> <div className="user-sub">欢迎回来</div> </div> </div> </Space> </div> </Header> </Layout> </div> ); }; export default Home; 

css样式为:

.home-page { min-height: 100vh; background: #f6f7f9; display: flex; flex-direction: column; } /* 顶部 */ .home-header { height: 72px; padding: 0 18px; display: flex; justify-content: space-between; align-items: center; background: linear-gradient(90deg, #ff2d2d, #ff6a00); box-shadow: 0 8px 22px rgba(0, 0, 0, 0.12); .header-left { width: 180px; cursor: pointer; display: flex; align-items: center; justify-content: center; // 内部元素水平居中 .logo-badge { height: 44px; padding: 0 14px; border-radius: 14px; background: rgba(255, 255, 255, 0.18); backdrop-filter: blur(8px); display: flex; align-items: center; .logo-text { color: #fff; font-weight: 800; letter-spacing: 2px; } } } .header-mid { flex: 1; width: 100%; justify-content: flex-end; align-items: center; display: flex; .search-input{ width: 700px; } .ant-input-search-btn { border: 1px solid #fff !important; } } .header-right { width: 260px; display: flex; justify-content: flex-end; .icon-btn { border-radius: 12px; } .user-mini { display: flex; align-items: center; gap: 10px; padding: 6px 10px; border-radius: 14px; background: rgba(255, 255, 255, 0.18); backdrop-filter: blur(8px); .user-mini-text { line-height: 1.1; .user-name { color: #fff; font-weight: 700; font-size: 13px; } .user-sub { color: rgba(255, 255, 255, 0.85); font-size: 12px; } } } } } 

效果如下:

Read more

Nginx 按照流量比例反向代理配置详解

Nginx 按照流量比例反向代理配置详解

在灰度发布、A/B 测试等场景中,我们常需要将流量按一定比例分发到不同后端服务。Nginx 提供了 split_clients 模块,配合 map 和 proxy_pass,可以轻松实现基于客户端特征的流量比例分配。本文将从 Nginx 安装、Systemd 管理、完整配置到临时调试方案,提供一份可直接复制使用的完整教程。 一、Nginx 安装(Ubuntu 22.04) 说明:以下操作以 root 用户执行。 # 1. 卸载系统自带 nginxapt remove nginx apt purge nginx nginx-common -y # 2. 更新系统并安装编译依赖sudoapt update sudoaptinstall -y libpcre3 libpcre3-dev

By Ne0inhk
Oracle索引

Oracle索引

一、索引介绍 1.为什么使用索引 索引是存储引擎用于快速找到数据记录的一种数据结构,就好比一本教课书的目录部分,通过目录中找到对应文章的页码,便可快速定位到需要的文章。Oracle中也是一样的道理,进行数据查找时,首先查看查询条件是否命中某条索引,符合则通过索引查找相关数据,如果不符合则需要全表扫描,即需要一条一条地查找记录,直到找到与条件符合的记录。 如上图所示,数据库在没有索引的情况下,数据分布在硬盘的不同位置上面,读取数据时,摆臂需要前后摆动查找,这样操作非常耗时。如果数据顺序摆放,那么也需要从1到6行按顺序读取,这样就相当于进行了六次IO操作,依旧非常耗时。如果我们不借助任何索引结构帮助我们快速定位数据的话,我们查找Col2=89这条数据,就要逐行去查找、去比较。从Col2=34开始,进行比较,发现不是,继续下一行。我们当前的表只有不到10行数据,但如果表很大的话,有上千万条数据,就意味着要做很多很多次磁盘I/0才能找到。现在要查找Col2=89这条记录。CPU必须先去磁盘查找这条记录,找到之后加载到内存,再对数据进行处理。这个过程最耗时间的就是磁盘I/O(涉及到磁盘的旋

By Ne0inhk
YOLO26:面向实时目标检测的关键架构增强与性能基准测试

YOLO26:面向实时目标检测的关键架构增强与性能基准测试

YOLO26核心总结 1. 架构简化:移除分布焦点损失(DFL),简化边界框回归,提升导出兼容性。 2. 端到端推理:采用无NMS设计,直接输出检测结果,降低延迟与部署复杂度。 3. 训练增强:引入渐进损失平衡(ProgLoss)与小目标感知标签分配(STAL),提升小目标检测稳定性。 4. 优化器创新:使用MuSGD优化器,结合SGD与Muon优势,加速模型收敛。 5. 多任务支持:统一框架支持检测、实例分割、姿态估计、定向检测与分类。 6. 边缘优化:支持FP16/INT8量化,在Jetson等设备上实现低延迟实时推理。 7. 性能表现:在COCO等基准上达到高精度,CPU推理速度较前代提升最高43%。 应用场景:适用于无人机、机器人、智能制造等资源受限的边缘设备实时视觉任务。  博主简介 AI小怪兽 | 计算机视觉布道者 | 视觉检测领域创新者 深耕计算机视觉与深度学习领域,专注于视觉检测前沿技术的探索与突破。长期致力于YOLO系列算法的结构性创新、

By Ne0inhk
给数据“立规矩” —— MySQL 新手必学的表约束全指南

给数据“立规矩” —— MySQL 新手必学的表约束全指南

🔥海棠蚀omo:个人主页                 ❄️个人专栏:《初识数据结构》,《C++:从入门到实践》,《Linux:从零基础到实践》,《Linux网络:从不懂到不会》,《MySQL:新手入门指南》                 ✨追光的人,终会光芒万丈 博主简介: 目录 一.为什么要有表的约束? 二.表的约束 2.1空属性 2.2默认值 2.3列描述 2.4zerofill 2.5主键 2.5.1复合主键 2.6自增长 2.7唯一键 5.8外键 前言: 在上一篇文章中我们讲解了MySQL中的各种数据类型,那么正是因为有了各种数据类型,才会有今天我们要讲的表的约束相关知识,那么这中间到底是怎么回事呢?下面我们就一起来看看吧。 一.为什么要有表的约束? 在上一篇文章中,我们认识了很多的数据类型,并在它们的下面我们也通过例子进行了演示,

By Ne0inhk