使用水平花括号标记文本

时间:2017-03-07 11:23:24

标签: html css html5 css3 pseudo-element

我显示的句子和​​一些短语来自某个班级。现在,我想要包含这些短语'右上方有一个大括号的类,如附带的模型所示。

Text fragments are labeled via horizontal curly brackets

我的问题是:实现这种功能的最佳方法是什么?有代码示例吗?

EDIT(已添加当前代码):

HTML

<token>Effects</token>
<token>of</token>
<token>an</token>
<token>ascorbic</token>
<elem type="drug">
    <token>acid-derivative</token>
    <token>dentifrice</token>
</elem>
<token>in</token>
<elem type="person">
    <token>patients</token>
</elem>
<token>with</token>
<elem type="disease">
    <token>gingivitis</token>
</elem>

CSS

token {
    margin-left: 6px;
}

代码的小提琴演示

https://jsfiddle.net/ab0L55v1/

3 个答案:

答案 0 :(得分:4)

这是一个使用CSS和伪元素(以及标签的附加HTML元素)完成的解决方案。它应该是不言自明的,但如果您对此有疑问,请问......

.container1 {
  display: inline-block;
  margin-top: 50px;
  border: 1px solid #aaa;
  padding: 3px 8px 0 0;
}

token {
  margin-left: 6px;
}

elem[type="drug"],
elem[type="person"],
elem[type="disease"] {
  position: relative;
}

elem[type="drug"]::after,
elem[type="person"]::after,
elem[type="disease"]::after {
  content: "";
  position: absolute;
  top: -1em;
  left: 3%;
  width: 94%;
  height: 0.5em;
  border-top: 1px solid #aaa;
  border-left: 1px solid #aaa;
  border-right: 1px solid #aaa;
  border-top-left-radius: 20px;
  border-top-right-radius: 20px;
  z-index: 10;
}

.label {
  position: absolute;
  top: -3em;
  left: 3%;
  width: 94%;
  z-index: 10;
  text-align: center;
}

.label:after {
  content: "|";
  position: absolute;
  top: 1.2em;
  left: 3%;
  width: 94%;
  z-index: 10;
  text-align: center;
  color: #aaa;
}

.drug {
  color: red;
}

.person {
  color: blue;
}

.disease {
  color: green;
}
<div class="container1">
  <token>Effects</token>
  <token>of</token>
  <token>an</token>
  <token>ascorbic</token>
  <elem type="drug">
    <token>acid-derivative</token>
    <token>dentifrice</token>
    <div class=" label drug">
      Drug
    </div>
  </elem>
  <token>in</token>
  <elem type="person">
    <token>patients</token>
    <div class=" label person">
      Person
    </div>
  </elem>
  <token>with</token>
  <elem type="disease">
    <token>gingivitis</token>
    <div class=" label disease">
      Disease
    </div>
  </elem>

</div>

答案 1 :(得分:2)

使用HTML和CSS无法轻松实现 。对于高级格式化,我使用MathJax获得了良好的结果,它允许类似LaTeX的格式化。

例如,格式

$\overbrace{\text{Big ones, small ones}}^{Coconuts}\text{, some as big as your head}$

看起来像:

enter image description here

实例:http://jsfiddle.net/AqDCA/940/
另见:MathJax basic tutorial and quick reference
jqMath是一种轻量级替代方案,具有更少的功能和更小的占用空间。

答案 2 :(得分:2)

简单选项虽然不太时尚,但使用<ruby>标签。请注意,这些是针对东亚字符的,可能有奇怪的格式与英文文本:

ruby rt {font-size:12px;}
ruby {color:#4a4;}
ruby.drug {color:#44a;}
Maybe this can <ruby class="drug">be done<rt>Drug</ruby> with <ruby>HTML<rt>Han</ruby>.