CSS 带边框的段落布局,以及需要自己边框的 ::before 元素

CSS paragraph layout with a border, and ::before element that needs its own border

我有一些文本需要以下内容:

基本上,我希望它看起来像这样:

到目前为止,我得到了这个:

我的CSS:

 .caution {
    border: 0.5pt solid black;
    padding-left: 3pt; 
    padding-right: 3pt;
   display: table;
}

.caution::before {
    display: table-cell;
    border: 0.5pt solid black;
    background-color: #deddde;
    text-align: center;
    content: "caution";
}

我的html:

<p class="caution">Caution text</p>

结果是 ::before 框嵌套在 .caution 框内,而不是重叠。左边和右边的空白是由 padding-leftpadding-right 语句引起的。

我也曾在没有 display:table 的情况下尝试过此方法,但没有帮助。我需要将 padding-leftpadding-right 应用于文本(以确保文本不会正好到达边框),但不适用于 ::before 元素。没有允许我将属性应用于 'all of .caution except the ::before element'.

的选择器

如何让边框按照我希望的方式运行?

你可以试试这个 - 它并不完美,但它是一个开始:)

.caution {
  border: 0.5pt solid black;
  display: inline-block;
  max-width: 200px;
  padding: 10px;
}

.caution::before {
  display: block;
  border-bottom: 0.5pt solid black;
  margin: -10px;
  margin-bottom: 10px;
  background-color: #deddde;
  text-align: center;
  content: "Caution";
}

它将呈现以下内容:

这是工作示例:

.caution {
    position: relative;
    border: 1px solid #000000;
    height: 200px;
    width: 300px;
    padding-left: 5px;
    padding-right: 5px;
    padding-top: 30px;
}

.caution::before {
    position: absolute;
    background-color: #deddde;
    text-align: center;
    content: "caution";
    text-transform: capitalize;
    display: block;
    width: 100%;
    border-bottom: 1px solid #000000;
    top: 0;
    left: 0;
    line-height: 25px;
}
<div class="caution">Caution text</div>

仅设置 border-bottom(如 Yogendra Chauhan 的回答,虽然我后来才注意到)可以帮助:

.caution {
    border: 0.5pt solid black;
    padding-left: 3pt; 
    padding-right: 3pt;
    display: block;
}

.caution::before {
    border-bottom: 0.5pt solid black;
    background-color: #deddde;
    text-align: center;
    content: "caution";
    display: block;
    margin: 0 -3pt;
}

但是,当您在 PDF 查看器中放大到 6,400% 时,您可能会在底部边框的末端看到一条小白线。