JS基础事件处理与CSS常用属性全解析(附实战示例)

在前端开发中,JS负责交互逻辑,CSS负责样式呈现,二者配合是实现网页功能的基础。本文聚焦新手必学的JS事件处理方法和CSS常用属性,用「概念+语法+案例」的形式拆解核心知识点,所有代码可直接复制运行,帮你快速打通前端基础关。

一、JS基础事件处理:让网页"动"起来

JS事件处理的核心是「监听用户行为(如点击、输入),并执行对应逻辑」。常见的事件类型包括鼠标事件、键盘事件、表单事件等,处理方式主要有行内绑定、DOM属性绑定、事件监听三种,下面逐一拆解。

(一)3种核心事件绑定方式

  1. 行内绑定(简单但不推荐,耦合性高)

直接在HTML标签内通过on+事件名绑定JS代码,适合快速测试简单逻辑。

语法:<标签 on事件名="JS代码">

示例:点击按钮弹出提示

<!-- 行内绑定点击事件 -->

<button onclick="alert('点击成功!')">点击我</button>

<!-- 也可调用外部函数 -->

<script>

function showMsg() {

console.log("按钮被点击了");

}

</script>

<button onclick="showMsg()">点击调用函数</button>

缺点:HTML与JS代码混写,后期维护困难,不适合复杂项目。

  1. DOM属性绑定(中等推荐,逻辑分离)

通过JS获取DOM元素后,直接给元素的on+事件名属性赋值函数,实现HTML与JS分离。

语法:元素.on事件名 = 函数

示例:输入框内容变化时实时打印

<input type="text" id="userInput" placeholder="输入内容...">

<script>

// 1. 获取DOM元素

const input = document.getElementById("userInput");

// 2. 绑定输入事件(input事件:输入框内容变化时触发)

input.oninput = function() {

// this指向当前元素(即input),this.value获取输入值

console.log("当前输入:", this.value);

};

// 3. 解绑事件(赋值为null即可)

// input.oninput = null;

</script>

特点:一个元素同一事件只能绑定一个函数,后绑定的会覆盖前一个。

  1. 事件监听(推荐,灵活可扩展)

通过addEventListener方法绑定事件,支持同一事件绑定多个函数,还能自由解绑,是项目中最常用的方式。

语法:元素.addEventListener('事件名', 函数, 可选参数)

示例:按钮绑定多个点击事件

<button id="myBtn">多事件按钮</button>

<script>

const btn = document.getElementById("myBtn");

// 第一个点击事件:打印日志

function logClick() {

console.log("按钮被点击(日志)");

}

// 第二个点击事件:修改按钮文字

function changeText() {

this.textContent = "已点击"; // this指向btn元素

}

// 绑定两个点击事件

btn.addEventListener("click", logClick);

btn.addEventListener("click", changeText);

// 解绑第一个事件(需保留原函数引用,匿名函数无法解绑)

btn.removeEventListener("click", logClick);

</script>

关键优势:

• 同一事件可绑定多个函数,按绑定顺序执行;

• 支持事件捕获/冒泡(第三个参数控制,默认false为冒泡);

• 解绑灵活,避免内存泄漏。

(二)常用事件类型与实战场景

事件分类 事件名 触发时机 实战场景

鼠标事件 click 鼠标左键单击 按钮提交、卡片跳转

mouseover 鼠标移入元素 导航栏下拉菜单显示

mouseout 鼠标移出元素 导航栏下拉菜单隐藏

键盘事件 keydown 按下任意键(包括功能键) 快捷键触发(如Ctrl+S保存)

keyup 松开任意键 输入完成后验证

表单事件 submit 表单提交(点击提交按钮或按Enter) 表单数据验证

change 表单元素值改变且失去焦点 下拉框选择后触发查询

窗口事件 load 页面所有资源加载完成 初始化页面数据

resize 窗口大小改变 响应式布局调整

实战案例:表单提交验证(阻止默认行为)

表单提交时默认会刷新页面,通过event.preventDefault()可阻止默认行为,先做数据验证:

<form id="loginForm">

<input type="text" name="username" placeholder="用户名" required>

<button type="submit">登录</button>

</form>

<script>

const form = document.getElementById("loginForm");

form.addEventListener("submit", function(event) {

// 1. 阻止表单默认提交行为(避免页面刷新)

event.preventDefault();

// 2. 获取表单数据

const username = this.username.value;

// 3. 数据验证

if (username.length < 3) {

alert("用户名至少3个字符!");

return;

}

// 4. 验证通过,提交数据(实际项目中用AJAX/fetch)

alert(`登录成功,欢迎${username}!`);

});

</script>

(三)事件对象(event)的核心属性

当事件触发时,JS会自动传递一个「事件对象」(通常命名为event或e),包含事件相关的关键信息,常用属性如下:

• event.target:触发事件的具体元素(如点击列表项时,target是当前列表项);

• event.currentTarget:绑定事件的元素(如列表绑定事件,currentTarget是列表本身);

• event.preventDefault():阻止事件的默认行为(如表单提交、链接跳转);

• event.stopPropagation():阻止事件冒泡(避免父元素触发相同事件)。

