【问题标题】:Giving different padding inline spans提供不同的填充内联跨度
【发布时间】:2018-11-20 09:49:07
【问题描述】:

我有三个跨度内联 2 个图像和一个文本。文本位于两个图像之间。所以我试图以不同的方式放置适当的高度。所以我以不同的方式上课。但是填充不起作用。我也想把 image2 放在右边。

显示就像

<dl class="accordion">
    <dt>
       <span class="image"><img src="img/question-blue.png"></span>
        <span class="text">Text Text</span>
        <span class="image2"><img src="img/open-blue-big.png"></span>
    </dt>       
</dl>

我的跨度类 CSS 不起作用?

dd {
    margin: 0;
}

dl.accordion {
    font-family: helvetica Neue; 
    width:100%;
    margin:20px auto 30px; 
    font-size:16px;
}

dl.accordion dt {
    border-bottom:1px solid #EEE; 
    height:auto; 
    text-indent:10px; 
    line-height:40px; 
    color:#333; 
    font-weight:bold; 
    cursor:pointer;}
dl.accordion dt.open {
    background:url(../img/close.png) 97% center no-repeat,-moz-linear-gradient(top, #C6F0FE, #27BCF9);
    background:url(../img/close.png) 97% center no-repeat,-webkit-gradient(linear, left top, left bottom, from(#C6F0FE), to(#27BCF9));}
dl.accordion dd { 
    background:#FFF; 
    padding:10px; 
    line-height:1.5; 
    display:none;
}

.text {
    display: inline-block;
    padding-top: 20px;
    padding-bottom: 20px;
}

.image2 {
    display: inline-block;
    text-align: right;
}

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”) 必须包括所需的行为、特定问题或错误以及重现它所需的最短代码在问题本身。 - 如果我们看不到它,我们无法告诉您您的 CSS 有什么问题!
  • 对不起伙计,我更新了问题。 @TylerRoper
  • 您需要澄清您的问题。您在文本跨度的顶部和底部有填充,而在图像跨度上没有填充,就像您的 CSS 指示的那样。有什么问题?
  • 我更新问题并放一张图片来解释。我只提供文本填充,因为文本看起来不利。但是我的填充不能把它放在中间。此外,image2 按钮不会转到 rigt 角落! @ecg8
  • 所以,您的问题与填充无关。问题是你想垂直对齐跨度中间的文本?

标签: html css


【解决方案1】:

我相信你正在寻找display: flex

带有display: flex 的元素将并排对齐其display: block 子元素。您可以使用align-items: center 将它们垂直居中,并使用justify-content: space-between 将它们均匀分布并留出空间。

如果您也希望文本左对齐,可以将其设置为flex-grow: 1

dt {
    display: flex;
    align-items: center;
    justify-content: space-between;
}

dt > span {
    display: block;
}

dt > span.text { flex-grow: 1; padding-left: 10px; }
<dl class="accordion">
    <dt>
        <span class="image"><img src="https://via.placeholder.com/100x50"></span>
        <span class="text">Text Text</span>
        <span class="image2"><img src="https://via.placeholder.com/100x50"></span>
    </dt>       
</dl>

这是上述内容的直观表示:

dt {
  display: flex;
  align-items: center;
  justify-content: space-between;
  border: 1px solid red;
  padding: 5px;
}

dt>span {
  display: block;
  border: 1px solid blue;
}

dt>span.text {
  flex-grow: 1;
  padding-left: 10px;
}
<dl class="accordion">
  <dt>
    <span class="image"><img src="https://via.placeholder.com/100x50"></span>
    <span class="text">This div's width will grow to fill the space because of "flex-grow: 1"</span>
    <span class="image2"><img src="https://via.placeholder.com/100x50"></span>
  </dt>
</dl>

【讨论】:

  • 接近完美但是。但是第一张图片旁边需要文字。不是两个图像的中间。
  • @Potti 更新了!
  • @Potti 没问题。为了完整起见,我还添加了视觉表示。有时查看带边框的示例有助于了解实际情况。
  • 我有最后一个问题要问你!如果有一个图像,就会出现这个问题。 imgur.com/a/TY4tPr8 负担很抱歉。
  • @Potti 如果您查看 CSS,您会发现我只将样式应用于 dtdt &gt; ...dt 的直系子代)。因此,没有任何 CSS 将适用于 dddd &gt; ... 元素。如果你也需要将它应用到dd,那么试试这个:jsfiddle.net/r0jn8mve/3
猜你喜欢
  • 2022-08-18
  • 2016-11-24
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
  • 2016-02-10
  • 2010-10-01
  • 2010-10-08
相关资源
最近更新 更多