news 2026/5/7 17:36:42

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/5/7 15:57:28

一次写入,永久锁定!OTP存储操作需谨慎

今天&#xff0c;我们一起来聊聊LuatOS中的OTP功能。 OTP&#xff08;One-Time Programmable Memory&#xff09;是一次性可编程存储。其核心特点是 “一次写入&#xff0c;永久锁定” &#xff0c;数据在物理层面无法再被修改或擦除。 典型应用场景&#xff1a; 设备身份标识…

作者头像 李华
网站建设 2026/5/7 15:57:28

mswinsck.ocx文件丢失找不到未注册问题 免费下载方法分享

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

作者头像 李华
网站建设 2026/5/7 17:02:59

KindEditor源码解析:WORD图片复制功能如何实现?

震惊&#xff01;Java程序员遭遇"680元预算做Office全家桶Plus"的奇幻漂流 大家好&#xff0c;我是北京某Java码农老李&#xff08;头发比Spring的版本号还少的那种&#xff09;。最近接了个CMS项目&#xff0c;客户要求把Word、Excel、PPT、PDF甚至微信公众号内容统…

作者头像 李华
网站建设 2026/5/7 17:02:59

全网最全9个AI论文平台,研究生高效写作必备!

全网最全9个AI论文平台&#xff0c;研究生高效写作必备&#xff01; AI 工具如何重塑研究生的论文写作之路 在当今学术研究日益数字化的背景下&#xff0c;AI 工具正逐渐成为研究生们不可或缺的助手。尤其是在论文写作过程中&#xff0c;AI 不仅能够显著降低 AIGC&#xff08…

作者头像 李华
网站建设 2026/5/7 17:03:14

python微信小程序的新生报道报到系统

文章目录微信小程序新生报到系统摘要核心功能模块技术实现要点应用价值--nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;微信小程序新生报到系统摘要 基于Python开发的微信小程序新生报到系统&#xff0c;旨在简化高…

作者头像 李华