前端相关八股
| 特性 | 短轮询 | 长轮询 | SSE | WebSocket |
|---|---|---|---|---|
| 通信方向 | 单向 (客户端拉) | 单向 (客户端拉) | 单向 (服务端推) | 双向互发 |
| 底层协议 | HTTP | HTTP | HTTP | TCP(WS/WSS) |
| 连接类型 | 短连接 | 挂起 HTTP | HTTP 长连接 | TCP 长连接 |
| 浏览器原生 API | 无 (ajax/fetch) | 无 (ajax) | EventSource | WebSocket |
| 自动重连 | 需手动实现 | 需手动 | 内置自动重连 | 需手动 |
| 消息格式 | 任意 | 任意 | 固定 SSE 格式 | 任意 |
| 二进制数据 | 支持 | 支持 | 不友好 | 完美支持 |
| 适用场景 | 低频、简单拉取 | 准实时、简单通知 | 纯服务端推送 | 双向实时交互 |
借助 CSS resize 属性,浏览器原生支持右下角拖拽拉伸。
通过鼠标按下状态结合 transform 可实现简易拖拽体验
1 |
|
CSS 盒模型
所有 HTML 元素都可看作矩形盒子,盒模型决定元素尺寸、边距、布局,分标准盒模型和 IE 怪异盒模型。
一、盒子组成(四层结构)
从外到内依次:
- margin 外边距:盒子与其他元素的距离,透明
- border 边框:盒子边界,可见样式
- padding 内边距:内容与边框之间的距离,继承背景色
- content 内容区:文字、图片等实际内容
二、两种盒模型核心区别
由 box-sizing 属性控制,计算公式不同
1. 标准盒模型(默认)
box-sizing: content-box;
- 元素实际宽度 =
width(内容) + padding + border width/height仅设置内容区大小
公式:
1 | 总宽度 = width + padding-left + padding-right + border-left + border-right |
2. IE 怪异盒模型(常用)
box-sizing: border-box;
- 元素实际宽度 = 设定的
width width/height包含:内容 + padding + border
公式:
1 | 内容宽度 = width - padding - border |
现代开发统一推荐 border-box,改 padding/border 不会撑大盒子,布局更可控。
三、属性用法
1. margin 外边距
1 | /* 四个值:上 右 下 左 */ |
特性:
- 垂直方向
margin 会合并(相邻块级元素上下边距取最大值) margin: 0 auto;可实现块级元素水平居中
2. padding 内边距
写法同 margin,不能为负值,背景会延伸到 padding 区域。
1 | padding: 10px; |
3. border 边框
1 | /* 宽度 样式 颜色 */ |
四、完整示例
1 |
|
计算:
- box1 实际宽:
200 + 40 + 10 = 250px - box2 实际宽:
200px
五、全局统一设置(项目标配)
所有元素统一使用 border-box,避免布局错乱:
1 | * { |
六、关键总结
content-box:width = 内容宽(默认)border-box:width = 内容+内边距+边框(开发首选)- margin 透明、可负、会垂直合并;padding 不透明、不可负
- 布局优先全局设置
box-sizing: border-box
CSS 实现 0.5px 细线
原生 border: 0.5px 在部分设备/浏览器会被四舍五入成 1px,下面是主流兼容方案,按实用优先级排序。
一、方案1:transform 缩放(最通用、推荐)
利用 scale(0.5) 压缩 1px 线条,适配所有移动端/PC,支持横竖线。
水平线
1 | .half-line { |
竖直线
1 | .half-line-v { |
完整示例(分割线)
1 | <div class="line"></div> |
二、方案2:border + 媒体查询(适配高清屏)
区分设备像素比,针对 Retina/高清屏单独设置 0.5px,普通屏用 1px。
1 | .line { |
说明:普通低分辨率屏幕不识别小数像素,自动 fallback 为 1px。
三、方案3:渐变渐变实现(渐变蒙版)
用线性渐变做出细线条,适合做单边分割线,可配合 border 使用。
1 | .line { |
特点:视觉上变细,本质还是 1px,靠透明度模拟细线条,适合装饰线。
四、方案4:伪元素实现(不占用原生布局)
适合给元素底部/顶部加 0.5px 下划线/分割线,不改动原有结构。
1 | .box { |
关键补充 & 踩坑
为什么直接写 0.5px 有时无效?
浏览器渲染基于物理像素,老式屏幕最小单位是 1 物理像素,小数会被取整;高清屏(Retina)1 个 CSS 像素 = 2/3 物理像素,才支持小数像素。缩放方案偏移问题
缩放后线条位置可能偏移,用transform-origin修正:- 水平线条:
transform-origin: left center - 底部下划线:
transform-origin: left bottom
- 水平线条:
全局通用分割线最简写法(项目常用)
1 | /* 全局 0.5px 分割线 */ |
选型建议
- 移动端/H5、需要强兼容:优先 transform 缩放
- 只做高清屏适配、追求原生像素:设备像素比媒体查询
- 仅视觉弱化、装饰线条:渐变 + 透明度
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 皖月清风的个人博客!
评论




