首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何定位元素w.r.t,就像文本框中的Grammarly按钮一样?

如何定位元素w.r.t,就像文本框中的Grammarly按钮一样?
EN

Stack Overflow用户
提问于 2022-12-01 12:15:01
回答 3查看 40关注 0票数 1

Grammarly可以将其按钮放在文本框的右下角,如gif所示。此外,当文本框移动时,按钮会移动。

我正在构建一个chrome扩展,在文本框(右下角)上放置一个类似的按钮。我可以通过侦听focusin事件来获取textbox元素,所以这个问题是关于在它上放置一个按钮。到目前为止,我还没有找到正确的方法来做到这一点。为了避免重叠,我也倾向于将按钮移动到任何现有按钮的左边,比如Grammarly。

EN

回答 3

Stack Overflow用户

发布于 2022-12-01 13:36:53

在StackOverflow上,textarea被大小相同的div直接包装。按钮作为div元素的子元素放置,然后可能使用简单的CSS定位,例如position: absolute; right: 8px; bottom: 8px;

显然,并不是所有的文本区域都是这样工作的,所以我最好的解决方案(远不是最优的)是计算文本区域的位置并相应地放置它。参见示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const OFFSET = 5;

const button = document.createElement("button");

[...document.getElementsByTagName("textarea")].forEach(textarea => {
  // get the dimensions of each element, then position the buttons accordingly
  const { top, left, height, width } = textarea.getBoundingClientRect();
  const b = button.cloneNode(true);
  document.body.appendChild(b); // it's necessary to first append the element so CSS wil be applied, otherwise the dimensions will be 0
  
  const { width: bWidth, height: bHeight } = b.getBoundingClientRect();
  b.style.top = (
    (
      top + window.scrollY + height
    ) - OFFSET - bHeight
  ) + "px";
  b.style.left = (
    (
      left + window.scrollX + width
    ) - OFFSET - bWidth
  ) + "px";
  
  // if you want to do stuff with the button relative to that text area
  b.addEventListener("click", () => doSomething(textarea));
});

function doSomething(textarea) {
  console.log(textarea.value);
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* just for the demo */
textarea {
  display: block;
}

button {
  color: white;
  background-color: lightgreen;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  border: none;
  cursor: pointer;
  box-shadow: 1px 1px 2px 0px rgba(0, 0, 0, 0.3);
  
  /* necessary button CSS: */
  position: absolute;
}

html {
  position: relative;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>
<textarea>text...</textarea>

票数 1
EN

Stack Overflow用户

发布于 2022-12-01 12:42:43

因为textarea元素不能像按钮那样有一个子元素,所以您需要在textarea周围创建一个父元素,这样可以容纳一个按钮和一个textarea。那你就想让botton绝对。它的工作方式类似于以下示例:

html:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <div class="wrapper">
  <textarea></textarea>
  <button></button>
</div>

css:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.wrapper {
    position: relative;
    width: max-content;
  }
  textarea {
    width: 15rem;
    height: 10rem;
  }
  button {
    position: absolute;
    right: 1rem;
    bottom: 1rem;
    width: 1rem;
    height: 1rem;
  }

父母的大小是自动的孩子的大小。因此,如果您调整文本区域的大小,div也将被调整大小。由于按钮是绝对放置在右下角的div,它将始终移动时,您调整大小。

我找到了一个新的和短期的选择。如果你这样做的话,它应该可以正常工作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const textarea = document.querySelector("textarea");
const button = document.querySelector("button");
function setPosition() {
  const left = textarea.offsetLeft;
  const top = textarea.offsetTop;
  const width = textarea.offsetWidth;
  const height = textarea.offsetHeight;

  button.setAttribute(
    "style",
    "position: absolute; top:" +
      (top + height - 30) +
      "px; left: " +
      (left + width - 30) +
      "px;"
  );
}
setPosition();

new ResizeObserver(setPosition).observe(textarea);

希望我能帮忙!

票数 0
EN

Stack Overflow用户

发布于 2022-12-01 12:42:47

div之后添加一个带有按钮的textarea,并使用一些CSS来定位它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#myScrollContainer {
  height: 150px;
  overflow: auto;
}
#myTextareaContainer {
  width: 300px;
  position: relative;
}
#myTextarea {
  width: 300px;
}
#myOverlay {
  position: absolute;
  right: 25px;
  bottom: 10px;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div id="myScrollContainer">
<div id="myTextareaContainer">
<form>
<textarea rows="5" cols="50" id="myTextarea">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</textarea>
</form>
<div id="myOverlay">
<button>Me!</button>
</div>
</div>
.<br />
(scroll down)<br />
.<br />
.<br />
.<br />
.<br />
.<br />
.<br />
.<br />
The end
</div>

请注意,您可能希望根据滚动条的可见性动态地定位按钮。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74647711

