<style>
    div.columns {
        display:inline-block;
        block-size: 50px;
        inline-size: 100px;
        margin-block: 10px;
        padding: 5px;
        border: solid black;
        font-family: ahem;
        font-size: 25px;
        color: lightblue;
        columns: 2;
        column-gap: 5px;
        column-fill: auto;
    }

    div.marker {
        position: absolute;
        border: solid rgba(0, 0, 255, 0.5);
        box-sizing: border-box;
    }

    input[type="range"] {
        appearance: none;
        writing-mode: horizontal-tb;
        width: 25px;
        height: 25px;
        background-color: lightblue;
    }

    input[type="range"]::-webkit-slider-thumb {
        appearance: none;
    }

    .vertical { writing-mode: vertical-lr; }
    .vertical.flipped { writing-mode: vertical-rl; }
</style>
<p>
    The blue borders should coincide with light blue squares, like this:
    <span style="display: inline-block; background-color: lightblue; border: solid rgba(0, 0, 255, 0.5); width: 19px; height: 19px;"></span>.
    There should be none of this:
    <span style="display: inline-block; background-color: lightblue; width: 25px; height: 25px;"></span>
    or this:
    <span style="display: inline-block; border: solid rgba(0, 0, 255, 0.5); width: 19px; height: 19px;"></span>.
</p>
<div class="columns" id="t1">
    <br>x y z
</div>

<div class="columns">
    <br><span id="t2">x y z</span>
</div>

<div class="columns">
    <br><div id="t3">x y z</div>
</div>

<div class="columns">
    <br><div id="t4"><br>y z</div>
</div>

<div class="columns">
    <br><div><br><input id="t5" type="range"></div>
</div>

<div class="columns">
    <br><div><br><img id="t6" style="width: 25px; height: 25px; background-color: lightblue;"></div>
</div>
<div class="columns">
    <div id="t7" style=" margin-top: 40px; width: 25px; height: 25px; background-color: lightblue;"></div>
</div>

<div class="columns vertical" id="t8">
    <br>x y z
</div>

<div class="columns vertical">
    <br><span id="t9">x y z</span>
</div>

<div class="columns vertical">
    <br><div id="t10">x y z</div>
</div>

<div class="columns vertical">
    <br><div id="t11"><br>y z</div>
</div>

<div class="columns vertical">
    <br><div><br><input id="t12" type="range"></div>
</div>

<div class="columns vertical">
    <br><div><br><img id="t13" style="width: 25px; height: 25px; background-color: lightblue;"></div>
</div>
<div class="columns vertical">
    <div id="t14" style=" margin-block-start: 40px; width: 25px; height: 25px; background-color: lightblue;"></div>
</div>


<div class="columns vertical flipped" id="t15">
    <br>x y z
</div>

<div class="columns vertical flipped">
    <br><span id="t16">x y z</span>
</div>

<div class="columns vertical flipped">
    <br><div id="t17">x y z</div>
</div>

<div class="columns vertical flipped">
    <br><div id="t18"><br>y z</div>
</div>

<div class="columns vertical flipped">
    <br><div><br><input id="t19" type="range"></div>
</div>

<div class="columns vertical flipped">
    <br><div><br><img id="t20" style="width: 25px; height: 25px; background-color: lightblue;"></div>
</div>
<div class="columns vertical flipped">
    <div id="t21" style="margin-block-start: 40px; width: 25px; height: 25px; background-color: lightblue;"></div>
</div>


<script>
    function placeMarker(clientRect)
    {
        var marker = document.body.appendChild(document.createElement("div"));
        marker.className = "marker";
        marker.style.left = clientRect.left + "px";
        marker.style.top = clientRect.top + "px";
        marker.style.width = clientRect.width + "px";
        marker.style.height = clientRect.height + "px";
    }

    function placeMarkersForRange(range, startOffset)
    {
        if (startOffset === undefined)
            startOffset = 0;

        var clientRects = range.getClientRects();
        for (var i = startOffset; i < clientRects.length; ++i)
            placeMarker(clientRects[i]);
    }

    var range = document.createRange();

    var textNode = document.getElementById("t1").firstChild.nextSibling.nextSibling;
    range.setStart(textNode, 0);
    range.setEnd(textNode, 5);
    placeMarkersForRange(range);

    textNode = document.getElementById("t2").firstChild;
    range.setStart(textNode, 0);
    range.setEnd(textNode, 5);
    placeMarkersForRange(range);

    textNode = document.getElementById("t3").firstChild;
    range.setStart(textNode, 0);
    range.setEnd(textNode, 5);
    placeMarkersForRange(range);

    var block = document.getElementById("t4");
    range.selectNode(block);
    placeMarkersForRange(range, 2);

    var slider = document.getElementById("t5");
    range.selectNode(slider);
    placeMarkersForRange(range);

    var image = document.getElementById("t6");
    range.selectNode(image);
    placeMarkersForRange(range);

    var div = document.getElementById("t7");
    range.selectNode(div);
    placeMarkersForRange(div);

    var textNode = document.getElementById("t8").firstChild.nextSibling.nextSibling;
    range.setStart(textNode, 0);
    range.setEnd(textNode, 5);
    placeMarkersForRange(range);

    textNode = document.getElementById("t9").firstChild;
    range.setStart(textNode, 0);
    range.setEnd(textNode, 5);
    placeMarkersForRange(range);

    textNode = document.getElementById("t10").firstChild;
    range.setStart(textNode, 0);
    range.setEnd(textNode, 5);
    placeMarkersForRange(range);

    var block = document.getElementById("t11");
    range.selectNode(block);
    placeMarkersForRange(range, 2);

    var slider = document.getElementById("t12");
    range.selectNode(slider);
    placeMarkersForRange(range);

    var image = document.getElementById("t13");
    range.selectNode(image);
    placeMarkersForRange(range);

    var div = document.getElementById("t14");
    range.selectNode(div);
    placeMarkersForRange(div);

    var textNode = document.getElementById("t15").firstChild.nextSibling.nextSibling;
    range.setStart(textNode, 0);
    range.setEnd(textNode, 5);
    placeMarkersForRange(range);

    textNode = document.getElementById("t16").firstChild;
    range.setStart(textNode, 0);
    range.setEnd(textNode, 5);
    placeMarkersForRange(range);

    textNode = document.getElementById("t17").firstChild;
    range.setStart(textNode, 0);
    range.setEnd(textNode, 5);
    placeMarkersForRange(range);

    var block = document.getElementById("t18");
    range.selectNode(block);
    placeMarkersForRange(range, 2);

    var slider = document.getElementById("t19");
    range.selectNode(slider);
    placeMarkersForRange(range);

    var image = document.getElementById("t20");
    range.selectNode(image);
    placeMarkersForRange(range);

    var div = document.getElementById("t21");
    range.selectNode(div);
    placeMarkersForRange(div);
</script>
