前端入门:margin居中、border、box-radius、transform、box-shadow、mouse事件、preventDefault()

前端开发基础技巧详解:从 margin 到 preventDefault

本文不追求华丽的介绍,而是从实际开发角度,讲解一些常见但容易忽略的前端知识点,帮助你更高效地写出高质量、可维护的代码。

1. margin 进行居中的场景

介绍

margin: auto 是实现元素水平居中的常用方式,适用于块级元素(如 divsection 等)。

使用场景

  • 页面内容居中:将页面内容区域设置为居中布局。
  • 图片或卡片居中 :在容器中使用 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: absolutetransform: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() 方法返回元素相对于视口的尺寸和位置信息,包括 lefttopwidthheight 等。

使用场景

  • 判断元素是否在可视区域内:例如图片懒加载或滚动时触发某些操作。
  • 相对坐标计算:获取两个元素之间的相对位置,用于拖拽、碰撞检测等。
  • 定位弹窗或提示框:动态计算元素位置后,将弹窗显示在靠近目标的位置。

示例代码

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 阻止事件的默认行为 表单提交、点击链接、右键菜单控制
相关推荐
蝎子莱莱爱打怪2 小时前
🚀🚀🚀嗨,一起来开发 开源IM系统呀!
前端·后端·github
Enddme2 小时前
《前端笔试必备:JavaScript ACM输入输出模板》
前端·javascript·面试
前端鱼2 小时前
前端面试中值得关注的js题
前端·面试
UnnamedOrange2 小时前
有来前后端部署
前端·后端
德育处主任2 小时前
p5.js 绘制 3D 椭球体 ellipsoid
前端·javascript·数据可视化
未来之窗软件服务2 小时前
未来之窗昭和仙君 (四) 前端网页分页 — 东方仙盟筑基期
前端·仙盟创梦ide·东方仙盟·东方仙盟修仙·昭和仙君
安卓开发者2 小时前
鸿蒙Next Web组件详解:属性设置与事件处理实战
前端·华为·harmonyos
安卓开发者2 小时前
鸿蒙NEXT Web组件与JavaScript交互:打通原生与前端的桥梁
前端·javascript·harmonyos
Sapphire~3 小时前
重学前端013 --- 响应式网页设计 CSS网格布局
前端·css