示例:事件冒泡与阻止

<div id="parent" style="width: 200px; height: 200px; background: #f0f0f0; padding: 20px;">

父元素

<div id="child" style="width: 100px; height: 100px; background: #42b983; color: white;">

子元素

</div>

</div>

<script>

const parent = document.getElementById("parent");

const child = document.getElementById("child");

// 父元素点击事件

parent.addEventListener("click", () => {

console.log("父元素被点击");

});

// 子元素点击事件(默认会冒泡到父元素)

child.addEventListener("click", (e) => {

console.log("子元素被点击");

// 阻止事件冒泡,父元素不再触发

e.stopPropagation();

});

</script>

点击子元素时,若不阻止冒泡,会同时打印"子元素被点击"和"父元素被点击";阻止后只打印前者。

二、CSS常用属性:让网页"美"起来

CSS属性按功能可分为「布局属性、样式属性、交互属性」三类,下面聚焦新手高频使用的属性,结合场景说明用法,所有示例可直接复制到HTML的<style>标签中运行。

(一)布局类属性:控制元素位置与大小

  1. display:元素的显示模式(核心)

控制元素是块级、行内还是行内块,直接影响布局逻辑,常用值如下:

值 特点 常用元素

block 独占一行,可设置宽高 div、p、h1~h6

inline 不独占一行,不可设置宽高 span、a、strong

inline-block 不独占一行,可设置宽高(兼顾两者) button、input

flex 弹性布局(父元素设置,子元素自动适配) 导航栏、卡片列表、表单

none 隐藏元素(不占空间) 弹窗关闭、条件隐藏内容

示例:弹性布局实现导航栏(水平居中+均匀分布)

<!-- HTML -->

<nav class="nav-container">

<a href="#" class="nav-item">首页</a>

<a href="#" class="nav-item">文章</a>

<a href="#" class="nav-item">教程</a>

<a href="#" class="nav-item">关于</a>

</nav>

<!-- CSS -->

<style>

.nav-container {

/* 1. 父元素设置flex */

display: flex;

/* 2. 子元素水平均匀分布 */

justify-content: space-around;

/* 3. 子元素垂直居中 */

align-items: center;

/* 4. 导航栏高度 */

height: 60px;

background: #333;

}

.nav-item {

color: white;

text-decoration: none;

padding: 0 10px;

}

.nav-item:hover {

color: #42b983; /* 鼠标 hover 时变色 */

}

</style>

  1. position:元素定位方式

控制元素在页面中的精确位置,常用值如下:

值 定位基准 实战场景

static 默认值,无定位(忽略top/right等) 普通元素

relative 相对于自身原位置(不脱离文档流) 子元素绝对定位的父容器

absolute 相对于最近的定位父元素(脱离文档流) 弹窗、下拉菜单、标签

fixed 相对于浏览器窗口(固定位置,不滚动) 顶部导航栏、回到顶部按钮

示例:固定在右下角的"回到顶部"按钮

<!-- HTML -->

<button class="back-to-top">↑ 回到顶部</button>

<!-- CSS -->

<style>

.back-to-top {

/* 1. 固定定位(相对于浏览器窗口) */

position: fixed;

/* 2. 定位到右下角 */

bottom: 20px;

right: 20px;

/* 3. 样式优化 */

padding: 8px 16px;

background: #42b983;

color: white;

border: none;

border-radius: 4px;

cursor: pointer;

/* 4. 默认隐藏,滚动后显示(配合JS) */

display: none;

}

.back-to-top.show {

display: block;

}

</style>

<!-- JS:滚动时显示按钮 -->

<script>

const btn = document.querySelector(".back-to-top");

window.addEventListener("scroll", () => {

// 滚动距离超过500px时显示按钮

if (window.scrollY > 500) {

btn.classList.add("show");

} else {

btn.classList.remove("show");

}

});

// 点击按钮回到顶部

btn.addEventListener("click", () => {

window.scrollTo({ top: 0, behavior: "smooth" }); // smooth:平滑滚动

});

</script>

  1. width/height:元素宽高

• 单位:px(固定像素)、%(相对于父元素)、vw/vh(相对于窗口宽高,1vw=窗口宽1%);

• 特殊值:auto(默认,自动适应内容)、max-width(最大宽度,防止元素过大)。

示例:响应式图片(最大宽度不超过父容器,高度自动)

img {

width: 100%; /* 占满父容器宽度 */

max-width: 600px; /* 最大宽度600px,避免过大 */

height: auto; /* 高度自动,保持图片比例 */

border-radius: 8px; /* 圆角,优化样式 */

}

(二)样式类属性:控制元素外观

  1. 颜色与背景

