【问题标题】:Text overflow in h2 with border带边框的 h2 中的文本溢出
【发布时间】:2018-08-15 18:31:31
【问题描述】:

我想要一个带有双边框的 h2 元素。目前我有这个sn-p,HTML+CSS:

h2.titulo {
  width: 100%;
  margin: 10px 0;
  padding: 10px 0;
  text-transform: uppercase;
  font-weight: 400;
  font-size: 30px;
  display: block;
  color: #8c2638;
  border-bottom: 1px solid #ccc;
  font-size: 25px;
}

h2.titulo span {
  padding: 11px 0;
  font-size: 19px;
  font-size: 25px;
  border-bottom: 1px solid #8c2638;
}
<h2 class="titulo"><span>My title</span></h2>

我希望这个标题具有响应性,当我的标题很长时,我认为最好的方法是 text-overflow: ellipsisoverflow:hidden。我试过这个,但隐藏在 h2 上的溢出使红色边框底部消失:

h2.titulo {
  width: 100%;
  margin: 10px 0;
  padding: 10px 0;
  text-transform: uppercase;
  font-weight: 400;
  font-size: 30px;
  display: block;
  color: #8c2638;
  border-bottom: 1px solid #ccc;
  font-size: 25px;
  text-overflow: ellipsis;
  overflow: hidden;
  white-space: nowrap;
}

h2.titulo span {
  padding: 11px 0;
  font-size: 19px;
  font-size: 25px;
  border-bottom: 1px solid #8c2638;
}
<h2 class="titulo"><span>A very very very very very very very very long long title</span></h2>

最接近的方法是这样,但红色边框与另一个边框不完全折叠:

h2.titulo {
  border-bottom: 1px solid #ccc;
  font-size: 25px;
  width: 100%;
  margin: 10px 0;
  padding: 0;
  text-transform: uppercase;
  font-weight: 400;
  font-size: 30px;
  display: block;
  color: #8c2638;
  overflow-x: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

h2.titulo span {
  display: inline-block;
  line-height: 100%;
  padding-bottom: 10px;
  border-bottom: 1px solid #8c2638;
}
<h2 class="titulo"><span>Normal title</span></h2>

和margin-bottom:-1px;由于溢出,在跨度上不起作用。请问有什么办法吗?

【问题讨论】:

    标签: html css


    【解决方案1】:

    display: inline-block 添加到您的跨度并从h2 中删除底部填充。

    您的margin-bottom:-1px 也不起作用,因为span 默认是inline 元素,它本身不会像paddingmargin 那样提供视觉变化

    堆栈片段

    h2.titulo {
      width: 100%;
      margin: 10px 0;
      padding: 10px 0 0;
      text-transform: uppercase;
      font-weight: 400;
      font-size: 30px;
      display: block;
      color: #8c2638;
      border-bottom: 1px solid #ccc;
      font-size: 25px;
      text-overflow: ellipsis;
      overflow: hidden;
      white-space: nowrap;
    }
    
    h2.titulo span {
      padding: 11px 0;
      font-size: 19px;
      font-size: 25px;
      border-bottom: 1px solid #8c2638;
      display: inline-block;
    }
    <h2 class="titulo"><span>A very very very very very very very very long long title</span></h2>
    
    <h2 class="titulo"><span>NORMAL TITLE</span></h2>

    更新:如果您想折叠边框,请使用box-shadow 而不是border

    堆栈片段

    h2.titulo {
      width: 100%;
      margin: 10px 0;
      padding: 10px 0 0;
      text-transform: uppercase;
      font-weight: 400;
      font-size: 30px;
      display: block;
      color: #8c2638;
      box-shadow: 0px -1px 0px 0px #ccc inset;
      font-size: 25px;
      text-overflow: ellipsis;
      overflow: hidden;
      white-space: nowrap;
    }
    
    h2.titulo span {
      padding: 11px 0;
      font-size: 19px;
      font-size: 25px;
      box-shadow: 0px -1px 0px 0px #8c2638 inset;
      display: inline-block;
      position: relative;
    }
    <h2 class="titulo"><span>A very very very very very very very very long long title</span></h2>
    
    <h2 class="titulo"><span>NORMAL TITLE</span></h2>

    【讨论】:

    • 但边界并没有完全折叠。红色边框位于灰色边框之上。
    • @jfmarquez 如果要折叠边框,请使用box-shadow 而不是border....更新..!
    【解决方案2】:

    将 div 放在一对 div 中可以解决问题,因为 div 默认为自动高度和全宽,但您可以将第二个设置为将其显示为内联块,然后它将正确应用边框。

    div.titleBox{
     border-bottom: 1px solid #ccc;
    }
    div.border{
      border-bottom: 1px solid #8c2638;
      display: inline-block;
    }
    h2.titulo {
        width: 100%;
        margin: 10px 0;
        padding: 10px 0;
        text-transform: uppercase;
        font-weight: 400;
        font-size: 30px;
        display: block;
        color: #8c2638;
        font-size: 25px;
    }
    
    h2.titulo span {
        padding: 11px 0;
        font-size: 19px;
        font-size: 25px;
        word-break: break-all;
    }
    <div class="titleBox"><div class="border"><h2 class="titulo"><span>This is a short title</span></h2></div></div>
    
    
    <div class="titleBox"><div class="border"><h2 class="titulo"><span>This is a very very very very very vbery very large one!</span></h2></div></div>

    使用默认为块的 H2 执行此操作可能会让您头疼。

    h2.titulo {
        width: 100%;
        margin: 10px 0;
        text-transform: uppercase;
        font-weight: 400;
        font-size: 30px;
        display: block;
        color: #8c2638;
        font-size: 25px;
        border-bottom: 1px solid #ccc;
    }
    
    h2.titulo span {
        padding: 11px 0;
        font-size: 19px;
        font-size: 25px;
        word-break: break-all;
        border-bottom: 1px solid #8c2638;
        display: inline-block;
        margin: -1px;
    }
    <h2 class="titulo"><span>This is a short title</span></h2>
    
    
    <h2 class="titulo"><span>This is a very very very very very vbery very large one!</span></h2>

    但你可以解决它删除 h2 填充并将跨度显示为内联块

    【讨论】:

    • 但边界并没有完全折叠。红色边框位于灰色边框之上。
    • 编辑了一个简单的边距:-1px;希望对您有所帮助!
    • 感谢 JoelBonetR,但我想要(如果可能的话),文本溢出:省略号,Edge 不支持分词。
    • 从 5.5 版本开始支持:w3schools.com/cssref/css3_pr_word-break.asp欢呼!
    • 我错了,它不完全支持,但基本支持。谢谢你的想法。
    【解决方案3】:

    使用 ::after 或 ::before 添加额外边框怎么样?

    我想这是“h2”元素的额外边框

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 2014-08-05
      • 1970-01-01
      相关资源
      最近更新 更多