我有一个white-space: wrap;的文本区.

但是,当文本区域被禁用时,换行符将被忽略:

const textarea = document.querySelector("textarea");

document.querySelector("button").addEventListener("click", (e) => {
  if (!textarea.hasAttribute("disabled")) {
    textarea.setAttribute("disabled", "disabled");
  } else {
    textarea.removeAttribute("disabled", "disabled");
  }
});
textarea,
textarea:disabled {
  width: 600px;
  height: 100px;
  white-space: wrap;
}
<textarea wrap="on">1asdfasdf

2afdasdfafdasdfafdasdfaw


3asdfasdf


4asdfasdf</textarea>

<br/>

<button>Toggle 'disabled'</button>

JSFiddle

我希望textarea内容保持不变,无论是否禁用.它还包括textarea的scrollHeight.

有可能吗?

推荐答案

wrap对于white-space css属性无效,可接受的值可以是下列值之一:

white-space: normal|nowrap|pre|pre-line|pre-wrap|initial|inherit;

要解决此问题,您可以使用white-space: pre-wrap;.

textarea:disabled {
  ...
  white-space: pre-wrap;
}

这将确保textarea的内容在行尾换行,并保留空格和换行符,即使在禁用textarea时也是如此.

最终版本应该是这样的:

const textarea = document.querySelector("textarea");

document.querySelector("button").addEventListener("click", (e) => {
  if (!textarea.hasAttribute("disabled")) {
    textarea.setAttribute("disabled", "disabled");
  } else {
    textarea.removeAttribute("disabled", "disabled");
  }
});
textarea,
textarea:disabled {
  width: 600px;
  height: 100px;
  white-space: pre-wrap;
}
<textarea wrap="on">1asdfasdf

2afdasdfafdasdfafdasdfaw


3asdfasdf


4asdfasdf</textarea>

<br/>

<button>Toggle 'disabled'</button>

pre vs pre-wrap vs pre-line

  1. 100

    • Whitespace Preservation:所有的空格序列(如空格和制表符)都被精确地保留在HTML中.
    • Line Breaks:只在HTML源文件中的换行符(\n)或<br>个元素处换行.当文本超出容器的宽度时,它不会自动换行到下一行.
    • Use Case:通常用于显示代码或预先格式化的文本,其中格式化非常关键,并且应该完全按照在HTML中编写的方式显示.
  2. 100

    • Whitespace Preservation:pre类似,它保留所有空格序列.
    • Line Breaks:行在换行符、<br>个元素处换行,并在到达容器(行框)的末尾时自动换行.
    • 当您希望保留原始空格和换行符,但又需要文本在其容器中换行时,例如在某些文本编辑器或注释区中,Use Case:非常有用.
  3. 100

    • Whitespace Collapse:prepre-wrap不同,pre-line将空白序列折叠为单个空白.但是,它仍然保留了内容中的换行符.
    • Line Breaks:行在换行符、<br>个元素处换行,文本在容器边缘换行.
    • Use Case:如果您希望保持文本格式的整洁和整洁,同时尊重显式换行符,例如在某些类型的格式化内容显示中,这将非常有用.

Html相关问答推荐

使用Scrapy Select 最后一个子文本

我的表的第一列似乎是推其他2列到右边,我不能改变它

如何格式化HTML文本,使其环绕关键字

CSS/添加margin—top到嵌入式facebook帖子

悬停时跳转的内容

Bootstrap nav没有崩溃

风格规则应该适用于响应图像的哪些方面?哪种规则适用于<;图片和gt;,哪种规则适用于<;img>;?

使用`<;use>;`与`<;img>;`时呈现的SVG大小不同

角化、剪裁、边缘,但仅在底部2和平滑包装上

水平行中按钮的垂直偏移

30000ms后超时重试:期望找到元素:someElement,但从未找到它

网格布局中的组件

嵌入最近的 YOUTUBE 视频(不是短片,视频)

使用修饰键微调 HTML 输入范围中的值

水平填充容器内的空间

导航丸被选中(活动),但内容未显示.怎么会?

如何根据行中的其中一列将行居中?

将表格标题和过滤器调整到表格的顶部边缘

在一行中对齐两个不同形式的按钮

使用 tailwind css 将 HTML/CSS/JS 站点转换为 React App