JSFiddle - React, Tailwind, and code Playground

by Liu ChangFeng

HTML

<div class="wrap">
  <span class="text" style="vertical-align:top;">top</span>
  <span class="text" style="vertical-align:text-top;">text-top</span>
  <span class="text" style="vertical-align:super;">super</span>
  <span class="text" style="vertical-align:middle;">middle</span>
  <span class="text" style="vertical-align:baseline;">baseline</span>
  <span class="text" style="vertical-align:sub;">sub</span>
  <span class="text" style="vertical-align:text-bottom;">text-bottom</span>
  <span class="text" style="vertical-align:bottom;">bottom</span>
</div>
<br/>
<div style="font-size:18px;">
  <div>top: 元素及其后代的顶端与整行的顶端对齐。</div>
  <div>text-top: 元素顶端与父元素字体的顶端对齐。</div>
  <div>super: 元素基线与父元素的上标基线对齐。</div>
  <div>middle: 元素中垂线与父元素的基线加上小写x一半的高度值对齐。</div>
  <div>baseline: 元素基线与父元素的基线对齐。</div>
  <div>sub: 元素基线与父元素的下标基线对齐。</div>
  <div>text-bottom: 元素底端与父元素字体的底端对齐。</div>
  <div>bottom: 元素及其后代的底端与整行的底端对齐。</div>
  <div>
    length: 元素基线超过父元素的基线指定高度。可以取负值。
  </div>
  <div>
    percentage: 同 length , 百分比相对于 line-height 。
  </div>
  <div>
    如果元素没有基线baseline,则以它的外边距的下边缘为基线。
  </div>
</div>

CSS

body {
  width:3700px;
}

.wrap {
  white-space: nowrap;
  background-color: #736f60;
  font-size: 150px;
  color: #FFF;
}

.line {
  display: inline-block;
  border-top: dotted 1px;
  width: 100%;
  line-height: 1px;
  text-align: right;
  margin-right: -100%;
  position: relative;
  font-size: 18px;
  letter-spacing: 1px;
  color: #0d2744;
}

.text {
  display: inline-block;
  background: #C00;
}

JavaScript

function addLines(dom) {
  var lines = document.createElement('div')
  lines.style.display = 'inline';
  lines.innerHTML = [
    '<div class="line" style="border-color:#F00;vertical-align:top;">top</div>',
    '<div class="line" style="border-color:#00f;vertical-align:sub">sub</div>',
    '<div class="line" style="border-color:#f47920;vertical-align:super">super</div>',
    '<div class="line" style="border-color:#0ff;vertical-align:text-top">text-top</div>',
    '<div class="line" style="border-color:#ef5b9c;vertical-align:middle">middle</div>',
    '<div class="line" style="border-color:#00ae9d;vertical-align:baseline">baseline</div>',
    '<div class="line" style="border-color:#7fb80e;vertical-align:text-bottom">text-bottom</div>',
    '<div class="line" style="border-color:#F00;vertical-align:bottom">bottom</div>'
  ].join('')
  dom.insertBefore(lines, dom.firstChild)
}

var sections = document.querySelectorAll('.wrap')
for (var i = 0; i < sections.length; i++) {
  addLines(sections[i])
}