
批改狀態(tài):合格
老師批語:
想要深入理解視口首先要知道什么是物理像素,什么是CSS像素/設(shè)備獨(dú)立像素(density-independent pixel)以及什么是設(shè)備像素比
物理像素(physical pixel)一個(gè)像素是設(shè)備屏幕上最小的物理顯示單元,每個(gè)像素都有自己的顏色值和亮度,同一個(gè)設(shè)備它的物理像素是固定的,即它的分辨率是固定的
CSS像素/設(shè)備獨(dú)立像素(density-independent pixel)在iphone3上,CSS像素和設(shè)備的物理像素是相等的,隨著科技發(fā)展,手機(jī)的尺寸沒有太大的變化,但是屏幕的像素密度越來越大了,這意味著相同大小的屏幕上,像素多了1倍,如果還按照1:1顯示,就會(huì)很小,閱讀使用很不方便,所以在高像素密度的設(shè)備上,多個(gè)物理像素=1個(gè)CSS像素,這也是為什么手機(jī)物理像素是750,屏幕顯示的卻是375的原因,因?yàn)樵O(shè)備像素比是2,所以一個(gè)CSS像素=兩個(gè)物理像素
設(shè)備像素比=物理像素/CSS像素,例如設(shè)備像素比(DPR)等于2,那么一個(gè)CSS像素 = 兩個(gè)物理像素,這樣就不會(huì)出現(xiàn)上面說的閱讀不方便的問題
以電腦的2K顯示器為例,windosw設(shè)置中的縮放與布局當(dāng)作設(shè)備像素比
如果我們不縮放,這個(gè)時(shí)候1個(gè)css像素就=1個(gè)物理像素,我的顯示器尺寸只有17寸,這樣瀏覽網(wǎng)站就很不方便,見下圖:
我們把設(shè)備像素比改為150%,也就是1.5,這個(gè)時(shí)候1個(gè)css像素=1.5個(gè)物理像素再來看:
明顯更方便閱讀了,這時(shí)可以理解為,我的屏幕物理像素還是2K,只不過我設(shè)置了設(shè)備像素比,CSS的1px = 顯示器的1.5px
視口(viewport)就是瀏覽器顯示頁面內(nèi)容的屏幕區(qū)域。視口可以分為布局視口、視覺視口和理想視口
面向開發(fā)者,可以看作是CSS布局時(shí)的畫布,一般默認(rèn)980px
終端設(shè)備看到的區(qū)域,如果布局視口大于視覺視口,用戶只能通過縮小,滑動(dòng)來觀看
理想視口就是布局視口的寬度應(yīng)該與視覺視口的寬度一致。簡單理解就是設(shè)備有多寬,我們布局的視口就多寬
<meta>標(biāo)簽拓展:
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes"/>
width=device-width :表示寬度是設(shè)備屏幕的寬度
initial-scale=1.0:表示初始的縮放比例
minimum-scale=0.5:表示最小的縮放比例
maximum-scale=2.0:表示最大的縮放比例
user-scalable=yes:表示用戶是否可以調(diào)整縮放比例
因?yàn)槭謾C(jī)樣式繁多,屏幕的分辨率各不相同,開發(fā)者需要讓頁面自適應(yīng)客戶終端的大小,所以我們不能用絕對(duì)值來開發(fā)頁面,用相對(duì)值是最好的解決辦法:
我們需要先把根元素的字號(hào)設(shè)置成相對(duì)值,布局的時(shí)候使用REM單位根據(jù)客戶設(shè)備像素大小來自適應(yīng)
重置主體元素的字號(hào)大小,以免根元素字號(hào)的大小影響到字體大小
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>移動(dòng)布局</title>
<link rel="stylesheet" href="demo.css" />
</head>
<body>
<div class="header">
<ul>
<li><a href="">首頁</a></li>
<li><a href="">家居用品</a></li>
<li><a href="">男裝</a></li>
<li><a href="">女裝</a></li>
<li><a href="">家用電器</a></li>
</ul>
</div>
<div class="main">
<div class="content">
<div class="left">
<ul>
<li><a href="">廣告</a></li>
<li><a href="">廣告</a></li>
<li><a href="">廣告</a></li>
<li><a href="">廣告</a></li>
</ul>
</div>
<div class="middel">
<div>
<div><img src="phpkjkf.png" alt="" /></div>
<p>推薦產(chǎn)品</p>
</div>
<div>
<div><img src="phpkjkf.png" alt="" /></div>
<p>推薦產(chǎn)品</p>
</div>
<div>
<div><img src="phpkjkf.png" alt="" /></div>
<p>推薦產(chǎn)品</p>
</div>
<div>
<div><img src="phpkjkf.png" alt="" /></div>
<p>推薦產(chǎn)品</p>
</div>
<div>
<div><img src="phpkjkf.png" alt="" /></div>
<p>推薦產(chǎn)品</p>
</div>
<div>
<div><img src="phpkjkf.png" alt="" /></div>
<p>推薦產(chǎn)品</p>
</div>
<div>
<div><img src="phpkjkf.png" alt="" /></div>
<p>推薦產(chǎn)品</p>
</div>
<div>
<div><img src="phpkjkf.png" alt="" /></div>
<p>推薦產(chǎn)品</p>
</div>
</div>
<div class="right">
<ul>
<li><a href="">廣告</a></li>
<li><a href="">廣告</a></li>
<li><a href="">廣告</a></li>
<li><a href="">廣告</a></li>
</ul>
</div>
</div>
</div>
</body>
</html>
/* CSS文件 */
* {
margin: 0;
padding: 0;
list-style: none;
text-decoration: none;
}
html {
/*
100vw=設(shè)備獨(dú)立像素
當(dāng)設(shè)備獨(dú)立像素=375的時(shí)候除以3.75
正好等于100px,方便布局計(jì)算
*/
font-size: calc(100vw / 3.75);
}
body {
/* 重置字體大小,以免根元素的字號(hào)影響到字體 */
font-size: 0.16rem;
background-color: darkgray;
}
body .header ul {
height: 0.4rem;
display: flex;
justify-content: space-around;
align-items: center;
background-color: rgb(255, 255, 255);
}
body .header ul li a {
color: black;
}
body .main .content {
width: 3.75rem;
display: flex;
margin: auto;
justify-content: center;
}
body .main .content .middel {
width: 2.4rem;
height: 1.2rem;
display: grid;
grid-template-columns: repeat(4, 0.6rem);
grid-template-rows: 0.6rem;
}
body .main .content .left ul,
body .main .content .right ul {
width: 0.4rem;
height: 1rem;
font-size: 0.1rem;
background-color: coral;
}
body .main .content .middel > div {
width: 0.6rem;
height: 0.6rem;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
body .main .content .middel > div > div {
width: 50%;
height: 50%;
}
body .main .content .middel div img {
width: 100%;
}
body .main .content .middel div p {
font-size: 0.1rem;
}
body .main .content .left,
body .main .content .right {
display: none;
}
/* 設(shè)備寬度大于500px的時(shí)候彈出廣告欄 */
@media (min-width: 500px) {
body .main .content .left,
body .main .content .right {
display: block;
}
}
/* 限制字體到20px左右就要限制 */
@media (min-width: 470px) {
html {
font-size: 125px;
}
}
/* 限制字體最小像素,以免用戶看不清楚 */
@media (max-width: 250px) {
html {
font-size: 87.5px;
}
}
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)