純css實現漂亮又健壯的tooltip

前言

tooltip的實現有多種方式,下面是一個tooltip成長史。css

預覽

https://codepen.io/moddx/pen/...html

原始版

最簡單的莫過於就用原始title屬性,像這樣:動畫

<button title="tips">button</button>

缺點是體驗是差了點,而且鼠標移上去,過一下子才響應。spa

改進版

因而改進了下面這個版本code

html部分

<div class="btn">
    <span title="提示文本">鼠標移動到這</span>
    <span class="tip">提示文本</span>
  </div>

css部分

.btn {
  width: 100px;
  position: relative;
  display: inline-block;
  background-color: gold;
  padding: 5px;
  cursor: pointer;
}

.btn .tip {
  display: none;
  width: 100px;
  background-color: black;
  color: #fff;
  text-align: center;
  padding: 5px 0;
  font-size: 12px;

  /* 垂直居中 */
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  left: 118px;
  z-index: 1;
}

.btn:hover .tip {
  display: block;
}

一開始設置tip是隱藏display: none;,當鼠標移上去,將tip樣式設置爲display: block;來顯示。orm

終極版

其實改進版通常用也夠了,但同事老爺們以爲不夠漂亮,逼格不高,沒有動畫。
無心間逛到百度雲管理後臺頁面,發現了一排漂亮的tooltip,這不正是我須要的嗎?竊喜!因而研究一番,拿來即用。htm

html部分:

<button class="btn" tip="a bcdef">鼠標移動到這</button>

css部分:

.btn {
      position: relative;

      display: block;
      margin: 100px auto;
      padding: 10px;
      font-size: 14px;
      background: #fff;
      color: green;
      border: 1px solid green;
      cursor: pointer;
    }
    [tip]:after {
      content: attr(tip);
      visibility: hidden;
      /* 實現垂直居中 */
      position: absolute;
      top: 50%;
      transform: translate(-5px, -50%);
      transition: all .3s;

      left: 100%;
      opacity: 0;

      /* 空白問題 */
      white-space: pre;
      font-size: 16px;
      padding: 5px 10px;
      background-color: rgba(18,26,44,0.8);
      color: #fff;
      box-shadow: 1px 1px 14px rgba(0,0,0,0.1)
    }
    [tip]:hover {
      /* ie兼容 */
      overflow: visible
    }
    .btn:hover:after {
      opacity: .8;
      transition: all .3s;
      transform: translate(5px, -50%);
      visibility: visible;
      display: block;
    }

首先,在標籤中加上屬性tip,css樣式中用content: attr(tip);獲取屬性值。
默認設置tip隱藏visibility: hidden;
transform: translate(-5px, -50%);實現居中和偏移效果。
動畫時間設置爲0.3s:transition: all .3s;
注意white-space: pre;是爲了考慮到tip中有可能帶有空格,那麼也須要將空格顯示出來。ip

相關文章
相關標籤/搜索