超出一行顯示省略號
html
如下:
<div className='box'>
時維九月,序屬三秋。
潦水盡而寒潭清,煙光凝而暮山紫。
儼驂騑於上路,訪風景於崇阿;
臨帝子之長洲,得天人之舊館。
層巒聳翠,上出重霄;
飛閣流丹,下臨無地。
鶴汀鳧渚,窮島嶼之縈迴;
桂殿蘭宮,即岡巒之體勢。
</div>
css
如下:
.box{
width: 300px;
height: 100px;
border: 1px solid #ccc;
white-space: nowrap; // 先要阻止文字換行,一行顯示全部文字
overflow: hidden; // 然後將超出容器的文字隱藏
text-overflow: ellipsis; // 以省略號來表示被截斷的文字
}
頁面顯示如下:
超出多行顯示省略號
html
同上。
css
如下:
.box{
display: -webkit-box; // 將容器設為彈性盒子模型
-webkit-box-orient: vertical; // 設定盒子模型中的元素排列方向為從上到下垂直排列
-webkit-line-clamp: 4; // 設定一個塊元素中顯示的文字的行數
width: 300px;
height: 100px;
border: 1px solid #ccc;
overflow: hidden; // 然後將超出容器的文字隱藏
}
這是我們最常見的做法,但是上述幾個屬性都是用於Webkit
核心的瀏覽器中(如舊版本的Chrome
和Safari
),其它瀏覽器不支援。要相容現代瀏覽器,可使用下面的方法:
html
如下:
<div className='boxWrap'>
<div className='box'>
<div className='ellipsis'>
...
</div>
<div className='text'>
時維九月,序屬三秋。
潦水盡而寒潭清,煙光凝而暮山紫。
儼驂騑於上路,訪風景於崇阿;
臨帝子之長洲,得天人之舊館。
層巒聳翠,上出重霄;
飛閣流丹,下臨無地。
鶴汀鳧渚,窮島嶼之縈迴;
桂殿蘭宮,即岡巒之體勢。
</div>
</div>
</div>
css
如下:
.boxWrap{
display: flex;
}
.box{
width: 300px;
max-height: 100px;
border: 1px solid #ccc;
overflow: hidden;
}
.box::before{
content:"";
float: right; // 設定右浮動
height: calc(100% - 20px); // 將高度設定為整個box的高度減去省略號佔的高度
}
.ellipsis{
float: right; // 給省略號也設定右浮動
line-height: 20px;
clear: both; // 清除浮動,使得下面的元素不受浮動影響
}
.text {
line-height: 20px;
}
頁面顯示如下:
上面的html
中,由於父元素設定的max-height
,子元素設定100%
時獲取不到高度,所以在最外層又加了一層元素,將其設定為display:flex
即可解決該問題。可參考 關於父元素設定min-height,子元素設定 height 100% 不生效的問題
超出多行顯示省略號及更多
html
如下:
const [isExpanded, setIsExpanded] = useState(false)
// 點選更多展開全部
const handleMoreClick = () => {
setIsExpanded(!isExpanded)
}
return (
<div className='boxWrap'>
<div className={`box ${isExpanded ? 'boxMore' : ''}`}>
<div className='more' onClick={handleMoreClick}>
{
isExpanded ? <span>收起</span> : <span>...更多</span>
}
</div>
<div className='text'>
時維九月,序屬三秋。
潦水盡而寒潭清,煙光凝而暮山紫。
儼驂騑於上路,訪風景於崇阿;
臨帝子之長洲,得天人之舊館。
層巒聳翠,上出重霄;
飛閣流丹,下臨無地。
鶴汀鳧渚,窮島嶼之縈迴;
桂殿蘭宮,即岡巒之體勢。
</div>
</div>
</div>
)
css
如下:
.boxWrap{
·display: flex;
}
.box{
width: 300px;
max-height: 100px;
border: 1px solid #ccc;
overflow: hidden;
}
.box::before{
content:"";
float: right;
height: calc(100% - 20px);
}
.boxMore{
max-height: none;
}
.more{
float: right;
line-height: 20px;
clear: both;
cursor: pointer;
font-size: 14px;
color: #2f54eb;
}
.text {
line-height: 20px;
}
點選更多時,將box
元素的高度設定為max-height: auto
即可展開所有的文字,頁面顯示如下: