px ,em ,rem

做移動端或者響應式的頁面必然需要字體的變化的。這次我就自己的經驗來說說他們之間的關系,以及怎么用。

px?(絕對單位)是我們常用的就不說了。

em(相對單位,相對父級)

em 指字體高,任意瀏覽器的默認字體高都是16px。所以未經調整的瀏覽器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em。為了簡化font -size的換算,需要在css中的body選擇器中聲明Font-size=62.5%,這就使em值變為16px*62.5%=10px, 這樣12px=1.2em, 10px=1em, 也就是說只需要將你的原來的px數值除以10,然后換上em作為單位就行了。

CSS代碼
html { font-size: 62.5%; }

這個換算在IE瀏覽器下不成立,1.2em會比12px稍大一些,解決辦法是把html標簽樣式中的62.5%改成63%,即:
CSS代碼
html { font-size: 63%; } ?

注:(有一點不懂的是)

你可能會在content這個div里把字體大小設為1.2em, 也就是12px。然后你又把選擇器p的字體大小也設為1.2em,但如果p屬于content的子級的話,p的字體大小就不是12px,而是1.2em= 1.2 * 12px=14.4px。這是因為content的字體大小被設為1.2em,這個em值繼承其父級元素body的大小,也就是16px * 62.5% * 1.2=12px, 而p作為其子級,em則繼承content的字體高,也就是12px。所以p的1.2em就不再是12px,而是14.4px。

所以這個用的時候會有點問題

rem(相對單位 ,css3,相對根),在ie8及ie8以下的版本不支持外其他瀏覽器都支持,如果你要考慮ie8及一下,最好把px也寫上。

我們設置html的字體大小的值為html{font-size: 87.5%;(也就是14px)。然后其他的字體就是將你要的值除以14得到的值

你根元素的字體大小選62.5%,那px和rem之間的換算就是px直接除以10就得到rem了。

?

這里我就不負責任說一句,這里是看到別人寫的,我自己還沒喲用過,不知道什么樣。

javascript方式,通過上面的公式,計算出基準值rem,然后寫入樣式,大概如下(代碼參考自kimi的m-base模塊)

var?dpr,?rem,?scale;
var?docEl?=?document.documentElement;
var?fontEl?=?document.createElement('style');
var?metaEl?=?document.querySelector('meta[name="viewport"]');
scale?=?1?/?dpr;
dpr?=?win.devicePixelRatio?||?1;
rem?=?docEl.clientWidth?*?dpr?/?10;
//?設置viewport,進行縮放,達到高清效果
metaEl.setAttribute('content',?'width='?+?dpr?*?docEl.clientWidth?+?',
?????????????????????initial-scale='?+?scale?+?',maximum-scale='?+?scale?+?',
?????????????????????minimum-scale='?+?scale?+?',user-scalable=no');
//?設置data-dpr屬性,留作的css?hack之用
docEl.setAttribute('data-dpr',?dpr);
//?動態寫入樣式
docEl.firstElementChild.appendChild(fontEl);
fontEl.innerHTML?=?'html{font-size:'?+?rem?+?'px!important;}';
//?給js調用的,某一dpr下rem和px之間的轉換函數
window.rem2px?=?function(v)?{
????v?=?parseFloat(v);
????return?v?*?rem;
};
window.px2rem:?function(v)?{
????v?=?parseFloat(v);
????return?v?/?rem;
};
window.dpr?=?dpr;
window.rem?=?rem;

這種方式,可以精確地算出不同屏幕所應有的rem基準值,缺點就是要加載這么一段js代碼,但個人覺得是這是目前最好的方案了。

因為這個方案同時解決了三個問題:

1)border: 1px問題

2)圖片高清問題

3)屏幕適配布局問題

?

推薦網頁:http://www.cocoachina.com/webapp/20150715/12585.html

轉載于:https://www.cnblogs.com/zxhh/p/6872318.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372152.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372152.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372152.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用JAnnocessor生成Java代碼

在本文中,我將向你展示如何生成的代碼JAnnocessor通過創建框架Nikolche Mihajlovski 。 在Nikolche的演講中,我第一次在GeeCON 2012大會上遇到JAnnocessor: “創新和實用的Java源代碼生成” (幻燈片) 。 之后&#xff…

Linq學習筆記(轉)

