1. 程式人生 > 實用技巧 >142.關於flex佈局與省略號不顯示的問題

142.關於flex佈局與省略號不顯示的問題

關於flex佈局下,css省略號不顯示的問題主要有兩種場景

場景一、直接在flex佈局的元素裡

html

<div class="flex-wrap">
  我們日常工作中,接觸到的主要 API,幾乎都是由今天所講解的這些物件提供的。理解這些物件的性質,我們才能真正理解我們使用的 API 的一些特性。JavaScript 中的物件分類.
  JavaScript 宿主物件千奇百怪,但是前端最熟悉的無疑是瀏覽器環境中的宿主了。在瀏覽器環境中,我們都知道全域性物件是 window,window 上又有很多屬性,如 document。實際上,這個全域性物件 window 上的屬性,一部分來自 JavaScript 語言,一部分來自瀏覽器環境。
</div>

css

* {
  margin: 0;
  padding: 0;
}
.flex-wrap {
  display: flex;
  width: 200px;
  height: 100px;
  background-color: #089e8a;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

解決方案,直接flex的元素再套一層結構。(簡單粗暴,主要是我實在沒有找到其他方法
html

<div class="flex-wrap">
  <div class="inner">
    我們日常工作中,接觸到的主要 API,幾乎都是由今天所講解的這些物件提供的。理解這些物件的性質,我們才能真正理解我們使用的 API 的一些特性。JavaScript 中的物件分類.
    JavaScript 宿主物件千奇百怪,但是前端最熟悉的無疑是瀏覽器環境中的宿主了。在瀏覽器環境中,我們都知道全域性物件是 window,window 上又有很多屬性,如 document。實際上,這個全域性物件 window 上的屬性,一部分來自 JavaScript 語言,一部分來自瀏覽器環境。  
  </div>
</div>

css

* {
  margin: 0;
  padding: 0;
}
.flex-wrap {
  display: flex;
  width: 200px;
  height: 100px;
  background-color: #089e8a;
}
.inner {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

場景二、在flex的子元素裡的子元素

在開發中經常會有這樣的場景,左邊一個按鈕固定寬度,右邊的內容自適應。

——————————————————————————————
|      |                     |
| left |  right              |
|      |                     |
——————————————————————————————

問題程式碼

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  * {
    margin: 0;
    padding: 0;
  }
  .flex-wrap {
    display: flex;
    width: 100%;
    height: 100px;
    background-color: #089e8a;
  }
  .left {
    flex: 0 0 60px;
    background-color: #f7f1ee;
  }
  .right {
    flex: 1;
  }
  .right-son {
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
  }
</style>
</head>
<body>
  <div class="flex-wrap">
    <div class="left"></div>
    <div class="right">
      <div class="right-son">
        我們在前面說過,固有物件是由標準規定,隨著 JavaScript 執行時建立而自動建立的物件例項。固有物件在任何 JavaScript 程式碼執行前就已經被創建出來了,它們通常扮演者類似基礎庫的角色。我們前面提到的“類”其實就是固有物件的一種。
      </div>
    </div>
  </div>
</body>
</html>

這裡主要有問題的不是 right 元素,而是 right 的子元素。
但是我們解決問題的途徑是從 right 元素入手的

解決方案:在 right 類中新增 width:0

完整程式碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
  * {
    margin: 0;
    padding: 0;
  }
  .flex-wrap {
    display: flex;
    width: 100%;
    height: 100px;
    background-color: #089e8a;
  }
  .left {
    flex: 0 0 60px;
    background-color: #f7f1ee;
  }
  .right {
    flex: 1;
    width: 0;
  }
  .right-son {
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
  }
</style>
</head>
<body>
  <div class="flex-wrap">
    <div class="left"></div>
    <div class="right">
      <div class="right-son">
        我們在前面說過,固有物件是由標準規定,隨著 JavaScript 執行時建立而自動建立的物件例項。固有物件在任何 JavaScript 程式碼執行前就已經被創建出來了,它們通常扮演者類似基礎庫的角色。我們前面提到的“類”其實就是固有物件的一種。
      </div>
    </div>
  </div>
</body>
</html>