How to style dt and dd so they are on the same line?

后端 未结 18 2195
滥情空心
滥情空心 2020-11-27 10:12

Using CSS, how can I style the following:

Mercury
Mercury (0.4 AU from the Sun) is the closest planet to th
相关标签:
18条回答
  • 2020-11-27 10:41

    Here is one possible flex-based solution (SCSS):

    dl {
      display: flex;
      flex-wrap: wrap;
      width: 100%;
      dt {
        width: 150px;
      }
      dd {
        margin: 0;
        flex: 1 0 calc(100% - 150px);
      }
    }
    

    that works for the following HTML (pug)

    dl
      dt item 1
      dd desc 1
      dt item 2
      dd desc 2
    
    0 讨论(0)
  • 2020-11-27 10:42

    If you use Bootstrap 3 (or earlier)...

    <dl class="dl-horizontal">
        <dt>Label:</dt>
        <dd>
          Description of planet
        </dd>
        <dt>Label2:</dt>
        <dd>
          Description of planet
        </dd>
    </dl>
    
    0 讨论(0)
  • 2020-11-27 10:44

    Here's another option that works by displaying the dt and dd inline and then adding a line break after the dd.

    dt, dd {
     display: inline;
    }
    dd:after {
     content:"\a";
     white-space: pre;
    }
    

    This is similar to Navaneeth's solution above, but using this approach, the content won't line up as in a table, but the dd will follow the dt immediately on every line regardless of length.

    0 讨论(0)
  • 2020-11-27 10:46

    I have got a solution without using floats!
    check this on codepen

    Viz.

    dl.inline dd {
      display: inline;
      margin: 0;
    }
    dl.inline dd:after{
      display: block;
      content: '';
    }
    dl.inline dt{
      display: inline-block;
      min-width: 100px;
    }
    



    Update - 3rd Jan 2017: I have added flex-box based solution for the problem. Check that in the linked codepen & refine it as per needs. Thanks!

    dl.inline-flex {
      display: flex;
      flex-flow: row;
      flex-wrap: wrap;
      width: 300px;      /* set the container width*/
      overflow: visible;
    }
    dl.inline-flex dt {
      flex: 0 0 50%;
      text-overflow: ellipsis;
      overflow: hidden;
    }
    dl.inline-flex dd {
      flex:0 0 50%;
      margin-left: auto;
      text-align: left;
      text-overflow: ellipsis;
      overflow: hidden;
    }
    
    0 讨论(0)
  • 2020-11-27 10:48

    Because I have yet to see an example that works for my use case, here is the most full-proof solution that I was able to realize.

    dd {
        margin: 0;
    }
    dd::after {
        content: '\A';
        white-space: pre-line;
    }
    dd:last-of-type::after {
        content: '';
    }
    dd, dt {
        display: inline;
    }
    dd, dt, .address {
        vertical-align: middle;
    }
    dt {
        font-weight: bolder;
    }
    dt::after {
        content: ': ';
    }
    .address {
        display: inline-block;
        white-space: pre;
    }
    Surrounding
    
    <dl>
      <dt>Phone Number</dt>
      <dd>+1 (800) 555-1234</dd>
      <dt>Email Address</dt>
      <dd><a href="#">example@example.com</a></dd>
      <dt>Postal Address</dt>
      <dd><div class="address">123 FAKE ST<br />EXAMPLE EX  00000</div></dd>
    </dl>
    
    Text

    Strangely enough, it doesn't work with display: inline-block. I suppose that if you need to set the size of any of the dt elements or dd elements, you could set the dl's display as display: flexbox; display: -webkit-flex; display: flex; and the flex shorthand of the dd elements and the dt elements as something like flex: 1 1 50% and display as display: inline-block. But I haven't tested that, so approach with caution.

    0 讨论(0)
  • 2020-11-27 10:49

    dl {
      width: 100%;
      overflow: hidden;
      background: #ff0;
      padding: 0;
      margin: 0
    }
    dt {
      float: left;
      width: 50%;
      /* adjust the width; make sure the total of both is 100% */
      background: #cc0;
      padding: 0;
      margin: 0
    }
    dd {
      float: left;
      width: 50%;
      /* adjust the width; make sure the total of both is 100% */
      background: #dd0
      padding: 0;
      margin: 0
    }
    <dl>
      <dt>Mercury</dt>
      <dd>Mercury (0.4 AU from the Sun) is the closest planet to the Sun and the smallest planet.</dd>
      <dt>Venus</dt>
      <dd>Venus (0.7 AU) is close in size to Earth, (0.815 Earth masses) and like Earth, has a thick silicate mantle around an iron core.</dd>
      <dt>Earth</dt>
      <dd>Earth (1 AU) is the largest and densest of the inner planets, the only one known to have current geological activity.</dd>
    </dl>

    0 讨论(0)
提交回复
热议问题