開始Linq前你要知道的 擴展方法 顧名思義就是對現有類進行擴展的的方法,擴展方法可以在不修改現有類的情況下,為現有類增加公共的接口(不是C#中的interface)。 擴展方法本質上是一個靜態方法,不同之處在于它的第一個參…

cass展點不在原位置,cass中打開一副圖后,通過繪圖處理-——展高程點,怎么之前的圖形就不顯示了,,只剩下高程點!!...

答:1、進入控制面板,選擇“卸載或更改程序”。 2、選中“AutoCAD2006”圖標。 3、右擊選擇“更改”。 4、進入“AutoCAD2006安裝程序對話框”,選擇“添加/刪除功能”單選按鈕,點擊下一步。 5、在“程序文件”列表中,選…

(二)windows下安裝PHPCMS V9

一、準備工作 搭建環境 :參考:Windows下搭建PHP開發環境及相關注意事項PHPCMS V9 :下載適合自己 PHPCMS V9 版本到本地或服務器,下載地址:http://www.phpcms.cn/html/download/說明:官方提供了 2 種不同的編碼。包括 G…

JavaFX 2.0布局窗格– HBox和VBox

如果要對JavaFX 2.0中所有不同的布局窗格進行概述,或者想了解有關它們的一些基本知識,請參閱我以前的文章《 JavaFX 2.0中的布局窗格》 。 布局窗格HBox和VBox絕對是JavaFX 2.0中最基本的布局容器。 如您所知,它們的用途是將所有子級布置在一…

flask mysql分頁,Flask分頁的實現方法

所需環境Flask-SQLAlchemy分頁使用Flask-SQLAlchemy提供的pagination()方法。頁數是pagination()方法的第一個參數,也是唯一必須的參數。可選參數per_page用來指定每頁顯示的記錄數。參考代碼:def index():# ...page request.args.get(page, 1, typeint…

Java中的生成器設計模式

Java 中的 Builder設計模式是一種創建模式,即用于創建對象,類似于 工廠方法設計模式 ,這也是創建設計模式。 在學習任何設計模式之前,我建議先找出特定設計模式要解決的問題。 眾所周知, 必要性是發明的母親。 在沒有面…

驗證碼( 隨機數)

方式一&#xff08;變色版&#xff09;&#xff1a; <html> <head><meta charset"UTF-8"/><title></title><script src"jquery-2.0.2.min.js"></script> </head> <body> <?php header("co…

單片機串行通信全解析

1.什么是串行通信&#xff1f; 串行通信&#xff08;英語&#xff1a;Serial communication&#xff09;是指在計算機總線或其他數據通道上&#xff0c;每次傳輸一個位元數據&#xff0c;并連續進行以上單次過程的通信方式。與之對應的是并行通信&#xff0c;它在串行端口上通過…

java type 類型,java中的泛型類型與Type接口

假設我們定義了一個Room的類&#xff0c;表示一個房間public classRoom(){}由于我們建造好房間是&#xff0c;不知道房間以后的用途&#xff0c;他可能用來住人&#xff0c;也有可能用來放貨物&#xff0c;因此需要用到泛型。但是我們可能想獲取Room這個房間里面進來的的東西的…

centos7下操作防火墻

引言 最近使用centos7系統比較頻繁&#xff0c;在配置服務器的時候&#xff0c;總是遇到能夠ping通服務器&#xff0c;但是就是沒有辦法訪問80端口&#xff0c;這個時候我的直覺告訴我&#xff0c;肯定是防火墻的原因&#xff0c;但是使用iptables卻怎么都找不到命令&#xff0…

其他團隊對本團隊評價的總結

我們小組在看了其他小組的評價后&#xff0c;對自己的程序有了新的看法。轉載于:https://www.cnblogs.com/bk1246788/p/6879691.html

Java:使用Fork / Join框架的Mergesort

此項的目的是顯示一個Fork / Join RecursiveAction的簡單示例&#xff0c;而不是過多地研究合并合并的可能優化方法&#xff0c;或者比使用Exkutor / Join Pool優于現有的基于Java 6的現有實現&#xff08;例如ExecutorService&#xff09;的相對優勢。 以下是使用Java的自上而…

php的異常處理方式,php異常處理基本方法

當一個php腳本運行時&#xff0c;為了防止腳本運行崩潰&#xff0c;亦或是當php作為webserver&#xff0c;為了防止php程序出錯&#xff0c;拋出httpcode500錯誤&#xff0c;我們常常需要對php程序做異常處理。今天介紹的是最基本的異常處理方法&#xff1a;一般而言&#xff0…

關系型數據庫的三范式

第一范式:確保每列的原子性. 如果每列(或者每個屬性)都是不可再分的最小數據單元(也稱為最小的原子單元),則滿足第一范式. 例如:顧客表(姓名、編號、地址、……)其中"地址"列還可以細分為國家、省、市、區等。第二范式:在第一范式的基礎上更進一層,目標是確保表…

vray學習筆記(3)-多維子材質是個什么東西

多維子材質是個什么東西&#xff1f;為什么出現這個概念&#xff1f; 在3dsmax官方網站&#xff0c;我們可以看到它的定義&#xff1a; The Multi/Sub-Object material lets you assign different materials at the sub-object level of your geometry. 意思是多維子材質這個概…

Hello JavaFX 2.0:命令行介紹

我從博客文章Hello JavaFX 2.0&#xff1a;NetBeans 7.1 beta的介紹中&#xff0c;從NetBeans 7.1 beta的角度看了一個無處不在的Hello World示例的簡單JavaFX版本。 在本文中&#xff0c;我將介紹僅使用命令行工具通過JavaFX實現的Hello World版本。 JavaFX 2.0 API文檔包括ja…

matlab空格會消失了,如何在Matlab中自動刪除保存的尾隨空格?

我有同樣的需求,并寫了一個小腳本來做一些接近的事情.將以下內容放在MATLAB desktop shortcut中.每當您單擊快捷方式按鈕時,它將從編輯器中的活動文件中刪除尾隨空格.不如在保存時自動執行它 – 你需要記住在保存之前按下按鈕 – 但差不多.測試在11b,12a和13b,但在12b也應該沒問…

object to 字符串json

1 package com.beijxing.TestMain;2 3 import com.beijxing.entity.Student;4 import com.google.gson.Gson;5 import com.google.gson.annotations.SerializedName;6 7 /** 8 * 9 * author 作者 : ywp 10 * version 創建時間&#xff1a;2016年10月30日 下午9:21:33 11 */ 12…

JS 對象(Object)和字符串(String)互轉

var jsObj {}; jsObj.testArray [1,2,3,4,5]; jsObj.name CSS3; jsObj.date 8 May, 2011; var str JSON.stringify(jsObj); var str1 JSON.parse(str); var str2 JSON.stringify(str1);alert(str);alert(str1); alert(str2);對象拷貝&#xff1a;var newObj JSON…