【问题标题】:How to have force divs to stay on the same line without using position: absolute?如何在不使用位置的情况下强制 div 保持在同一行:绝对?
【发布时间】:2018-10-28 09:31:21
【问题描述】:

我正在尝试将图像元素与li 内的锚元素并排放置。如果锚元素的文本很长,它应该换行并从与锚的第一行相同的水平偏移开始。

我的第一次尝试:

<h2>Related</h2>
<ul class="list-unstyled owner-list">
    @foreach (var package in Model.RecommendedPackages)
    {
        <li>
            <a href="@Url.Package(package)" title="@package.Id" target="_blank">
                <img class="owner-image" aria-hidden="true" alt="" width="32" height="32"
                    src="@(PackageHelper.ShouldRenderUrl(package.IconUrl) ? package.IconUrl : Url.Absolute("~/Content/gallery/img/default-package-icon.svg"))"
                    @ViewHelpers.ImageFallback(Url.Absolute("~/Content/gallery/img/default-package-icon-256x256.png"))
                    />
            </a>
            <a href="@Url.Package(package)" title="@package.Id" target="_blank">@package.Id</a>
        </li>
    }
</ul>

导致:

由于我希望锚文本从同一行开始,我使用了修复 here 并将 position: absolute; 应用于第二个锚:

<li style="position: relative;">
    ...
    <a href="@Url.Package(package)" title="@package.Id" target="_blank" style="position: absolute;">@package.Id</a>
</li>

导致:

然后我添加了自动换行:

<li style="position: relative; word-break: break-all;">

导致:

现在这仍然不令人满意,因为它没有调整li 的高度以响应换行的文本,所以lis 之间的margin-bottom 无法正常工作正如你在上面看到的。有关更多信息,请参阅this answer

一方面,我需要position: absolute; 以便将图像上的文本保持在同一行。另一方面,我不能拥有position: absolute;,因为它会导致div 不占用文档流中的任何空间,导致li 无法扩展,导致li 上的margin-bottom s 不能正常工作。我该如何处理?

【问题讨论】:

  • 您是否尝试过:li {dislay:flex;}li a {display:table-cell;} 或其他任何带有显示或浮动的东西? position 另有目的。
  • display: table-cell 似乎可以解决问题,但它会阻止 word-wrap 工作。
  • 自动换行 > 你有hyphens: something 吗?

标签: javascript html asp.net css


【解决方案1】:

对需要在同一行的子 div 使用 display:flex 属性。

https://www.w3schools.com/css/css3_flexbox.asp

【讨论】:

    【解决方案2】:

    对于每个需要水平对齐的子元素,设置css为:

    position: relative;
    display: inline-block;
    

    如果需要调整子元素的垂直对齐方式,可以使用vertical-align属性。

    您也可以在 parent 元素上使用 display: flex 作为更简单的解决方法。

    【讨论】:

    • 感谢您的回答。您的第一个解决方案不起作用(仍然在单独的行上),您使用 display: flex 的第二个解决方案可以,但它似乎阻止了 word-wrap: break-word 起作用。任何想法为什么会发生?
    • 该行是完全不换行还是只是不中断单词中间?您可以尝试在包含文本的元素上设置最大宽度。
    • 它根本不换行。我想设置一个max-width 对应于li 中剩余的水平空间,但我不知道如何。
    • 是的,设置max-width 使其完美运行,但我不知道如何在不使用JS 的情况下使其与剩余的li 宽度匹配。嗯……
    • 那么,您是否希望所有文本行( 元素)都具有最短行的最大宽度?
    猜你喜欢
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    相关资源
    最近更新 更多