代码之家  ›  专栏  ›  技术社区  ›  Mike

我该如何构造我的HTML以使特定的div宽度优先于另一个div?

  •  2
  • Mike  · 技术社区  · 15 年前

    我需要创建以下布局:

    +--------+----------------------------------+-----------+
    |  fixed |  variable         | variable     |   fixed   |
    |  width |   width - p2      |  width - p1  |   width   |
    +--------+-------------------+--------------+-----------+
    

    其中两个中间框的宽度可变,优先级为p1>p2。这两个框中的内容永远不会产生两行文本(垂直方向),因为p2框将在文本太宽时使用省略号。

    +--------+----------------------------------+-----------+
    | <img/> | A person @ A Location     |Today |   Accept  |
    +--------+----------------------------------+-----------+
    
    +--------+----------------------------------+-----------+
    | <img/> | A person @ A Location w...|Today |   Accept  |
    +--------+----------------------------------+-----------+
    
    +--------+----------------------------------+-----------+
    | <img/> | A person @ A ...|Yesterday @ 3pm |   Accept  |
    +--------+----------------------------------+-----------+
    

    因此,您将看到“p2”框增大(将有一个最大宽度),而“p1”框缩小以适应宽度的增加。

    .style {
       width: $(this).parent.width - $('other_div).width ;
    }
    

    如果这个布局更容易实现,也就是说,如果每个浏览器需要较少/不需要调整,我完全可以在表中完成这个布局。

    干杯,

    迈克

    更新

    3 回复  |  直到 15 年前
        1
  •  2
  •   MattMS    15 年前

        <div class="row">
            <span class="col1">...</span>
            <span style="display: inline-block; position: relative; width: 400px;">
                <span class="col2" style="display: inline-block; width: 400px; overflow: hidden;">123456789012345678901234567890123456789012345678901234567890</span>
                <span class="col3" style="display: inline-block; position: absolute; top: 0px; right: 0px; background-color: #fff;">Higher priority text.</span>
            </span>
            <span class="col4">...</span>
        </div>
    

    这不会调整col2的大小,但会将其覆盖,因此可能并不理想。另外,它可能需要在每行之间设置一个。

        2
  •  0
  •   waymondo    15 年前

    如MattMS所述,您可以使用jquery将宽度直接写入元素,或者我也建议您 less css ,一个css处理器,允许您直接在样式表中使用变量和执行类似的操作。

        3
  •  0
  •   MattMS    15 年前

            <script type="text/javascript">
    $(document).ready(function() {
        $(".col2").each(function () {
            $(this).width($(this).parent().width() - $(this).next().width() - 10);
        });
    });
            </script>
            <div class="row">
                <span class="col1">...</span>
                <span style="display: inline-block; width: 400px;">
                    <span class="col2" style="display: inline-block; overflow: hidden;">123456789012345678901234567890123456789012345678901234567890</span>
                    <span class="col3">Higher priority text.</span>
                </span>
                <span class="col4">...</span>
            </div>
    

    唯一需要的类是“col2”,我只添加了其他类来尝试匹配您的问题。额外的10个像素,我去掉的宽度是为了处理两个中心跨度之间的空间,调整你认为合适。