網頁布局有很多種方式,一般分為以下幾個部分:頭部區域、菜單導航區域、內容區域、底部區域。
頭部區域位于整個網頁的頂部,一般用于設置網頁的標題或者網頁的 logo:
例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS 項目(runoob.com)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
margin: 0;
}
/* 頭部樣式 */
.header {
background-color: #f1f1f1;
padding: 20px;
text-align: center;
}
</style>
</head>
<body>
<div class="header">
<h1>頭部區域</h1>
</div>
</body>
</html>
菜單導航條包含了一些鏈接,可以引導用戶瀏覽其他頁面:
例
/* 導航條 */
.topnav {
overflow: hidden;
background-color: #333;
}
/* 導航鏈接 */
.topnav a {
float: left;
display: block;
color: #f2f2f2;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
/* 鏈接 - 修改顏色 */
.topnav a:hover {
background-color: #ddd;
color: black;
}
內容區域一般有三種形式:
不相等的列一般是在中間部分設置內容區域,這塊也是最大最主要的,左右兩次側可以作為一些導航等相關內容,這三列加起來的寬度是 100%。
例:
.column {
float: left;
}
/* 左右側欄的寬度 */
.column.side {
width: 25%;
}
/* 中間列寬度 */
.column.middle {
width: 50%;
}
/* 響應式布局 - 寬度小于600px時設置上下布局 */
@media screen and (max-width: 600px) {
.column.side, .column.middle {
width: 100%;
}
}
底部區域在網頁的最下方,一般包含版權信息和聯系方式等。
例
.footer {
background-color: #F1F1F1;
text-align: center;
padding: 10px;
}
通過以上等學習我們來創建一個響應式等頁面,頁面的布局會根據屏幕的大小來調整:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>項目</title>
<style>
* {
box-sizing: border-box;
}
body {
font-family: Arial;
padding: 10px;
background: #f1f1f1;
}
/* 頭部標題 */
.header {
padding: 30px;
text-align: center;
background: white;
}
.header h1 {
font-size: 50px;
}
/* 導航條 */
.topnav {
overflow: hidden;
background-color: #333;
}
/* 導航條鏈接 */
.topnav a {
float: left;
display: block;
color: #f2f2f2;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
/* 鏈接顏色修改 */
.topnav a:hover {
background-color: #ddd;
color: black;
}
/* 創建兩列 */
/* Left column */
.leftcolumn {
float: left;
width: 75%;
}
/* 右側欄 */
.rightcolumn {
float: left;
width: 25%;
background-color: #f1f1f1;
padding-left: 20px;
}
/* 圖像部分 */
.fakeimg {
background-color: #aaa;
width: 100%;
padding: 20px;
}
/* 文章卡片效果 */
.card {
background-color: white;
padding: 20px;
margin-top: 20px;
}
/* 列后面清除浮動 */
.row:after {
content: "";
display: table;
clear: both;
}
/* 底部 */
.footer {
padding: 20px;
text-align: center;
background: #ddd;
margin-top: 20px;
}
/* 響應式布局 - 屏幕尺寸小于 800px 時,兩列布局改為上下布局 */
@media screen and (max-width: 800px) {
.leftcolumn, .rightcolumn {
width: 100%;
padding: 0;
}
}
/* 響應式布局 -屏幕尺寸小于 400px 時,導航等布局改為上下布局 */
@media screen and (max-width: 400px) {
.topnav a {
float: none;
width: 100%;
}
}
</style>
</head>
<body>
<div class="header">
<h1>我的網頁</h1>
<p>重置瀏覽器大小查看效果。</p>
</div>
<div class="topnav">
<a href="#">鏈接</a>
<a href="#">鏈接</a>
<a href="#">鏈接</a>
<a href="#" style="float:right">鏈接</a>
</div>
<div class="row">
<div class="leftcolumn">
<div class="card">
<h2>文章標題</h2>
<h5>xx 年xx月 xx日</h5>
<div class="fakeimg" style="height:200px;"><img src="img/bird.png"></div>
<p>文本...</p>
<p>當熱誠變成習慣,恐懼和憂慮即無處容身。缺乏熱誠的人也沒有明確的目標。熱誠使想象的輪子轉動。一個人缺乏熱誠就象汽車沒有汽油。
善于安排玩樂和工作,兩者保持熱誠,就是最快樂的人。熱誠使平凡的話題變得生動。!</p>
</div>
<div class="card">
<h2>文章標題</h2>
<h5>xx 年 xx 月xx日</h5>
<div class="fakeimg" style="height:200px;"><img src="img/border.png"></div>
<p>文本...</p>
<p>一切事無法追求完美,唯有追求盡力而為。這樣心無壓力,出來的結果反而會更好!</p>
</div>
</div>
<div class="rightcolumn">
<div class="card">
<h2>關于我</h2>
<div class="fakeimg" style="height:100px;"></div>
<p>6666</p>
</div>
<div class="card">
<h3>熱門文章</h3>
<div class="fakeimg"><img src="img/fy2_wp.png">\</div>
</div>
<div class="card">
<h3>關注我</h3>
<p>本站發布的系統與軟件僅為個人學習測試使用,請在下載后24小時內刪除,
不得用于任何商業用途,否則后果自負,請支持購買正版軟件!如侵犯到您的權益,請及時通知我們,我們會及時處理。
聲明:為非贏利性網站 不接受任何贊助和廣告。</p>
</div>
</div>
</div>
<div class="footer">
<h2>底部區域</h2>
</div>
</body>
</html>
本文主要介紹了Html的網頁布局結構,如何去了解網絡的布局,介紹了常見的移動設備的三種網頁模式,最后通過一個小項目,總結之前講解的內容。
代碼很簡單,希望可以幫助你學習。
著攜帶設備的越來越普及,移動端項目會越來越多的接觸。所以想給大家介紹一下移動端適配那點事。#前端#
手機物理像素點
每個像素都是由三原色組成的單元。
1080*1920就是橫向1080 縱向1920個物理像素點。
隨著手機發展 從 720p 1080p 到現在的 2k 4k,邏輯上如果手機分辨率翻倍,豈不是之前的網頁都縮小成一半了,不能迭代一次開發一次吧。 為了解決這個問題,就引申出 邏輯分辨率 的概念了
設備獨立像素(Density-independent Pixel, DIP) 又稱密度無關像素。這個點代表一個可以由程序使用的虛擬像素。就比如 以前 360p 屏幕(寬360個物理像素 高640個物理像素) 的時候,你的 1px(一個邏輯分辨率) 定位一個 物理像素點。等到了 720p(寬720個物理像素 高1280個物理像素) 的時候 1px 定位 2*2個物理像素點
程序虛擬像素與物理像素的對應關系
PPI超過326的屏幕就是 視網膜屏幕(Retina)#iPhone#
PPI計算方法
設備像素圖
上面設備列表圖中的 Dpr算法:
設備像素比(DPR) = 物理像素(DP) / 設備獨立像素(DIP)
這樣關系就清楚了很多,通俗的說 1個css程序像素占用多少設備像素
這個數值一般都用在多倍圖中,就是UI切圖,經常會有一倍圖,二倍圖(@2x),三倍圖(@3x)。
因為圖片也是由像素點組成的,如果Dpr為3 ,100*100px 的img 元素,就應該放入一張實際寬高 300*300 的圖片,這樣才能清楚的展示。如果放入100*100 的圖片,沒有占滿的像素點,會通過算法去取附近點的顏色,圖就會模糊。放600*600 的圖,多出的像素點會通過算法取平均色,圖就會鈍化。
一般認為 移動設備上有 三個 viewport
移動端瀏覽器的默認布局視口, 可以通過 document.documentElement.clientWidth 來獲取。
移動設備流行之前,pc網頁大行其道,一開始為了讓所有網站正常顯示,移動端瀏覽器就決定默認情況下把viewport 設為一個較寬的值(980px)。這樣pc端的網站也可以在手機上正常顯示。
代表 瀏覽器可視區域的大小,可以通過 window.visualViewport 來獲取
最理想的 viewport ,寬高等于設備屏幕的物理寬高,剔除了分辨率的干擾,針對同一 ideal viewport 設備開發的網站,都將完美呈現。
理想視口可以 用過 meta標簽去實現
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
寬度等于設備寬度,初始頁面縮放1倍(就是不縮放),最小最大縮放1倍,禁止用戶縮放
最后這個 viewport-fit=cover 是針對iphone劉海屏的,劉海跟ios底部操作欄會使網頁不能全屏
淘寶移動端meta設置
<meta name="App-Config" content="fullscreen=yes,useHistoryState=yes,transition=yes">
<meta content="yes" name="apple-mobile-web-app-capable">
<meta content="yes" name="apple-touch-fullscreen">
<meta content="telephone=no,email=no" name="format-detection">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
原始不適配 -- viewport控制縮放 -- 媒體查詢 -- 響應式布局 -- 移動端分流 -- Rem
移動端分流原理,主要是通過 UA(User Agent用戶代理)去判斷上網設備, 比如移動端輸入 pc網址 https://www.toutiao.com/,就會跳轉到 https://m.toutiao.com/ (移動端適配地址)。
附上判斷的js代碼
function IsPC() {
var userAgentInfo = navigator.userAgent;
var Agents = ["Android", "iPhone",
"SymbianOS", "Windows Phone",
"iPad", "iPod"];
var flag = true;
for (var v = 0; v < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents[v]) > 0) {
flag = false;
break;
}
}
return flag;
}
現在項目適配使用的是 vw + rem
rem(font size of the root element)是指相對于根元素(html)的字體大小的單位。
vw是可視窗口的寬度單位,不受設備分辨率影響, width: 1vw 等于 width: 1%。倘若 瀏覽器寬1000px,1vw = 10px
移動設備的原型圖一般都是二倍圖(寬750px)
者:RickyLong
出處:https://segmentfault.com/a/1190000019241607
*請認真填寫需求信息,我們會在24小時內與您取得聯系。