中心文本,两侧都有类似hr的线条,不使用表格

Rob*_*jic 8 html css html-table

我需要在标题文本的两侧创建一个标题长度相等的标题,并在行和文本之间创建一个固定大小的填充.文本会有所不同,因此不能设置宽度.这些行应占用标题容器中可用的所有剩余宽度.标题文字不得设置背景,因为它背后的背景会有所不同.像这样的东西:

-------------------------------------------------- -------一些文字----------------------------------------- ----------------

我用表解决了它:

<table width="100%">
  <td><hr /></td>
  <td style="width:1px; padding: 0 10px; white-space: nowrap;">Some text</td>
  <td><hr /></td>
</table>?
Run Code Online (Sandbox Code Playgroud)

你可以在这里试试:http://jsfiddle.net/md2dF/3/

从语义上讲,这是一个非常糟糕的解决方案,标题与表格数据无关.没有桌子你会怎么做?

总结一下(因为建议的解决方案都忽略了一个或多个要求):

  • 标题不得有固定的宽度
  • 标题文字不得有背景
  • 标题文字不得有固定的宽度
  • 文本两侧的线条必须占用所有剩余宽度
  • 线条和文本之间的填充必须具有固定的宽度
  • 如有疑问,请查看http://jsfiddle.net/md2dF/3/

Ger*_*der 21

更新的答案适用于较新版本的IE和Firefox

没有任何技巧:

fieldset.title {
    border-top: 1px solid #aaa;
    border-bottom: none;
    border-left: none;
    border-right: none;
    display: block;
    text-align: center;
}

fieldset.title legend {
    padding: 5px 10px;
}
Run Code Online (Sandbox Code Playgroud)
<fieldset class="title">
    <legend>Some text</legend>
</fieldset>
Run Code Online (Sandbox Code Playgroud)

现场演示jsfiddle

  • -1我在Mac OS X 10.10.2上使用Safari 8.0.3(作品),Chrome 40.0.2214.115(正常)和Firefox 36.0(不起作用)进行了尝试.我也尝试在Windows 8.1上使用Internet Explorer 11(不起作用),Chrome 40.0.2214.115(正常)和Firefox 36.0(不起作用).在我看来,在Firefox或Internet Explorer 11中不起作用的解决方案不是一个很好的解决方案. (2认同)

Gio*_*ona 6

编辑:

没有任何背景颜色或图像:

<div>
    <div><hr></div>
    <span>Some text</span>
    <div><hr></div>
</div>?
Run Code Online (Sandbox Code Playgroud)

CSS:

div {
    width:300px;
    text-align:center;
    display:table;
}
div > div {
    display:table-cell;
    vertical-align:middle;
}
div > span {
    white-space:nowrap;
}?
Run Code Online (Sandbox Code Playgroud)

适用于IE8 +

现场演示


原始答案:

没有任何图像:

<div>
<span>Some text</span>
</div>??????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

CSS:

?div {
    border-bottom:1px solid #000;
    line-height:16px;
    text-align:center;
}
span {
    background:#FFF;
    position:relative;
    bottom:-8px; /* half of line-height */
    padding:0 15px;
}
Run Code Online (Sandbox Code Playgroud)

现场演示

你可以使用任何,你想(元素h1,h2,whatever而不是)div.


Mar*_*inF 6

在不知道宽度和背景颜色的情况下解决此问题的方法如下:

结构体

<div class="strike">
   <span>Kringle</span>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

.strike {
    display: block;
    text-align: center;
    overflow: hidden;
    white-space: nowrap; 
}

.strike > span {
    position: relative;
    display: inline-block;
}

.strike > span:before,
.strike > span:after {
    content: "";
    position: absolute;
    top: 50%;
    width: 9999px;
    height: 1px;
    background: red;
}

.strike > span:before {
    right: 100%;
}

.strike > span:after {
    left: 100%;
}
Run Code Online (Sandbox Code Playgroud)

示例:http://jsfiddle.net/z8Hnz/