You need to enable JavaScript to run this app. 如何用HTML、CSS实现类控制台DIV(支持换行、清旧,适配Express+EJS)
优惠活动
大模型
产品
解决方案
定价
更多

如何用HTML、CSS实现类控制台DIV(支持换行、清旧,适配Express+EJS)

类控制台效果实现调整方案

现有实现的核心问题

  • 原逻辑直接拼接无分隔的字符串,浏览器渲染时会把连续长文本当成无间断内容,不会自动折行
  • 容器未配置文本换行规则、溢出裁剪规则,长内容会直接撑破div边界
  • 所有内容挤在同一个p标签内,无法实现“新内容独立成行、超出范围自动移除旧内容”的控制台效果

第一步:调整后端路由逻辑

将原全局字符串变量改为数组存储独立日志条目,方便后续拆分渲染、裁剪旧内容,可按需补充日志时间戳增强控制台真实感:

// 全局存储控制台日志(可根据业务需要替换为持久化存储)
let consoleLogs = [];

app.get('/console', (req, res) => {
    // 每次访问新增一条独立日志
    const newLog = `[${new Date().toLocaleTimeString()}] Console log`;
    consoleLogs.push(newLog);
    // 将全量日志传给模板渲染,前端自动裁剪适配可视区域
    res.render('console.ejs', { logs: consoleLogs });
});

第二步:调整CSS样式

补充容器的盒模型规则、文本换行规则、溢出裁剪规则,搭配控制台常见的等宽字体提升展示效果:

.console {
    background-color: black;
    width: 80%;
    margin: auto;
    height: 30%;
    border-radius: 10px;
    padding: 10px;
    text-align: start;
    /* 核心适配样式 */
    box-sizing: border-box; /* 避免内边距撑破容器设定的宽度 */
    overflow: hidden; /* 隐藏超出容器范围的内容 */
    font-family: monospace; /* 控制台常用等宽字体 */
    line-height: 1.5; /* 适配控制台阅读的行高 */
    color: white;
}
/* 单条日志行样式 */
.console .log-line {
    margin: 0; /* 清除p标签默认上下边距,消除多余间距 */
    word-break: break-all; /* 长文本自动折行,不撑破容器宽度 */
    white-space: pre-wrap; /* 保留文本换行,同时自动适配容器宽度折行 */
}

第三步:调整EJS模板结构

将原单p标签改为循环渲染每条日志为独立行,搭配原生JS实现“超出可视高度自动删除最顶部旧内容”的逻辑:

<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" type="text/css" href="style.css"/>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Console</title>
</head>
<body>
    <div class="console" id="consoleBox">
        <% logs.forEach(log => { %>
            <p class="log-line"><%= log %></p>
        <% }) %>
    </div>

    <script>
        const consoleBox = document.getElementById('consoleBox');
        function trimOldLogs() {
            // 循环删除最顶部的旧日志,直到内容完全适配容器可视高度
            while (consoleBox.scrollHeight > consoleBox.clientHeight) {
                consoleBox.removeChild(consoleBox.firstElementChild);
            }
            // 如需自动定位到最新日志,可取消下面注释
            // consoleBox.scrollTop = consoleBox.scrollHeight;
        }
        // 页面加载完成后执行一次日志裁剪
        window.addEventListener('load', trimOldLogs);
    </script>
</body>
</html>

最终实现效果

  • 每条新增日志自动独立成行,长文本会自动折行,不会撑破容器宽度
  • 内容超出容器可视高度时,自动删除最顶部的旧日志,仅保留当前区域可容纳的最近内容,完全匹配系统控制台的展示逻辑
  • 无需手动控制换行,样式层自动处理长文本的适配

内容的提问来源于stack exchange,提问作者GttMone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.04 00:06:02