当前位置: 首页 > web >正文

文本换行问题

目录

问题描述

问题解决

前端解决(推荐)

1.<br>替换

2.使用CSS属性white-space(推荐)


问题描述

前端中的<textarea>标签输入多行文本,传输到MySQL数据库后,再取出渲染到一个<div>标签中,出现“文本不换行,文字挤在一起

具体问题如下图所示:

<textarea>的内容转移到<div>时,不会自动换行

问题解决

分析问题后,问题可以由“前端”或者“后端”两个方面解决。

为方便,这里使用“点击按钮”的方式,来模拟前端从后端获取数据的过程

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><style>html,body {margin: 0;padding: 0;}.container {height: 100vh;display: flex;flex-direction: column;justify-content: center;align-items: center;gap: 20px;background-color: #ccc;}#myTextarea {width: 50%;height: 200px;font-size: 16px;}#myDiv {background-color: white;}</style>
</head><body>
<div class="container"><textarea id="myTextarea"></textarea><button id="myButton">点击</button><div id="myDiv"></div>
</div>
<script>
window.onload = function () {const button = document.getElementById('myButton');const textarea = document.getElementById('myTextarea');const div = document.getElementById('myDiv');button.addEventListener('click',function (){div.textContent = textarea.value;})
}
</script>
</body></html>

前端解决(推荐)

1.<br>替换

在将文本渲染到div前,可以用JavaScript将换行符替换为HTML的换行标签<br>

const text = textarea.value.replace(/\n/g,'<br>');
div.innerHTML = text;

效果:

  • 问题:这种方式必须使用innerHTML渲染,这样容易被XSS攻击,不建议使用

2.使用CSS属性white-space(推荐)

无需修改文本,直接通过CSSdiv保留换行符

#myDiv {background-color: white;white-space: pre-wrap; /* 保留换行和空格,自动换行 */
}

扩展

  • white-space:pre-wrapwhite-space:pre都是CSS中用于控制文本空白(空格、换行等)显示方式的属性,但是它们在处理“自动换行”的行为上有明显区别
属性值空白处理自动换行处理应用场景
pre保留所有空格和换行不自动换行,内容会超出容器宽度代码块,需要严格保留格式的文本
pre-wrap保留所有空格和换行自动换行,内容会适应容器宽度普通文本

da 

使用pre

使用pre-wrap

总之,不管使用prepre-wrap都可以保留文本中的换行,并且此时不需要使用“innerHTML”,可以很好的避免XSS攻击

http://www.xdnf.cn/news/17068.html

相关文章:

  • Node.js 操作 MySQL
  • SpringAI的使用
  • Mysql的MVCC是什么
  • 基于开源AI智能客服、AI智能名片与S2B2C商城小程序的餐饮行业私域流量运营策略研究
  • 数据结构-双链表
  • 【数据分享】各省粮食外贸依存度、粮食波动率等粮食相关数据合集(2011-2022)(获取方式看文末)
  • MCP革命:AI世界的“USB-C”接口如何重塑智能体与外部工具的连接
  • 信号传播速度与延时
  • 机器学习——下采样(UnderSampling),解决类别不平衡问题,案例:逻辑回归 信用卡欺诈检测
  • 【2025ICCV-目标检测方向】WaveMamba:用于 RGB-红外目标检测的小波驱动曼巴融合
  • 从零开始实现Qwen3(Dense架构)
  • template<typename R = void> 意义
  • 构建企业级Web应用:AWS全栈架构深度解析
  • ⭐CVPR2025 FreeUV:无真值 3D 人脸纹理重建框架
  • IDEA查看源码利器XCodeMap插件
  • DMDRS产品概述和安装部署
  • 服务端⾼并发分布式结构演进之路
  • 每日面试题19:深拷贝和浅拷贝的区别
  • All the Mods 9 - To the Sky - atm9sky 局域网联机报错可能解决方法
  • 玩转 Playwright 有头与无头模式:消除差异,提升爬虫稳定性
  • 人声伴奏分离API:音乐智能处理的强大工具
  • 提升工作效率的利器:Qwen3 大语言模型
  • [LeetCode优选算法专题一双指针——有效三角形的个数]
  • Android 之 图片加载(Fresco/Picasso/Glide)
  • [硬件电路-140]:模拟电路 - 信号处理电路 - 锁定放大器概述、工作原理、常见芯片、管脚定义
  • 多模态大模型综述:BLIP-2详解(第二篇)
  • GraphRAG:基于知识图谱的检索增强生成技术解析
  • 【QT】常⽤控件详解(二)windowOpacitycursorfontsetToolTipfocusPolicystyleSheet
  • 设计模式学习[17]---组合模式
  • 使用 Docker 部署 Golang 程序