【问题标题】:Description list with image beside each description, delineated by description titles每个描述旁边都有图片的描述列表,由描述标题描述
【发布时间】:2020-06-18 10:54:30
【问题描述】:

有人能解释一下为什么下面的 sn-p 代码没有将服务 1 的图像放在包含 dt 和 dd 的 div 的左侧吗?

我期待 display: flex; flex-direction: row; 使图像与 div 内联。 我还尝试将display: inline; 添加到#service_1:before#service_1。但这没有影响。

当我删除了 div 并添加了 <dt id="service_1">display: inline; 仍然设置)时,文本移动了内联,但内容不再呈现在下面,而且我找不到一种方法来提高内联的顶部图片。

CSS:

#service_list {
  display: flex;
  flex-direction: row;
  justify-content: flex-start;
}
#service_1:before {
  content: url('https://www.minden-luebbecke.de/media/custom/1891_130_1_m.JPG')
}

HTML:

<dl id="service_list">
    <div id="service_1">
        <dt style="">Service 1</dt>
        <dd style="">service one features</dd>
    </div>
    <div id="service_2">
        <dt style="">Service 2</dt>
        <dd style="">includes service one features</dd>
        <dd style="">and a few extra features</dd>
    </div>
</dl>

显示:弹性; - https://jsfiddle.net/37ae6p0v/1/ 显示:弹性+内联; - https://jsfiddle.net/58sjd0zg/1/

【问题讨论】:

    标签: html css flexbox html-lists


    【解决方案1】:

    因为图像是第一个服务 div 的子元素,所以您需要调整该 div 而不是 &lt;dl&gt;。您还需要包含该 div 的 &lt;dt&gt;&lt;dd&gt;

    在我的示例中,我改为使用类选择器而不是使用 id 来限制特异性。我还认为可能有更多的语义 html 可以用来代替带有 div 的 dl,也许可以考虑使用带有列表项的列表。

    <dl class="service-list">
        <div class="service-1">
            <div>
                <dt>Service 1</dt>
                <dd>service one features</dd>
            </div>
        </div>
        <div class="service-2">
            <dt>Service 2</dt>
            <dd>includes service one features</dd>
            <dd>and a few extra features</dd>
        </div>
    </dl>
    
    // Uncomment if you want the services to be inline
    // .service-list {
    //   display: flex;
    //   flex-wrap: wrap;
    // }
    
    .service-1 {
      display: flex;
      flex-wrap: wrap;
    }
    
    .service-1:before {
      content: url('https://www.minden-luebbecke.de/media/custom/1891_130_1_m.JPG');
    }
    

    【讨论】:

    • 这更接近我的预期布局。我已经创建了一个带有几个调整的 jsfiddle。 jsfiddle.net/t5r16pa0/0 但是你能解释一下为什么需要嵌套 div 吗?我使用 :before 将图像放在 div 内容之前,因为我预计嵌套的 dt/dd 会填充到它旁边,类似于浮点数,或者我在下面提供给 David 的表格示例
    • 抱歉耽搁了。 ::before 创建所选元素的伪元素第一个子元素。将 ::before 和 flex 添加到 service-1 意味着 service-1 有 3 个子项,它们是 flex 项,因此它们位于主轴上(彼此内联)。通过包装 dtdd 可以像通常那样定位自己,而无需 flex 容器 (service-1) 删除它们的默认行为。参考文献:::beforeflex
    【解决方案2】:

    我对你的问题有点困惑,但根据我的解释,我编辑了你的小提琴,你可以看看 here。我替换了您的孩子 div 标签并用子列表 dl 标签替换了它们(我认为这在语义上更正确。另外,我认为这是重要的一点,我将 align-items: flex-end; 添加到您的 #services-list 选择器.

    希望对你有所帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 2013-06-12
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多