自適應寬度元素單行文本省略用法探究

單行文本省略是現代網頁設計中很是經常使用的技術,幾乎每一個站點都會用到。單行文本省略適用於顯示摘要信息的場景,如列表標題、文章摘要等。在響應式開發中,自適應寬度元素單行文本省略容易失效不起做用,對網頁開發這形成困擾。所以,本文將要要探究自適應寬度元素單行文本省略用法。現代瀏覽器都支持單行文本顯示生省略號(...)樣式,通常狀況下,實現單行文本省略只須要給元素添加下面三個CSS樣式:web

.demo{
    text-overflow:ellipsis;
    white-space: nowrap;
    overflow: hidden;
}

 

單行文本省略和元素及其父元素的width屬性都無關
瀏覽器

有不少文章提到單行文本省略時都會添加多一個條件,那就是設置width屬性。事實真的是這樣嗎?經過下面的實例去檢驗一下就能夠證實這個結論。佈局

實例1:在body添加一個p標籤和一個span標籤,並設置單行文本省略:測試

<style>
body,p,span{
    margin:0;
    padding:0;
}

p,
span{
    text-overflow:ellipsis;
    white-space: nowrap;
    overflow: hidden;
}
</style>
<body>
    <p>單行文本省略,單行文本省略,單行文本省略,單行文本省略,單行文本省略,單行文本省略,單行文本省略,單行文本省略,單行文本省略,單行文本省略,單行文本省略</p>
    <span>單行文本省略,單行文本省略,單行文本省略,單行文本省略,單行文本省略,單行文本省略,單行文本省略,單行文本省略,單行文本省略,單行文本省略,單行文本省略</span>
</body>

運行結果是,p標籤內文本成功省略,span標籤內文本省略失敗,結果以下圖:flex

最後,我嘗試着給p標籤設置寬度爲auto或100%,結果不變;給p標籤和span標籤設置固定寬度值爲300px,結果不變;用其餘標籤把p標籤和span標籤包裹起來,結果不變;給包裹元素設置固定寬度值,結果仍是同樣的。這就足以證實了單行文本省略和元素及其父元素的width屬性都無關。spa

 

單行文本省略和元素及其父元素的display屬性有關設計

什麼屬性會影響單行文本省略呢?在實例1中,我特地用來一個p標籤和一個span標籤,span標籤沒法省略。通過測試發現display屬性爲inline和inline-block的元素都沒法實現省略。這證實單行文本省略與元素的display屬性有關。code

 

1)table元素(或display爲table元素)內單行文本省略,須要給table元素(或display爲table元素)添加table-layout:fixed樣式blog

設置爲table佈局元素的子元素單行文本省略不起做用,例如:ip

<style>
body,p,span,img{
    margin:0;
    padding:0;
}

p,
span{
    text-overflow:ellipsis;
    white-space: nowrap;
    overflow: hidden;
}

.demo{
    display:table;
    width:100%;
    padding:15px 0;
    border-top:1px solid #ddd;
}
            
.demo .left,
.demo .right{
    display:table-cell;
}
            
.demo .left{
    width:120px;
    min-width:120px;
    height:90px;
    background-color:blue;
}

.demo .left img{
    display:block;
}
            
.demo .right{
    vertical-align: top;
    padding-left:15px;
}                       
</style>
<body>
    <div class="demo">
        <div class="left"><img src="img/1879408419498933204.jpg" width="100%" height="auto" /></div>
        <div class="right">
            <h2>這是一個標題</h2>
            <p>這是一段介紹文字。這是一段介紹文字。這是一段介紹文字。這是一段介紹文字。這是一段介紹文字。這是一段介紹文字。這是一段介紹文字。這是一段介紹文字。這是一段介紹文字。</p>
        </div>
    </div>
</body>

這個實例中,demo元素設置爲dispaly:table,其子元素left和right設置爲display:table-cell,這種佈局方式致使了元素right內的h2和p的文本省略樣式都不起做用,運行結果以下圖:

爲了使元素right內的h2和p的文本省略樣式起做用,必須在元素demo(即設置display:table的元素)添加一條樣式table-layout:fixed,這個解決方式一樣適用於table元素。添加這個樣式後,運行結果以下圖:

 

2)display爲flex元素的子元素flex-item若是是自適應寬度時,flex-item內的子元素實現單行文本省略,須要給flex-item添加overflow:hidden樣式

display爲flex元素的子元素flex-item若是是自適應寬度時,flex-item內的子元素單行文本省略樣式不起做用,例如:

<style>
body,h2,p,span,img{
    margin:0;
    padding:0;
    box-sizing:border-box;
}
            
.demo{
    display:flex;
    display:-webkit-flex;
    width:100%;
    padding:15px 0;
    border-top:1px solid #ddd;
}
            
.left,
.right{
    height:90px;
}
            
.demo .left{
    width:120px;
    background-color:red;
    flex-shrink: 0;
}
            
.demo .right{
    flex:auto;
    -webkit-flex:auto;
    padding-left:15px;
}
            
h2,
p,
span{
    text-overflow:ellipsis;
    white-space: nowrap;
    overflow: hidden;
}

</style>
<body>
    <div class="demo">
         <div class="left"><img src="img/1879408419498933204.jpg" width="100%" height="auto" /></div>
         <div class="right">
              <h2>這是一個標題</h2>
              <p>這是一段介紹文字。這是一段介紹文字。這是一段介紹文字。這是一段介紹文字。這是一段介紹文字。這是一段介紹文字。這是一段介紹文字。這是一段介紹文字。這是一段介紹文字。</p>
         </div>
    </div>
</body>

在這個flex佈局的實例中,元素right的寬度時自適應的,元素right內的h2和p元素單行文本省略樣式都不起做用。若是去掉標籤直接在元素right內添加文本,併爲元素right添加單行文本省略樣式,這時單行文本省略樣式卻能夠正常工做。該實例的運行結果以下圖:

在這個實例中,爲元素right添加overflow:hidden樣式後,單行文本省略樣式工做正常,運行結果以下圖:

 

 

總結:

1)單行文本省略必須知足三個CSS樣式:text-overflow:ellipsis,white-space: nowrap,overflow: hidden。

2)單行文本省略和元素及其父元素的width屬性都無關

3)table元素(或display爲table元素)內單行文本省略,須要給table元素(或display爲table元素)添加table-layout:fixed樣式

4)display爲flex元素的子元素flex-item若是是自適應寬度時,flex-item內的子元素實現單行文本省略,須要給flex-item添加overflow:hidden樣式

相關文章
相關標籤/搜索