摘要:但是究竟什么情況才會(huì)觸發(fā)文本溢出,大部分人肯定沒有探究過。也不會(huì)出問題,但是誰也沒想到當(dāng)時(shí),居然生效了。使用對(duì)象截取片段后獲取到的對(duì)象的才是內(nèi)容的真正寬度。并不是內(nèi)容區(qū)域的真正寬度也就是說當(dāng)加是應(yīng)為成立時(shí)才是觸發(fā)真正的條件。
text-overflow:ellipsis是我們用來設(shè)置文本溢出的一個(gè)常用屬性。
但是究竟什么情況才會(huì)觸發(fā)文本溢出,大部分人肯定沒有探究過。
我以前也沒有注意,反正這樣的css樣式一把梭,溢出了就點(diǎn)點(diǎn)點(diǎn)
width: 100px; overflow: hidden; text-overflow: ellipsis;
本來是沒啥問題的,直到測(cè)試給我提了一個(gè)bug:表格內(nèi)的文字超長(zhǎng)隱藏后鼠標(biāo)hover沒有懸浮提示
我一個(gè)開始不信,我用的element-UI還會(huì)出問題?
不過看完源碼以后果然翻車了
const cellChild = event.target.querySelector(".cell"); if (hasClass(cellChild, "el-tooltip") && cellChild.scrollWidth > cellChild.offsetWidth && this.$refs.tooltip) { //執(zhí)行懸浮窗顯示操作 }
問題就出在了cellChild.scrollWidth > cellChild.offsetWidth
為了方便控制元素寬度,設(shè)置了box-sizing: border-box;
按照理解scrollWidth是內(nèi)容的寬度,offsetWidth是容器的寬度。
也不會(huì)出問題,但是誰也沒想到當(dāng)scrollWidth===offsetWidth時(shí),
text-overflow:ellipsis居然生效了。
重現(xiàn)效果:
http://jsfiddle.net/f0dmkkh8/1/
我天真的以為cellChild.scrollWidth >= cellChild.offsetWidth不就完事了。
知道我看了element-UI最新的代碼才發(fā)現(xiàn)自己錯(cuò)了,原來scrollWidth超出offsetWidth并不是text-overflow:ellipsis觸發(fā)的條件。
const range = document.createRange(); range.setStart(cellChild, 0); range.setEnd(cellChild, cellChild.childNodes.length); const rangeWidth = range.getBoundingClientRect().width; const padding = (parseInt(getStyle(cellChild, "paddingLeft"), 10) || 0) + (parseInt(getStyle(cellChild, "paddingRight"), 10) || 0);
使用range對(duì)象截取dom片段后獲取到的DOMRect對(duì)象的width才是內(nèi)容的真正寬度。(scrollWidth并不是內(nèi)容區(qū)域的真正寬度)
也就是說當(dāng)
//加padding是應(yīng)為box-sizing:border-box; rangeWidth + padding > cellChild.offsetWidth
成立時(shí)才是觸發(fā)text-overflow:ellipsis真正的條件。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/117219.html
摘要:學(xué)習(xí)一些文本控制的屬性,防止做傻事。是的升級(jí)版,當(dāng)單行文本過長(zhǎng),超過文本邊界時(shí)自動(dòng)換行。否則,文本仍然左對(duì)齊。 one more time one more chance. 一歩重頭學(xué)前端, css入門。 學(xué)習(xí)一些 CSS 文本控制的屬性,防止做傻事。請(qǐng)大家對(duì)照下面列表檢驗(yàn)下: 會(huì)的、不會(huì)的、似懂非懂的。筆者是一個(gè)也不會(huì)。 white-space text-overflow: ell...
摘要:?jiǎn)涡形谋臼÷院驮丶捌涓冈氐膶傩远紵o關(guān)元素或?yàn)樵貎?nèi)單行文本省略,需要給元素或?yàn)樵靥砑訕邮綖樵氐淖釉厝绻亲赃m應(yīng)寬度時(shí),內(nèi)的子元素實(shí)現(xiàn)單行文本省略,需要給添加樣式單行文本省略是現(xiàn)代網(wǎng)頁設(shè)計(jì)中非常常用的技術(shù),幾乎每個(gè)站點(diǎn)都會(huì)用到。單行文本省略適用于顯示摘要信息的場(chǎng)景,如列表標(biāo)題、文章摘要等。在響應(yīng)式開發(fā)中,自適應(yīng)寬度元素單行文本省略容易失效不起作用,對(duì)網(wǎng)頁開發(fā)這造成困擾。因此,本文將要...
摘要:用來限制在一個(gè)塊元素顯示的文本的行數(shù)。為了實(shí)現(xiàn)該效果,它需要組合其他的屬性。常見結(jié)合屬性必須結(jié)合的屬性,將對(duì)象作為彈性伸縮盒子模型顯示。,可以用來多行文本的情況下,用省略號(hào)隱藏超出范圍的文本。 Text-overflow: clip | ellipsis作用:文本溢出簡(jiǎn)單的裁切 Text-overflow: clip 表示不顯示省略標(biāo)記(...),只是簡(jiǎn)單的裁切,需要配合overflo...
摘要:對(duì)于一些比較長(zhǎng)的文本做限制,不顯示,或者顯示省略號(hào)。超出固定長(zhǎng)度顯示設(shè)置文字不換行這個(gè)是設(shè)置隱藏的。當(dāng)前是顯示省略號(hào)。直接省略是根據(jù)不同標(biāo)簽值,有的不用加。超出固定行數(shù)顯示超出固定行數(shù)。或者本地生效了,或者打包到服務(wù)器上就不生效了。 作為前端經(jīng)常遇到的一個(gè)需求。對(duì)于一些比較長(zhǎng)的文本做限制,不顯示,或者顯示省略號(hào)。今天特意整理了一下,做個(gè)備忘。 1.超出固定長(zhǎng)度顯示... .class{...
摘要:對(duì)于一些比較長(zhǎng)的文本做限制,不顯示,或者顯示省略號(hào)。超出固定長(zhǎng)度顯示設(shè)置文字不換行這個(gè)是設(shè)置隱藏的。當(dāng)前是顯示省略號(hào)。直接省略是根據(jù)不同標(biāo)簽值,有的不用加。超出固定行數(shù)顯示超出固定行數(shù)。或者本地生效了,或者打包到服務(wù)器上就不生效了。 作為前端經(jīng)常遇到的一個(gè)需求。對(duì)于一些比較長(zhǎng)的文本做限制,不顯示,或者顯示省略號(hào)。今天特意整理了一下,做個(gè)備忘。 1.超出固定長(zhǎng)度顯示... .class{...
閱讀 1681·2021-11-12 10:35
閱讀 1623·2021-08-03 14:02
閱讀 2693·2019-08-30 15:55
閱讀 2036·2019-08-30 15:54
閱讀 774·2019-08-30 14:01
閱讀 2435·2019-08-29 17:07
閱讀 2262·2019-08-26 18:37
閱讀 3040·2019-08-26 16:51