前言

这是一个很普遍的体验, 而且实现起来也很简单哦

参考

YouTube – How to Auto Resize Textarea using HTML CSS & JavaScript

效果

我故意加了 border 和 padding 来解释.

Step by Step 实现

HTML

<textarea class="stg-text-area-autoresize" rows="4"></textarea>

CSS Style

textarea {
font-size: 1.5rem;
padding-inline: 1rem;
background-color: pink;
border-inline: unset;
outline: unset; // 我刻意加入 border padding 来让情况变得复杂
padding-top: 15px;
padding-bottom: 20px;
border-top: 15px solid red;
border-bottom: 20px solid red;
}

效果

JavaScript

const textarea = document.querySelector('textarea');
// 监听, 每一次 input 的时候看需不需要 resize
textarea.addEventListener('input', () => {
// 先把 height 设置成 auto, 这样就可以还原小
textarea.style.height = 'auto'; // 获取当前的 border block
const { borderTopWidth, borderBottomWidth } = window.getComputedStyle(textarea); // 在把 height 设置成 scrollHeight 让它变大
// 之所以需要加 border 是因为 height 在 border-box 情况下是要包括 border 高度的.
// 而 scrollHeight 只有到 padding 的高度
textarea.style.height = `${
textarea.scrollHeight + parseFloat(borderTopWidth) + parseFloat(borderBottomWidth)
}px`;
});

关键就在改变 textare height

auto 变小

scrollHeight 变大

如果想了解 height, scrollHeight 是如何计算的, 可以看这篇: DOM – Dimension (offset, client, computed, rect)

CSS & JS Effect – Textarea Autoresize的更多相关文章

  1. js操作textarea方法集合

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  2. 使用div模拟textarea,实现文本输入框高度自适应(附:js控制textarea实现文本输入框高度自适应)

    一.使用textarea标签进行多行文本的输入有很多限制,比如不能实现高度自适应,会出现难看的滚动条等问题. HTML5中添加了一个新属性contenteditable,该属性可以让input,tex ...

  3. HTML---引入css,js | 常用标签示例

    一.前端基础包括哪些?如何理解 二.css,js引入_及head中其他标签 三.特殊符号 四.常见的标签 4.1,form表单 4.2,input系列(单选框.复选框.input传文件.重置) 4.3 ...

  4. HTML/CSS/JS编码规范

    最近整理了一份HTML/CSS/JS编码规范,供大家参考.目录:一.HTML编码规范二.CSS编码规范三.JS编码规范 一.HTML编码规范 1. img标签要写alt属性 根据W3C标准,img标签 ...

  5. 前端工程师面试问题归纳(一、问答类html/css/js基础)

    一.参考资源 1.前端面试题及答案整理(一) 2.2017年前端面试题整理汇总100题 3.2018最新Web前端经典面试试题及答案 4.[javascript常见面试题]常见前端面试题及答案 5.W ...

  6. 一个小公司的前端笔试HTML CSS JS

    网上有这套题的答案,版本也很多,我做了很多参考.本文就当个小笔记,可能有错误,还望指正~ 第1章  Html篇 1. 你做的网页在哪些浏览器测试过?这些浏览器的内核分别是什么? 浏览器类型 内核 Fi ...

  7. 前端小白页面开发注意事项及小工具(html\css\js)

    技术一直在向前发展.但是有一些是相通的,要找准重点,将80%的时间放在提升基础问题上,余下的20%再去学习框架,库和工具. HTML 1. HTML 属性应当按照以下给出的顺序依次排列,确保代码的易读 ...

  8. #3使用html+css+js制作网页 制作登录网页

    #3使用html+css+js制作网页 制作登录网页 本系列链接 2制作登录网页 2.1 准备 2.1.1 创建文件夹 2.1.2 创建主文件 2.2 html部分 2.2.1 网站信息 2.2.2 ...

  9. CSS & JS 制作滚动幻灯片

    ==================纯CSS方式==================== <!DOCTYPE html> <html> <head> <met ...

  10. 【转】Maven Jetty 插件的问题(css/js等目录死锁)的解决

    Maven Jetty 插件的问题(css/js等目录死锁,不能自动刷新)的解决:   1. 打开下面的目录:C:\Users\用户名\.m2\repository\org\eclipse\jetty ...

随机推荐

  1. 在MySQL中 Truncate Delect Drop 的区别

    在MySQL中 Truncate Delect Drop 的区别 面试问题: -- -- 请详细描述MySQL中TRUNCATE TABLE.DELETE FROM和DROP TABLE三个命令的区别 ...

  2. RHCA cl210 015 实例启动 超融合 热迁移 网络underlay

    lab computeresources-hci setup 实例启动流程 keystone不仅做认证,且有所有组键地址 nova-conductor解耦,不允许nova-compute直接访问dat ...

  3. Jmeter函数助手29-dateTimeConvert

    dateTimeConvert函数用于将源格式进行目标格式的转换. 格式化时间:传入时间参数,此处格式需要与源时间格式一致 源时间格式:传入参数的时间格式 目标时间格式:想要转换成的格式 1.将源格式 ...

  4. 【Vue】11 VueRouter Part1 概述 & 入门

    什么是路由? 即通过互联网把信息从源地址传输到目的地址的活动 路由决定数据包从来源到目的地的路径 转送将输入端的数据转移到合适的输出端 后端路由: 早起网站开发全部由服务器渲染,例如 Java的JSP ...

  5. 暑假自学Java进度总结04

    一.今日所学: 1.下载并使用idea开发工具 1>了解idea的发展历史 2>尝试用idea编写代码 3>学习idea中的项目和模块操作 2.学习赋值运算符 加后赋值:" ...

  6. docker容器挂载host宿主机的本地目录,docker容器与宿主机之间互相拷贝文件

    docker容器挂载host宿主机的本地目录,docker容器与宿主机之间互相拷贝文件 参考于: https://blog.csdn.net/weixin_37773766/article/detai ...

  7. 为了落地DDD,我是这样“PUA”大家的

    本文书接上回<先有鸡还是先有蛋?这是领域驱动设计落地最大的困局> https://mp.weixin.qq.com/s/lzAZXgchCg_VyLmyo2N18Q   故事背景 2023 ...

  8. 9组-Alpha冲刺-5/6

    一.基本情况 队名:不行就摆了吧 组长博客: https://www.cnblogs.com/Microsoft-hc/p/15546711.html 小组人数: 8 二.冲刺概况汇报 谢小龙 过去两 ...

  9. WPF自定义控件之ItemsControl鱼眼效果

    原理 先获取鼠标在控件中的坐标,在获取其每一项相对于ItemsControl的坐标,然后计算每一项离当前鼠标的距离,在根据这个距离,对其每一项进行适当的缩放 实现 创建一个类,命名为FishEyeIt ...

  10. 新员工一口气写完了这些C语言例子,领导给他转正了!

    持续更新中... 很多想从事嵌入式Linux开发的老铁问一口君,有没有快速提升自己编程水平的小例子? 一口君根据自己多年工作经验,整理了一些基于Linux的c语言的非常实用的小例子, 这些例子在嵌入式 ...