复制
相关文章
MATLAB截断数组
s1 = randi([400, 3000],189,1);s1 = sort(s1);s1(1,1) = 400;s1(189,1) = 3000;s1 = s1/1000;lambda = s1;%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到100的元素%取1到10
狼啸风云
2019/04/09
1.6K0
核心价值观编码器【matlab版】
在吾爱破解论坛上闲逛的时候发现一款名叫密码学工具的小软件,感觉不错就下载了下来。在密码工具箱的Browser栏下发现了一个名叫核心价值观编码的小工具,其功能就是将中英文字符用核心价值的12个词语来编码。温故而知新,和大家伙一起来温习一下社会主义核心价值观:
巴山学长
2021/12/02
1.3K0
核心价值观编码器【matlab版】
matlab 单元数组和元胞数组
本文为matlab自学笔记的一部分,之所以学习matlab是因为其真的是人工智能无论是神经网络还是智能计算中日常使用的,非常重要的软件。也许最近其带来的一些负面消息对国内各个高校和业界影响很大。但是我们作为技术人员,更是要奋发努力,拼搏上进,学好技术,才能师夷长技以制夷,为中华之崛起而读书!
演化计算与人工智能
2020/08/14
1.8K0
MATLAB-数组
之前,我们讨论了很多关于MATLAB向量和矩阵的知识,在本章中,我们将讨论多维数组。在MATLAB中所有的数据类型的变量是多维数组,向量是一个一维阵列,矩阵是一个二维数组。
用户9925864
2022/07/27
1.1K0
截断数组
Original Link 思想: 前缀和。 特殊情况: 当数组元素小于三个时,无解。 当该数组所有数之和不为 3 的整数倍时,无解。 设数组均分的值为 res,循环遍历前缀和数组 a。 设 i 为分割点,若 a[i] == res,说明将 i 作为分割点有可能成立,记录分割点数量为 cnt ++。 设 n - i + 1 为第二个分割点,若 a[n] - a[n - i + 1] == res,则说明该分割点可以与 i 之前的所有分割点进行分割数组,记录分割方案为 ans += cnt。 代码: #
浪漫主义狗
2023/02/21
2.2K0
截断数组
数据范围 前六个测试点满足 1≤n≤10 。 所有测试点满足 1≤n≤105 ,−10000≤ai≤10000 。
凡尘扰凡心
2023/02/27
7410
截断数组
截断梯度
强非线性函数往往倾向于非常大或非常小幅度的梯度。这导致的困难是,当参数梯度非常大时,梯度下降的参数更新可以将参数抛出很远,进入目标函数较大的区域,到达当前解所做的努力变成了无用功。梯度告诉我们,围绕当前参数的无穷小区域内最速下降的方向,这个无穷小区域之外,代价函数可能开始沿曲线背面而上。更新必须被选择为足够小,以避免过分穿越向上的曲面。我们通常使用衰减足够慢的学习率,使连续的步骤具有大致相同的学习率。适合于一个相对线性的地形部分的步长经常在下一步进入地形中更加弯曲的部分时变得不适合,会导致上坡运动。
狼啸风云
2020/01/13
2.1K0
截断梯度
截断数组
数据范围 前六个测试点满足 1≤n≤10 。 所有测试点满足 1≤n≤105 ,−10000≤ai≤10000 。
凡尘扰凡心
2023/02/13
7230
每三年一次的Turbo代码和相关主题国际研讨会学习
提出了一种新的turbo码交织器设计准则,旨在降低分量解码器之间的相关性。为了超越已知的相关周长最大化,我们提出了几个额外的标准来限制短相关周期的影响并增加代码多样性,
全栈程序员站长
2021/04/07
5540
Matlab实现数据导出
MATLAB 允许你使用数据在另一个应用程序读取 ASCII 文件,MATLAB提供了多种数据输出选项。
用户9925864
2022/07/27
9220
Matlab实现数据导出
MATLAB-字符串
你可以使用数字转换函数,如 uint8 或 uint16 字符串中的字符转换成数字代码。
用户9925864
2022/07/27
1.8K0
mysql磁盘阵列部署_部署磁盘阵列
mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
全栈程序员站长
2022/07/01
2K0
mysql磁盘阵列部署_部署磁盘阵列
文本溢出截断省略
文本溢出截断省略是比较常见的业务场景,主要分为单行文本溢出截断省略与多行文本溢出截断省略,单行的截断方案比较简单,多行截断相对比较复杂。
WindRunnerMax
2020/08/27
1.7K0
光学相控阵列
上周笔记介绍了基于硅光芯片的室内无线通信进展,其核心器件是硅基的光相控阵列。这一篇笔记主要介绍光学相控阵列。
光学小豆芽
2020/08/14
4.6K0
MATLAB-常见命令使用
使用MATLAB的时候有一些系统命令可以方便我们的操作,如在当前的工作区中可以使用系统命令保存为一个文件、加载文件、显示日期、列出目录中的文件和显示当前目录等。
用户9925864
2022/07/27
1.5K0
freemarker该阵列
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117468.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/06
6100
截断阈值化处理
算法:截断阈值化处理是将灰度值大于阈值的像素值设定为阈值,小于或等于阈值的像素值保持不变;或将大于阈值的像素值保持不变,小于或等于阈值的像素值设定为阈值,二者只是显示形式不同。截断阈值化处理应用在边缘提取、图像分割、目标识别等领域。
裴来凡
2022/05/28
1.1K0
截断阈值化处理
差异与阵列和阵列结构和链表的区别
1,阵列和一个链表之间的差? 通话清单和数组可以称得上是线性形式。 所谓阵列 做订单,的主要区别在于,订单表是一个连续的开放空间来存储在内存中的数据,是同样类型的数据。
全栈程序员站长
2022/07/06
6000
点击加载更多

相似问题

MATLAB中的级联单元阵列

110

Matlab中的级联单元阵列和矩阵

10

Matlab -级联炭阵列

11

Matlab单元阵列

47

单元阵列MATLAB

112
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文