如何突破瀏覽器12px限制
目前Chrome瀏覽器依然沒有放開12px的限制,但Chrome仍然是使用人數最多的瀏覽器。
在筆者開發(fā)某個項目時突發(fā)奇想:如果實際需要11px的字體大小怎么辦?這在Chrome中是實現不了的。關于字體,一開始想到的就是rem等非px單位。但是rem只是為了響應式適配,并不能突破這一限制。
em、rem等單位只是為了不同分辨率下展示效果提出的換算單位,常見的庫px2rem也只是利用了js將px轉為rem。包括微信小程序提出的rpx單位也是一樣!
這條路走不通,就只剩下一個方法:改變視覺大小而非實際大小。
理論基礎css中有一個屬性:transform:scale();
值的絕對值>1,就是放大,比如2,就是放大2倍
值的絕對值0<值<1,就是縮小,比如0.5,就是原來的0.5倍;
值的正負,負值表示圖形翻轉。
默認情況下,scale(x,y):以x/y軸進行縮放;如果y沒有值,默認y==x;也可以分開寫:scaleX()scaleY()scaleZ(),分開寫的時候,可以對Z軸進行縮放
第二種寫法:transform:scale3d(x,y,z)該寫法是上面的方法的復合寫法,結果和上面的一樣。
但使用這個屬性要注意一點:scale縮放的時候是以“縮放元素所在空間的中心點”為基準的。所以如果用在改變元素視覺大小的場景下,一般還需要利用另一個元素來“恢復位置”:
transform-origin:topleft;語法上說,transform-origin擁有三個屬性值:
transform-origin:x-axisy-axisz-axis;默認為:
transform-origin:50%50%0;屬性值可以是百分比、em、px等具體的值,也可以是top、right、bottom、left和center這樣的關鍵詞。作用就是更改一個元素變形的原點。
實際應用<divclass="mmcce__info-r"><!--一些html結構--><divv-show="xxx"class="mmcce-valid-mj-period":class="{'mmcce-mh':showStr}"@click="handleShowStr"><!--click中事件控制展示與否--><divclass="mmcce-valid-period-child">{{couponInfo.startTimeFormat}}-{{couponInfo.endTimeFormat}}</div><!--父級結構,點擊顯示下面內容--><divclass="mmcce-valid-pro"ref="mmcceW":style="{opacity:showStr?1:0}"><!--下面內容在后面有講解--><divclass="mmcce-text"v-for="(item,index)incouponInfo.thresholdStr":key="index":index="index":style="{height:mTextH[index]+'px'}">{{item}}</div></div></div></div>.mmcce-valid-mj-period{max-height:15px;transition:all.2sease;&.mmcce-mh{max-height:200px;}.mmcce-valid-pro{display:flex;flex-direction:column;padding-bottom:12px;.mmcce-text{width:200%;//!font-size:22px;height:15px;line-height:30px;color:#737373;letter-spacing:0;transform:scale(.5);transform-origin:topleft;}}}.mmcce-valid-period-child{position:relative;width:200%;white-space:nowrap;font-size:22px;color:#979797;line-height:30px;transform:scale(.5);transform-origin:topleft;//xxx}可以明確說明的是,這樣的hack需要明確規(guī)定縮放元素的height值!!!
OK,可以看到,占高沒有按我們想的“被縮放”。影響到了下面的元素位置。
本質上是“視覺大小改變了但實際(占位)大小無變化”。這時候,寬高實際也被縮放了的。這一點通過代碼中width:200%也可以看出來。或者你設置了overflow:hidden;也可以有相應的效果!
這一點需要注意,一般來說,給被縮放元素顯式設置一個大于等于其font-size的height值即可。
縮放帶來的其它問題可能在很多人使用的場景中是不會考慮到這個問題的:被縮放元素限制高度以后如果元素換行那么會出現文字重疊的現象。
為此,我采用了在mounted生命周期中獲取父元素寬度,然后動態(tài)計算是否需要換行以及換行的行數,最后用動態(tài)style重新渲染每一條數據的height值。這里有三點需要注意:
這里用的是一種取巧的方法:用每個文字的視覺font-size值*字符串長度。因為筆者遇到的場景不會出現問題所以可以這么用。在不確定場景中更推薦用canvas或dom實際計算每個字符的寬度再做判斷(需要知道文字、字母和數字的寬度是不一樣的);
需要注意一些特殊機型的展示,比如三星的galaxyfold,這玩意是個折疊屏,它的計算會和一般的屏幕計算的不一致;
在vue生命周期中,mounted可以操作dom,但不能獲取實際dom元素;你可以通過this.$el獲取元素。但要注意:在這個時期被獲取的元素不能用v-if(即:必須存在于虛擬tree中)。這也是上面代碼中筆者使用v-show和opacity的原因。
關于第三點,這里有個時機問題。比如剛進入頁面時要展示彈窗,彈窗是一個組件。那你在index.vue中是獲取不到這個組件的。(這個和v-if還是v-show沒有關系)但是你可以將比如header也拆分出來,然后在header組件的mounted中去調用彈窗組件暴露出的方法。
mounted(){letthresholdStr=this.info.dropDownTextList;letminW=false;if(this.$el.querySelector('.mmcce-valid-pro').clientWidth<140){//以iPhone5位準,再小于其中元素寬度的的機型就要做特殊處理了minW=true}letmmcw=this.$el.querySelector('.mmcce-valid-pro').getBoundingClientRect().width;letmmch=[];for(leti=0;i<thresholdStr.length;i++){//11是指縮放后文字的font-size值,這是一種取巧的方式if(11*(thresholdStr[i].length)>mmcw){if(minW){mmch[i]=Math.floor((11*thresholdStr[i].length)/mmcw)*15;}else{mmch[i]=Math.floor((11*(thresholdStr[i].length)+40)/mmcw)*15;}}else{mmch[i]=15;}}this.mTextH=mmch;},css,不止“突破瀏覽器12px限制”
其實還可以用兩種方法解決這個限制:SVG解決文字12px限制SVG本質上你可以看成是一張圖片,給圖片設置width:100%就能夠跟隨容器尺寸拉伸,SVG也是如。并且由于SVG是矢量的,因此,再怎么拉伸我們的文字效果都是清晰細膩的——這種方法的原理就在于此!SVG中<text>,<tspan>元素可以用來呈現文本,嵌套關系為<...
如何突破瀏覽器12px限制
目前Chrome瀏覽器依然沒有放開12px的限制,但Chrome仍然是使用人數最多的瀏覽器。在筆者開發(fā)某個項目時突發(fā)奇想:如果實際需要11px的字體大小怎么辦?這在Chrome中是實現不了的。關于字體,一開始想到的就是rem等非px單位。但是rem只是為了響應式適配,并不能突破這一限制。em、rem等單位只是為了不同分辨...
再談Chrome的最小字體12px限制
Chrome后來引入了一個例外機制,允許用戶手動在`chrome:\/\/settings\/fonts`中調整“最小字號”的設置,范圍從0到24px。這一變化為開發(fā)者提供了一定的靈活性,但默認的最小字號(等于12px除以窗口的設備像素比)是一個動態(tài)值,隨不同設備的顯示比例變化。為了驗證這一機制,我們可以將Chrome的“最小字號...
怎么讓chrome支持小于12px 的文字
Chrome 27之前的中文版桌面瀏覽器會默認設定頁面的最小字號是12px,英文版則沒有限制,主要是因為chrome認為漢字小于12px就會增加識別難度,尤其是中文常用的宋體和微軟雅黑。而我們在實際項目中,對于數字\/英文內容,其他字體的文本可能會有特殊的需求要求它們以更小的字號來顯示,這個時候就需要取消瀏覽器...
CSS如何解決谷歌瀏覽器最小字體為12px,
既然最小支持到12px,那么就以12px為基點進行縮放,即可以使用到 css3里的一個屬性:transform:scale(n),n為放大倍數。這個屬性前給-webkit-谷歌前綴,那么就可以控制字體的大小,代碼如下:p{font-size:10px;-webkit-transform:scale(0.8);}\/*這里的數字0.8,是縮放比例,可以根據情況變化。*...
谷歌瀏覽器最小字體怎么設置 google瀏覽器字體設置最小號的步驟_百度知 ...
3、進入設置主界面,拉動滾動條到最低,找到“顯示高級設置”并點擊;4、找到“網絡內容”一欄,點擊“自定義字體”按鈕;5、在彈窗中找到“最小字號”一欄,拖動小方塊到最左邊;6、然后再點擊做左下角的“完成”按鈕,即可設置成功,以后就不會受12px字體限制了。上述便是谷歌瀏覽器最小字體的詳細...
谷歌瀏覽器不支持CSS設置小于12px的文字怎么辦
CSS樣式定義如下:-webkit-text-size-adjust:none;如何讓谷歌瀏覽器支持小于12px的字體 經常與網頁打交道的攻城師,應該都知道。谷歌不支持小于12px的字體。網頁解決方案很多。比如。修改瀏覽器配置。修改瀏覽器語言。但作為一個WEB,我們無法修改用戶的瀏覽器。這時候就出現了 1 webkit的私有屬性:2 htm...
前端開發(fā) 如何解決Chrome瀏覽器1rem=10PX的方法
chrome中字體有最小限制,最小只能為12px,即當定義html{font-size:62.5%時} ,1rem=12px, 要解決這個問題,方法很多,簡單的,定義html{font-size:625%}就行了,1rem=100px,這樣子便于計算,同時不會有谷歌字體大小限制的問題...
webkit取消桌面瀏覽器-webkit-text-size-adjust支持后,
取消桌面瀏覽器對 -webkit-text-size-adjust 支持后,開發(fā)者和用戶面臨的具體變更集可追蹤到 Changeset 145168。對于 Chromium 27.0.1439.0 (187669),該屬性已變?yōu)槲醋R別狀態(tài)。Chrome 對簡體中文版最小字號限制為12px 的做法,曾導致一系列問題。通過類似的方法可解決此問題,如在 JS Bin 這樣的 ...
Opear瀏覽器的英文字體大小無法改變
1. 對于Opera瀏覽器,用戶無法改變英文字體的大小,這可能是一個已知問題。2. 字體大小在Opera瀏覽器中似乎有一個最小限制,即12px。如果嘗試設置小于12px的字體大小,瀏覽器會默認顯示12px。3. 這一限制可能影響用戶體驗,尤其是對于需要更大字體以便更清晰閱讀的用戶。
相關評說:
成華區(qū)職能: ______ 在網頁上,上面有個工具,IE.選項, 里面有勾選項,打勾就可以了.
成華區(qū)職能: ______ <font style="font-size:12px;">字體</font> 其中12為字體大小,數值越大,字體越大 <font style="color:#CCC;font-size:12px;">字體</font> 字體大小和顏色#CCC是RGB顏色值
成華區(qū)職能: ______ IE6默認就是12px的字體大小.如果你在CSS中沒有改變字體大小,是不需要用font-size設置的.如果你在CSS中改變了字體大小,那么相應位置加上一句IE6代碼,就可以了.比如:p { font-size: 16px; _font-size: 1em; /* 這句讓IE6字體一直都是12xp */ }
成華區(qū)職能: ______ 可能現在對局域網上網用戶限制比較多,比如不能上一些網站,不能玩某些游戲,不能上MSN,端口限制等等,一般就是通過代理服務器上的軟件進行限制,如現在談的最...
成華區(qū)職能: ______ 1.買醉網管 2.自己使用CDMA手機上網. 3.黑掉網管路由器,將自己設置好權限. 都作不到,認命吧.在人家的一畝三分地,還想不聽人家的,怎么可能
成華區(qū)職能: ______ 應該不行,我試過Chrome,火狐,IE,搜狗都不行,只能等于屏幕寬度.
成華區(qū)職能: ______ 解除網頁禁止復制方法有兩種:1、點擊IE瀏覽器的“工具/internet選項/安全”,將其中的“internet”的安全級別設為最高級別,“確定”后刷新網頁即可復制與粘貼了.2、 internet選項設置.具體方法:IE》工具》internet》自定義級別 回答不容易,希望能幫到您,滿意請幫忙采納一下,謝謝 !
成華區(qū)職能: ______ 破解internet explorer選項被限制的方法如下: 1、點擊開始,再點擊運行; 2、在運行對話框中輸入“gpedit.msc”,再回車; 3、打開“組策略”,點擊“用戶配置”中的“管理模板”; 4、選擇“Windows組件”,點擊“Internet Explorer”; 5、瀏覽器菜單中有一個“禁用Internet選項”,雙擊,選擇“已禁用”,確定即可.