自动流动文本的最干净的技巧
今年早些时候,我写了一篇关于自动扩展文本区域和输入框的文章。其核心思想是让文本区域更像一个<div>,使其高度根据内容自动调整,以容纳当前值。 令人惊讶的是,目前还没有简单的原生解决方案来实现这一点,不是吗? 回顾那篇文章,我提出的想法都不太理想。但文章结尾处提到的Stephen Shaw的方案却非常出色,因此我想重点介绍一下,并讲解其工作原理,因为它似乎是解决此类用户体验问题的最终答案,直到我们获得更好的原生方案。如果您只想查看可运行的示例,请查看演示:
<h3 id="技巧在于精确复制文本区域的内容到一个-em-可以-em-自动扩展高度的元素中-并使其大小匹配">技巧在于精确复制文本区域的内容到一个<em>可以</em>自动扩展高度的元素中,并使其大小匹配。</h3>
<p>您有一个<code><textarea></textarea>
,它无法自动扩展高度。
相反,您需要在另一个元素中精确复制<textarea></textarea>
的外观、内容和位置。您可以隐藏副本的视觉效果(也可以保留实际功能的<textarea></textarea>
可见)。
现在,这三个元素相互关联。最高的子元素会将父元素的高度推高,其他子元素也会随之调整。这意味着<textarea></textarea>
的最小高度将成为“基准”高度,但如果复制的文本元素变得更高,则所有元素都会随之变高。
如此巧妙!我非常喜欢它。
您需要确保复制的元素完全相同
相同的字体、相同的填充、相同的边距、相同的边框……一切都要相同。它是一个完全相同的副本,只是通过visibility: hidden;
隐藏了视觉效果。如果两者不完全相同,则所有元素的高度不会完全同步。
我们还需要在复制的文本上使用white-space: pre-wrap;
,因为这是<textarea></textarea>
的行为方式。
这是最奇怪的部分
在我的演示中,我使用::after
来创建复制的文本。我不确定这是否是最佳方法。对我来说,这感觉很简洁,但我不知道使用<div aria-hidden="true">对于屏幕阅读器是否更安全?或者<code>visibility: hidden;
就足够了吗?无论如何,这还不是最奇怪的部分。最奇怪的部分是:
<code>content: attr(data-replicated-value) " ";</code>
因为我使用的是伪元素,所以这一行将数据属性从元素中获取,并将内容呈现到页面上并添加了一个额外的空格(这就是最奇怪的部分)。如果您不这样做,最终结果会显得“跳跃”。我无法完全理解其中的原因,但它似乎能更好地处理<textarea></textarea>
和文本元素之间的换行符行为。
如果您不想使用伪元素,也可以,但请注意“跳跃”行为。
特别感谢WillEarp和MartinTillmann,他们都在同一天随机发邮件提醒我Shaw的技巧有多么巧妙。这是Martin使用Alpine.js和Tailwind制作的示例,最终也类似于单行代码(但请注意它存在“跳跃”问题)。
我相信大家可以想象如何使用Vue和React等框架来实现这一点,并轻松地在<textarea></textarea>
和其他元素之间维护状态。我不会在这里包含示例,部分原因是我比较懒,但主要是因为我认为您应该理解其工作原理。这将使您更聪明,并更好地理解您的网站。
以上是自动流动文本的最干净的技巧的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

您是否曾经在项目上需要一个倒计时计时器?对于这样的东西,可以自然访问插件,但实际上更多

我关注的一件事是Lea Verou&#039; s conic-Gradient()Polyfill的功能列表是最后一项:
