news 2026/4/1 23:59:04

HTML练习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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> <style> * { margin: 0; padding: 0; box-sizing: border-box; } ul { list-style: none; } /* 容器居中 */ .container { width: 800px; margin: 50px auto; padding: 20px; border-radius: 12px; box-shadow: 0 0 15px rgba(0,0,0,0.08); } /* 输入区域样式 */ .input-area textarea { width: 100%; height: 120px; resize: none; border: 1px solid #eee; border-radius: 8px; padding: 15px; font-size: 16px; margin-bottom: 15px; transition: border 0.3s; } .input-area textarea:focus { outline: none; border-color: #4299e1; } /* 发布区域样式 */ .publish-bar { display: flex; justify-content: space-between; align-items: center; } .word-count span { color: #666; font-size: 14px; margin-right: 10px; } .word-count .useCount { color: #e53e3e; font-weight: bold; } .publish-btn { width: 110px; height: 36px; border: none; border-radius: 6px; background: #4299e1; color: #fff; font-size: 16px; cursor: pointer; transition: background 0.3s; } .publish-btn:hover { background: #3182ce; } .publish-btn:disabled { background: #a7c0ff; cursor: not-allowed; } /* 动态列表样式 */ .dynamic-list { margin-top: 30px; } .dynamic-list li { padding: 20px; border-bottom: 1px dashed #eee; position: relative; transition: background 0.3s; } .dynamic-list li:hover { background: #fafafa; } .user-info { display: flex; align-items: center; margin-bottom: 10px; } .user-avatar { width: 70px; height: 70px; border-radius: 50%; margin-right: 15px; } .user-meta span { font-size: 17px; font-weight: 600; color: #333; } .user-meta p { font-size: 12px; color: #999; margin-top: 4px; } .dynamic-content { color: #555; font-size: 15px; line-height: 1.6; word-break: break-all; margin-left: 85px; } /* 删除按钮样式 */ .delete-btn { position: absolute; right: 20px; top: 20px; color: #999; font-size: 20px; cursor: pointer; transition: color 0.3s; } .delete-btn:hover { color: #e53e3e; } </style> </head> <body> <div class="container"> <!-- 输入区域 --> <div class="input-area"> <textarea id="content" placeholder="分享你的想法..."></textarea> <div class="publish-bar"> <div class="word-count"> 已输入:<span class="useCount">0</span> 字 </div> <button class="publish-btn" id="publish">发布动态</button> </div> </div> <!-- 动态列表 --> <ul class="dynamic-list" id="dynamicList"></ul> </div> <script> // 1. 日期格式化函数(优化格式,保持美观) function formatTime() { const date = new Date(); const pad = (num) => num < 10 ? `0${num}` : num; const year = date.getFullYear(); const month = pad(date.getMonth() + 1); const day = pad(date.getDate()); const hours = pad(date.getHours()); const minutes = pad(date.getMinutes()); const seconds = pad(date.getSeconds()); return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; } // 2. 获取页面元素 const textarea = document.getElementById('content'); const publishBtn = document.getElementById('publish'); const wordCountSpan = document.querySelector('.useCount'); const dynamicList = document.getElementById('dynamicList'); // 3. 功能1:实时统计输入字数 textarea.oninput = function() { const length = this.value.trim().length; wordCountSpan.innerText = length; // 输入为空时禁用按钮 publishBtn.disabled = length === 0; }; // 4. 功能2:发布动态 publishBtn.onclick = function() { const content = textarea.value.trim(); // 二次校验(避免绕过input事件直接点击) if (!content) { alert('动态内容不能为空哦!'); return; } // 创建动态列表项li const li = document.createElement('li'); // 创建用户信息区域 const userInfo = document.createElement('div'); userInfo.className = 'user-info'; li.appendChild(userInfo); // 头像 const avatar = document.createElement('img'); avatar.className = 'user-avatar'; // 使用在线占位图(避免本地路径问题) avatar.src = 'https://via.placeholder.com/70/4299e1/ffffff?text=U'; userInfo.appendChild(avatar); // 用户名和发布时间 const userMeta = document.createElement('div'); userMeta.className = 'user-meta'; userInfo.appendChild(userMeta); const username = document.createElement('span'); username.innerText = '星辰大海'; // 自定义用户名 userMeta.appendChild(username); const publishTime = document.createElement('p'); publishTime.innerText = `发布于 ${formatTime()}`; userMeta.appendChild(publishTime); // 动态内容 const dynamicContent = document.createElement('div'); dynamicContent.className = 'dynamic-content'; dynamicContent.innerText = content; li.appendChild(dynamicContent); // 删除按钮(补充原系统未实现的功能) const deleteBtn = document.createElement('div'); deleteBtn.className = 'delete-btn'; deleteBtn.innerText = '×'; deleteBtn.onclick = function() { if (confirm('确定要删除这条动态吗?')) { dynamicList.removeChild(li); } }; li.appendChild(deleteBtn); // 将新动态插入列表顶部 dynamicList.insertBefore(li, dynamicList.firstChild); // 清空输入框并重置字数 textarea.value = ''; wordCountSpan.innerText = '0'; publishBtn.disabled = true; }; // 初始化:默认禁用发布按钮 publishBtn.disabled = true; </script> </body> </html>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 15:42:33

netlogon.dll文件丢失找不到 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/3/27 5:57:14

python微信小程序的物流车辆货运评价信息平台

目录 物流车辆货运评价信息平台摘要核心功能模块技术实现要点应用价值 开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 物流车辆货运评价信息平台摘要 该平台基于Python和微信小程序开发&a…

作者头像 李华
网站建设 2026/3/31 6:46:38

反序列化漏洞的自动化发现与Gadget挖掘

第一部分&#xff1a;开篇明义 —— 定义、价值与目标 定位与价值 在当今以微服务、分布式架构为主导的企业应用生态中&#xff0c;对象序列化与反序列化是实现数据持久化、网络传输和远程过程调用&#xff08;RPC&#xff09;的基石技术。然而&#xff0c;这项便利的技术背后…

作者头像 李华
网站建设 2026/3/27 17:46:44

央企应用中WebUploader怎样在局域网处理大文件分块上传?

【一个被4G大文件逼疯的北京码农自述&#xff1a;如何在信创环境下优雅地让政府文件"飞"起来】 各位战友好&#xff0c;我是老张&#xff0c;北京某软件公司前端组"秃头突击队"队长。最近接了个政府项目&#xff0c;客户要求用国产环境上传4G大文件&#x…

作者头像 李华
网站建设 2026/3/27 8:23:26

K8s 太重、虚拟机太旧,Sealos 找到了基础架构的最优解

说实话&#xff0c;每次看到有人在纠结"选 K8s 还是虚拟机"的时候&#xff0c;我都想说&#xff1a;朋友&#xff0c;这个问题本身就问错了。 就像问"我该骑自行车还是开卡车去买菜"一样——真正的答案是&#xff0c;你需要一辆刚好够用的车。 虚拟机&…

作者头像 李华