前端开发基础技巧详解:从 margin 到 preventDefault
本文不追求华丽的介绍,而是从实际开发角度,讲解一些常见但容易忽略的前端知识点,帮助你更高效地写出高质量、可维护的代码。
1. margin
进行居中的场景
介绍
margin: auto
是实现元素水平居中的常用方式,适用于块级元素(如 div
、section
等)。
使用场景
- 页面内容居中:将页面内容区域设置为居中布局。
- 图片或卡片居中 :在容器中使用
margin: auto
实现图片的横向居中。 - 在 flex 或 grid 布局中:作为非布局方案的补充,适合对兼容性有要求的场景。
示例代码
css
/* 水平居中 */
.container {
width: 50%;
margin: 0 auto;
}
/* 结合 transform 垂直居中 */
.centered-el {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
2. border
属性
介绍
border
是用于设置元素边框的属性,可以控制边框宽度、样式、颜色,甚至可用 border-radius
来加圆角。
使用场景
- 简单边框样式:用于表格、卡片、按钮等组件的边框装饰。
- 创建图形:如制作不规则的三角形、箭头等。设置宽高为 0,搭配特定边框,可实现三角形效果。
- 分隔元素:作为内容块之间的边框分割线。
示例代码
css
/* 基础边框 */
.box {
border: 2px solid #ccc;
}
/* 制作三角形 */
.triangle {
width: 0;
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 100px solid red;
}
3. box-radius
属性
介绍
border-radius
用于控制元素角的圆润程度,可以设置单边或多边的圆角。
使用场景
- 按钮美化:使按钮边角变圆,提升视觉效果。
- 卡片圆角处理:让内容区域看起来更柔和,iPhone、Windows 系统风格常见。
- 圆形头像 :设置
border-radius: 50%
实现圆形效果。
示例代码
css
/* 普通圆角按钮 */
.round-button {
border-radius: 8px;
}
/* 圆形头像 */
.avatar {
border-radius: 50%;
}
/* 不同方向圆角 */
.custom_border {
border-radius: 10px 20px 30px 40px;
}
4. transform
的使用场景
介绍
transform
属性可以对元素进行移动、旋转、缩放等操作,并且性能较好,常用于动画和布局。
使用场景
- 动画提升:如按钮点击后的缩放反馈、图片悬停后的移动效果。
- 快速居中 :配合
position: absolute
和transform:translate(-50%, -50%)
实现绝对居中。 - 设备适配:在移动端或视窗变化时,对元素进行位移调整。
示例代码
css
/* 悬停动画 */
.card:hover {
transform: scale(1.1);
}
/* 将一个元素绝对居中 */
.center-elm {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
5. box-shadow
属性
介绍
box-shadow
属性为一个元素添加阴影效果,提升层次感和立体感。
使用场景
- 按钮或卡片阴影:模拟真实按钮的立体效果,增强视觉反馈。
- 组件"悬空"效果:如浮动面板、菜单项等。
- 设计风格适配:现代 UI 中常用来营造深浅对比。
示例代码
css
/* 基础阴影 */
.button {
box-shadow: 0 2px 6px rgba(0,0,0,0.1);
}
/* 内阴影(inset) */
.inset-button {
box-shadow: inset 0 2px 6px rgba(0,0,0,0.1);
}
6. mousedown
/ mousemove
/ mouseup
事件与 clientX
介绍
这是三个鼠标事件,mousedown
开始拖拽,mousemove
持续移动,mouseup
结束操作。clientX
表示鼠标在视窗中的水平坐标,与 clientY
一起用于获取坐标差。
使用场景
- 拖拽交互(如拖拽排序) :监听这三个事件动态改变元素位置。
- 绘画功能:在网页上根据鼠标移动路径绘制线条或图形。
- 自定义交互反馈:如制作"手风琴"动画、拖拽时的定位提示效果。
示例代码
ini
let isDragging = false;
let offsetX, offsetY;
document.addEventListener('mousedown', (e) => {
isDragging = true;
offsetX = e.clientX;//鼠标指针相对于浏览器可视区域左侧的水平距离
offsetY = e.clientY;
});
document.addEventListener('mousemove', (e) => {
if (!isDragging) return;
// 假设目标元素的定位是 absolute 或 relative
const x = e.clientX - offsetX;
const y = e.clientY - offsetY;
element.style.transform = `translate(${x}px, ${y}px)`;
});
document.addEventListener('mouseup', () => {
isDragging = false;
});
7. getBoundingClientRect()
方法
介绍
getBoundingClientRect()
方法返回元素相对于视口的尺寸和位置信息,包括 left
、top
、width
、height
等。
使用场景
- 判断元素是否在可视区域内:例如图片懒加载或滚动时触发某些操作。
- 相对坐标计算:获取两个元素之间的相对位置,用于拖拽、碰撞检测等。
- 定位弹窗或提示框:动态计算元素位置后,将弹窗显示在靠近目标的位置。
示例代码
arduino
const element = document.querySelector('.target');
function isElementInViewport(el) {
const rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight)
);
}
console.log(isElementInViewport(element));
8. preventDefault()
方法
介绍
preventDefault()
用于阻止某个事件的默认行为,如表单提交、点击链接、上下文菜单弹出等。
使用场景
- 表单提交拦截:使用 AJAX 表单提交,避免页面刷新。
- 点击事件拦截:如防止链接跳转,触发自定义逻辑。
- 上下文菜单控制:在某些组件上阻止浏览器默认右键菜单弹出。
示例代码
javascript
document.querySelector('a').addEventListener('click', (e) => {
e.preventDefault();
alert('点击被阻止');
});
小结
这些技术点看似基础,但在实际开发中经常遇见、也非常重要:
技术点 | 简介 | 使用场景 |
---|---|---|
margin: auto |
实现水平居中的常用方式 | 元素居中、卡片居中 |
border |
设置边框的样式和颜色 | 按钮装饰、三角形制作 |
border-radius |
控制元素的圆角程度 | 按钮、卡片、头像美化 |
transform |
用于设置元素的变换方式 | 动画效果、定位居中、布局调整 |
box-shadow |
为元素添加阴影,提升立体感 | 按钮、卡片、弹窗等的视觉增强 |
clientX |
获取鼠标指针在视口中的水平坐标 | 拖拽、绘图、点击反馈 |
getBoundingClientRect() |
获取元素在视口中的位置、尺寸信息 | 判断元素是否可见、相对定位、碰撞检测 |
preventDefault |
阻止事件的默认行为 | 表单提交、点击链接、右键菜单控制 |