源代码

index.html

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>登录页面</title><!-- 引入外部CSS文件 --><link rel="stylesheet" href="styles.css">
</head>
<body><!-- 登录页面的容器 --><div class="login-container"><!-- 页面标题 --><h2>登录</h2><!-- 表单元素,用于用户输入 --><form id="loginForm"><!-- 用户名输入框 --><div class="input-group"><label for="username">用户名:</label><!-- 输入框必须填写 --><input type="text" id="username" name="username" required></div><!-- 密码输入框 --><div class="input-group"><label for="password">密码:</label><!-- 输入框必须填写 --><input type="password" id="password" name="password" required></div><!-- 提交按钮 --><button type="submit">登录</button></form><!-- 显示验证信息的容器 --><div id="message"></div></div><!-- 引入外部JavaScript文件 --><script src="script.js"></script>
</body>
</html>

 styles.css

/* 整体页面样式 */
body {font-family: Arial, sans-serif;background-color: #f4f4f9;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;
}/* 登录页面容器样式 */
.login-container {background-color: #fff;padding: 20px;border-radius: 8px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);width: 300px;text-align: center;
}/* 标题样式 */
h2 {margin-bottom: 20px;
}/* 输入框组样式 */
.input-group {margin-bottom: 15px;text-align: left;
}/* 标签样式 */
label {display: block;margin-bottom: 5px;
}/* 输入框样式 */
input[type="text"],
input[type="password"] {width: 100%;padding: 8px;box-sizing: border-box;border: 1px solid #ccc;border-radius: 4px;
}/* 按钮样式 */
button {width: 100%;padding: 10px;background-color: #007bff;color: #fff;border: none;border-radius: 4px;cursor: pointer;
}/* 按钮悬停样式 */
button:hover {background-color: #0056b3;
}/* 验证信息显示样式 */
#message {margin-top: 15px;color: red;
}

 script.js

// 为表单添加提交事件监听器
document.getElementById('loginForm').addEventListener('submit', function(event) {event.preventDefault(); // 阻止表单默认提交行为,防止页面刷新// 获取用户名和密码输入框的值var username = document.getElementById('username').value;var password = document.getElementById('password').value;var messageDiv = document.getElementById('message');// 简单的验证逻辑if (username === '' || password === '') {// 如果用户名或密码为空,显示错误信息messageDiv.textContent = '用户名和密码不能为空';} else if (username === 'admin' && password === 'password') {// 如果用户名和密码匹配预定义值,显示成功信息messageDiv.style.color = 'green';messageDiv.textContent = '登录成功';// 这里可以添加登录成功后的逻辑,比如重定向到其他页面// window.location.href = 'dashboard.html';} else {// 如果用户名或密码不匹配,显示错误信息messageDiv.textContent = '用户名或密码错误';}
});

效果图

分析

1. index.html

此为网页的 HTML 结构,它定义了页面的基本内容与布局。

  • 元数据与标题:借助 <meta> 标签设定字符编码与视口,页面标题为 “登录页面”。
  • 样式引入:通过 <link> 标签引入外部 CSS 文件 styles.css,用于页面样式的美化。
  • 登录表单:构建了一个包含用户名和密码输入框的表单,二者均为必填项。表单的 id 为 loginForm,方便后续 JavaScript 操作。
  • 消息显示区域:利用 <div id="message"> 来显示登录验证的结果信息。
  • 脚本引入:通过 <script> 标签引入外部 JavaScript 文件 script.js,以实现表单提交的交互逻辑。

2. styles.css

为页面提供样式,确保页面具有良好的视觉效果。

  • 整体页面样式:将页面背景颜色设为 #f4f4f9,使用 flexbox 布局让登录容器居中显示。
  • 登录容器样式:设置登录容器的背景颜色为白色,添加圆角和阴影效果,宽度为 300px。
  • 输入框与按钮样式:为输入框和按钮添加了边框、圆角和内边距,按钮悬停时背景颜色会发生变化。
  • 验证信息样式:验证信息默认显示为红色。

3. script.js

实现了表单提交的交互逻辑,包含输入验证和登录结果显示。

  • 事件监听:为表单添加 submit 事件监听器,阻止表单的默认提交行为,避免页面刷新。
  • 输入验证:获取用户名和密码输入框的值,进行简单的验证。若用户名或密码为空,显示错误信息;若用户名和密码匹配预定义值(admin 和 password),显示成功信息;否则,显示错误信息。
  • 登录成功逻辑:在登录成功时,可添加重定向到其他页面的逻辑,如 window.location.href = 'dashboard.html';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/915837.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915837.shtml
英文地址,请注明出处:http://en.pswp.cn/news/915837.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RAG项目实战:LangChain 0.3集成 Milvus 2.5向量数据库,构建大模型智能应用

项目背景 最近&#xff0c;有时间&#xff0c;想着动手实战一下&#xff0c;从0到1搭建一个 RAG 系统&#xff0c;也是想通过实战的方式来更进一步学习 RAG。因此&#xff0c;就定下了以项目实战为主&#xff0c;书籍为辅的执行方式。&#xff08;书籍是黄佳老师著的《RAG 实战…

docker build 和compose 学习笔记

目录 docker build 笔记 1. 路径解析 2. 关键注意事项 2. docker compose up -d 核心区别对比 常见工作流 补充说明 1. 功能区别 2. 协作关系 场景 1&#xff1a;Compose 自动调用 Build 场景 2&#xff1a;先 Build 后 Compose 3. 关键区别 4. 为什么需要协作&…

Java学习第六十六部分——分布式系统架构

目录 一、前言提要 二、核心目标 三、核心组件与技术 1. 服务拆分与通信 2. 服务注册与发现 3. 配置中心 4. 负载均衡 5. 熔断、降级与限流 6. API 网关 7. 分布式数据管理 8. 分布式追踪与监控 9. 容器化与编排 四、典型Java分布式技术栈组合 五、关键…

Pycharm的Terminal打开后默认是python环境

Pycharm的Terminal打开后默认是python环境解决方案Pycharm的Terminal打开后默认是python环境&#xff0c;无法执行pip等命令&#xff0c;也没办法退出 解决方案 点击Settings -> Tools -> Terminal 可以看到当前默认打开的是torch19py38环境中的python.exe&#xff08;…

LVS——nat模式

一、搭建nat模式下LVS的实验环境1.创建四台虚拟机client——客户端&#xff1a;192.168.134.111/24&#xff08;nat模式&#xff09;LVS——调度器【双网卡】&#xff1a;192.168.134.112/24&#xff08;nat模式&#xff09;、172.25.254.111/24&#xff08;仅主机模式&#xf…

ElasticSearch是什么

ElasticSearch是什么 ElasticSearch 是一个基于 Apache Lucene 的开源分布式搜索引擎&#xff0c;用于全文搜索、日志分析、实时数据分析等场景。它以高性能、分布式架构和易用性著称&#xff0c;支持 JSON 格式的数据存储和查询&#xff0c;广泛应用于日志监控、搜索服务、企业…

linxu CentOS 配置nginx

1、准备要发布的文件夹sudo mkdir -p /var/www/myfiles # 创建文件夹&#xff08;如果不存在&#xff09; sudo chmod -R 755 /var/www/myfiles # 设置权限&#xff08;确保 Nginx 可以读取&#xff09; sudo chown -R nginx:nginx /var/www/myfiles # 修改所有者&#xff0…

内网穿透利器:基于HTTPHTTPS隧道的代理工具深度解析

内网穿透利器&#xff1a;基于HTTP/HTTPS隧道的代理工具深度解析 一、引言 在渗透测试和内网渗透中&#xff0c;HTTP/HTTPS隧道技术是突破网络边界的关键手段。它通过将TCP流量封装在HTTP协议中&#xff0c;穿透防火墙/NACL策略&#xff0c;实现内网横向移动。本文以reGeorg为…

容器编排K8S

k8s概述 容器部署优势:部署方便,不依赖底层环境,升级镜像 本质是一个容器编排工具,golang语言开发 master master管理节点:kube-api-server请求接口,kube-scheduler调度器,kube-controller-manager控制器/管理器,etcd分布式存储数据库 work node服务节点:kubelet代理保…

C语言:深入理解指针(1)

1. 内存和地址在了解指针前&#xff0c;我们需要知道内存和地址是什么。1.1 内存首先来看内存。举个例子&#xff1a;当你在酒店找房间时&#xff0c;你并不是一层一层一间一间找&#xff0c;而是通过酒店为每间房子设置的门牌号直接找到你的房间&#xff0c;这样的效率就会快很…

完整的 SquareStudio 注册登录功能实现方案:已经烧录到开发板正常使用

根据你的需求&#xff0c;我将提供完整的实现方案&#xff0c;解决按钮同时执行多个动作的问题&#xff0c;并确保注册登录功能正常工作。所需文件结构需要创建和修改的文件如下&#xff1a;ui_events.h - 事件处理函数声明events.c - 实际的事件处理逻辑ui.c - UI 初始化和事件…

OkHttp 与 Chuck 结合使用:优雅的 Android 网络请求调试方案

前言在 Android 应用开发过程中&#xff0c;网络请求调试是日常工作中不可或缺的一部分。Chuck 是一个轻量级的 OkHttp 拦截器&#xff0c;能够在应用内直接显示网络请求和响应的详细信息&#xff0c;无需连接电脑或使用额外工具。本文将详细介绍如何将 OkHttp 与 Chuck 结合使…

AI学习--本地部署ollama

AI小白&#xff0c;记录下本地部署ollama1.下载安装ollama下载地址ollama官方地址https://ollama.com/download根据系统下载即可下面是我下载的地址 https://release-assets.githubusercontent.com/github-production-release-asset/658928958/e8384a9d-8b1e-4742-9400-7a0ce2a…

docker 设置镜像仓库代理

1. 创建 Docker 服务的代理配置文件sudo mkdir -p /etc/systemd/system/docker.service.d2.创建文件 /etc/systemd/system/docker.service.d/http-proxy.conf&#xff0c;内容如下&#xff1a;[Service] Environment"HTTP_PROXYhttp://192.168.0.111:7890" Environme…

ffmpeg rtsp 丢包处理

直接用 demux 在有些网络中&#xff0c;丢包画屏&#xff1b; 再ffmpeg和ffplay中&#xff0c;可以指定 tcp 方式&#xff0c;所以代码直接设置陶瓷坯方式&#xff1b; // 设置RTSP选项优化接收数据流防止数据包丢失 av_dict_set(&options, "rtsp_transport", …

aosp15实现SurfaceFlinger的dump输出带上Layer详细信息踩坑笔记

背景&#xff1a; 针对上一篇文章 aosp15上SurfaceFlinger的dump部分新特性-无Layer信息输出如何解决&#xff1f; 给大家布置了一个小作业&#xff0c;那就是需要实现dumpsys SurfaceFlinger相关输出中可以携带上所有的Layer的详细信息需求&#xff0c;今天来带大家详细实现一…

Linux 网络调优指南:废弃的 tcp_tw_recycle 与安全替代方案

一、问题起源:消失的内核参数 当你在 Debian 10 系统执行 sysctl 命令时,若看到报错: sysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recycle: 没有那个文件或目录 这并非配置错误,而是Linux 内核演进的结果。自 4.12 版本起,内核正式移除了 tcp_tw_recycle 参数——…

删除有序数组中的重复项

class Solution {public int removeElement(int[] nums, int val) {// 暴力法int n nums.length;for (int i 0; i < n; i) {if (nums[i] val) {for (int j i 1; j < n; j) {nums[j - 1] nums[j];}i--;n--;}}return n;} }代码逻辑解析首先获取数组长度n&#xff0c;…

【Pytest】从配置到固件的使用指南

掌握高效测试的关键技巧&#xff0c;打造专业级自动化测试框架一、Pytest框架的核心优势 Pytest作为Python最强大的测试框架之一&#xff0c;以其简洁灵活的语法和丰富的扩展能力深受开发者喜爱。相比unittest&#xff0c;Pytest提供了更直观的测试编写方式和更强大的功能集&am…

[matlab]matlab上安装xgboost安装教程简单版

【前言】 网上基于MATLAB的xgboost安装教程太少了&#xff0c;以至于几乎搜不到&#xff0c;为此做了一个简单安装教程【安装前提】 有matlab软件&#xff0c;版本越高越好&#xff0c;我用的是2023a。理论支持matlab2018a及其以上&#xff0c;因此需要自己提前安装好matlab【安…