• color:文字颜色(支持十六进制#42b983、RGBrgb(66, 185, 131)、英文green);

• background:背景(可合并background-color、background-image、background-size等);

• background-color:背景色(单独设置背景色,比background更简洁)。

示例:渐变背景按钮

.button {

padding: 10px 20px;

border: none;

border-radius: 4px;

color: white;

font-size: 16px;

/* 线性渐变背景(从左到右,蓝色→绿色) */

background: linear-gradient(to right, #2196F3, #4CAF50);

cursor: pointer;

}

  1. 文字与字体

• font-size:字体大小(常用14px、16px,标题可用24px);

• font-weight:字体粗细(normal=400,bold=700,也可直接写数字500);

• text-align:文字对齐(left左对齐、center居中、right右对齐);

• line-height:行高(控制文字垂直间距,line-height: 1.5表示行高为字体大小1.5倍,常用于文字垂直居中)。

示例:居中标题(文字居中+垂直居中)

.title {

font-size: 24px;

font-weight: 600;

color: #333;

text-align: center; /* 文字水平居中 */

line-height: 80px; /* 行高=容器高度,实现文字垂直居中 */

height: 80px; /* 容器高度 */

background: #f5f5f5;

}

  1. 边框与圆角

• border:边框(合并border-width、border-style、border-color,如border: 1px solid #eee);

• border-radius:圆角(值越大圆角越明显,50%可实现圆形);

• box-shadow:阴影(增强立体感,语法:box-shadow: 水平偏移 垂直偏移 模糊度 颜色)。

示例:带阴影的卡片

.card {

width: 300px;

padding: 20px;

margin: 20px;

background: white;

border: none;

border-radius: 8px;

/* 阴影:水平0,垂直4px,模糊10px,淡灰色 */

box-shadow: 0 4px 10px rgba(0, 0, 0, 0.05);

}

(三)交互类属性:增强用户体验

  1. cursor:鼠标指针样式

控制鼠标 hover 到元素上时的指针形状,常用值:

• pointer:手型(表示可点击,如按钮、链接);

• text:文本型(表示可选中文字,如段落、输入框);

• wait:加载中(表示正在处理,如表单提交时);

• default:默认箭头(普通元素)。

示例:不同元素的鼠标样式

button { cursor: pointer; } /* 按钮:手型 */

input { cursor: text; } /* 输入框:文本型 */

.loading { cursor: wait; } /* 加载中:转圈 */

  1. transition:过渡动画

让元素样式变化更平滑(如hover时颜色、大小变化),语法:transition: 属性 时长 过渡曲线。

示例:hover时按钮放大+变色(平滑过渡)

.button {

padding: 10px 20px;

background: #42b983;

color: white;

border: none;

border-radius: 4px;

/* 所有样式变化都有0.3秒平滑过渡 */

transition: all 0.3s ease;

}

.button:hover {

/* hover时变化:背景色变深+放大10% */

background: #359469;

transform: scale(1.1); /* 放大1.1倍 */

}

三、JS与CSS配合实战:实现"暗黑模式"切换

结合上面的知识点,用「JS事件处理+CSS样式切换」实现一个实用功能------暗黑模式切换,帮你理解二者协同逻辑:

<!-- HTML:开关按钮 + 内容区域 -->

<div class="container">

<button id="themeToggle">切换暗黑模式</button>

<h2>JS与CSS配合实战</h2>

<p>这是一段测试文本,暗黑模式下会切换背景和文字颜色。</p>

</div>

<!-- CSS:默认样式 + 暗黑模式样式 -->

<style>

/* 基础样式(默认浅色模式) */

.container {

max-width: 800px;

margin: 50px auto;

padding: 20px;

background: white;

color: #333;

/* 样式变化平滑过渡 */

transition: background 0.3s, color 0.3s;

}

#themeToggle {

padding: 8px 16px;

background: #42b983;

color: white;

border: none;

border-radius: 4px;

cursor: pointer;

margin-bottom: 20px;

}

/* 暗黑模式样式(通过添加dark类触发) */

.container.dark {

background: #1a1a1a;

color: #eee;

}

.container.dark #themeToggle {

background: #666;

}

</style>

<!-- JS:点击按钮切换类(控制暗黑模式) -->

<script>

const toggleBtn = document.getElementById("themeToggle");

const container = document.querySelector(".container");

// 点击按钮切换dark类

toggleBtn.addEventListener("click", () => {

// toggleClass:有则移除,无则添加

container.classList.toggle("dark");

// 同步修改按钮文字

if (container.classList.contains("dark")) {

toggleBtn.textContent = "切换浅色模式";

} else {

toggleBtn.textContent = "切换暗黑模式";

}

});

</script>

核心逻辑:

  1. CSS中定义dark类的暗黑模式样式;

  2. JS监听按钮点击事件,通过classList.toggle("dark")给容器添加/移除dark类;

  3. 利用CSS的transition属性,让背景和文字颜色变化更平滑。

四、总结:新手学习建议

  1. JS事件处理:优先掌握addEventListener(灵活),理解事件对象的target和preventDefault,多练表单验证、按钮交互等场景;

  2. CSS属性:先记display(布局核心)、position(定位)、color/background(样式),再学flex(弹性布局)和transition(动画);

  3. 实战结合:学一个知识点就写一个小案例(如计数器、导航栏、暗黑模式),用JS控制CSS类切换是前端交互的核心思路。

相关推荐
崔庆才丨静觅2 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60612 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了3 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅3 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅3 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅3 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment3 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅4 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊4 小时前
jwt介绍
前端
爱敲代码的小鱼4 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax