DOM API:getBoundingClientRect 结合样式“float:left”

问题描述 投票:0回答:0

DOM-API 方法 Element.getBoundingClientRect 返回元素的边界。 不幸的是,这不一定是实际呈现内容的界限。 鉴于以下示例显示存在差异:

<html>
<head>
    <style>
        #float { float: left; }
    </style>
    <script>
        function info() {
            const boundFirst = document.getElementById('first').getBoundingClientRect();
            const boundScnd = document.getElementById('scnd').getBoundingClientRect();
            alert("First x: " + boundFirst.x + "; second x: " + boundScnd.x);
        }
    </script>
</head>
<body>
    <p id="first">First</p>
    <p id="float">XXXXX</p><p id="scnd">Second</p>

    <p onclick="info()">Info</p>
</body>
</html>

正文渲染如下(或多或少):

First
XXXXX Second
Info

点击信息显示以下信息:

First x: 8; second x: 8

但是,显然第二段的文字内容并没有和第一段的文字内容渲染在同一个x位置

如何确定(第二个)渲染文本的实际位置?

我找到了一个变通方法,它在所有情况下都不起作用,只需将一个空跨度作为第一个元素添加到段落并检索该跨度的位置。但这并非在所有情况下都有效,跨度也可能有其他一些副作用。

上下文:我需要该功能进行测试(使用 selenium webdriver)。我还尝试了 webdriver 的 API 函数 WebElement.getRect,但它返回的结果与 getBoundingClientRect 相同(根据其文档在后台使用)。

我的问题不是修复布局,而是检索显示文本的坐标以进行测试(例如,查找损坏的布局)。

html css selenium-webdriver dom
© www.soinside.com 2019 - 2024. All rights reserved.