
響應式網(wǎng)站布局是指僅編寫(xiě)一套前端代碼,依托前端原生樣式語(yǔ)法,自動(dòng)識別訪(fǎng)問(wèn)設備的屏幕寬度、分辨率、屏幕類(lèi)型,實(shí)時(shí)調整頁(yè)面排版、元素尺寸、模塊排列方式、導航樣式,讓同一套網(wǎng)頁(yè)在電腦大屏、平板中屏、手機小屏設備上都能擁有舒適、無(wú)錯亂、無(wú)橫向滾動(dòng)條的瀏覽體驗,無(wú)需分別開(kāi)發(fā)電腦端獨立站點(diǎn)和移動(dòng)端獨立站點(diǎn)。
傳統固定像素布局會(huì )直接鎖定頁(yè)面整體寬度、模塊尺寸,頁(yè)面布局不會(huì )跟隨屏幕變化自適應調整。在電腦端正常展示的頁(yè)面,放到手機端會(huì )出現頁(yè)面整體縮小、文字看不清、按鈕點(diǎn)擊區域過(guò)小、內容溢出屏幕、需要左右滑動(dòng)瀏覽頁(yè)面等問(wèn)題,嚴重破壞用戶(hù)瀏覽體驗;如果分別開(kāi)發(fā)電腦端、移動(dòng)端兩套獨立代碼,會(huì )產(chǎn)生雙倍開(kāi)發(fā)成本、雙倍維護成本,后續內容更新、樣式修改需要同步改動(dòng)兩份代碼,維護效率極低。而本次教學(xué)的響應式布局方案,全程只維護一套源代碼,一次開(kāi)發(fā)即可全覆蓋全尺寸終端,開(kāi)發(fā)和運維成本直接減半,同時(shí)適配主流瀏覽器內核,無(wú)需依賴(lài)第三方框架插件,原生代碼即可實(shí)現,新手也能快速上手落地。
視口viewport元標簽:移動(dòng)端適配根基,告知瀏覽器按照設備真實(shí)物理寬度渲染頁(yè)面,默認關(guān)閉移動(dòng)端頁(yè)面縮放功能,是所有響應式效果生效的前提;
相對尺寸單位:放棄固定px像素,使用百分比、rem、vw/vh相對單位,讓所有元素尺寸跟隨屏幕寬度等比例變化;
媒體查詢(xún)Media Query:根據不同屏幕寬度閾值,編寫(xiě)差異化樣式規則,實(shí)現大屏多列布局、小屏單列布局、導航欄形態(tài)切換等核心布局變化。
本次教學(xué)采用行業(yè)通用無(wú)沖突屏幕斷點(diǎn),無(wú)需自定義復雜閾值,覆蓋全主流設備尺寸,分為三個(gè)檔位:
移動(dòng)端:屏幕寬度 ≤ 767px,頁(yè)面采用單列布局,導航折疊為漢堡菜單,模塊全屏鋪滿(mǎn);
平板端:屏幕寬度 768px ~ 1023px,頁(yè)面采用雙列布局,導航完整展示,模塊適當縮減間距;
電腦端:屏幕寬度 ≥ 1024px,頁(yè)面采用三列/四列寬屏布局,導航橫向平鋪,內容分區展示。
vw:視口寬度單位,1vw等于屏幕可視寬度的1%,適合頁(yè)面整體寬度、圖片、板塊尺寸適配,無(wú)需額外換算;
rem:相對于根節點(diǎn)字體大小的單位,適合文字、內邊距、外邊距適配,適配更柔和,排版更美觀(guān);
百分比%:適合父級容器寬度自適應,適配容器占比場(chǎng)景。
本次手把手教學(xué)統一采用vw+rem組合方案,兼顧布局自適應穩定性和文字排版舒適度,新手不易出現排版錯亂問(wèn)題。
本次從零搭建完整網(wǎng)站頁(yè)面,包含網(wǎng)站頭部導航、輪播橫幅、圖文內容板塊、產(chǎn)品卡片列表、頁(yè)腳五大核心模塊,一套代碼自動(dòng)適配電腦、平板、手機三類(lèi)設備,全程分步講解每一行代碼作用,新手直接復制即可運行。
首先搭建網(wǎng)頁(yè)基礎結構,必須在head頭部添加viewport視口標簽,禁止瀏覽器默認縮放,這是移動(dòng)端適配失敗最常見(jiàn)的坑。同時(shí)設置根節點(diǎn)基礎字體大小,為rem單位適配做鋪墊。
<!DOCTYPE?html>?<html>?<head>?????<meta?charset="UTF-8">?????<!--?核心視口標簽,響應式生效必備?-->?????<meta?name="viewport"?content="width=device-width,?initial-scale=1.0,?maximum-scale=1.0,?user-scalable=no">?????<title>響應式通用網(wǎng)站</title>?????<link?rel="stylesheet"?href="style.css">?</head>?<body>?????<!--?頁(yè)面內容后續編寫(xiě)?-->?</body>?</html>
清除瀏覽器默認自帶邊距、內外邊距差異,統一全局盒模型,設置根節點(diǎn)字體基準值,讓rem單位可以正常換算,同時(shí)設置全局文字自適應,禁止頁(yè)面出現橫向滾動(dòng)條。
/*?全局樣式重置?*/?*{?????margin:?0;?????padding:?0;?????box-sizing:?border-box;?????list-style:?none;?????text-decoration:?none;?}?/*?根節點(diǎn)基準字體,適配rem?*/?html{?????font-size:?1vw;?}?body{?????font-size:?1.6rem;?????color:?#333;?????overflow-x:?hidden;?/*?禁止橫向滾動(dòng)條?*/?}?/*?容器公共樣式,統一頁(yè)面版心?*/?.container{?????width:?90%;?????margin:?0?auto;?}
導航欄是響應式布局改動(dòng)最大的模塊:電腦端橫向平鋪全部導航菜單,手機端自動(dòng)隱藏菜單,展示折疊按鈕,點(diǎn)擊展開(kāi)菜單列表,依靠媒體查詢(xún)實(shí)現兩種布局無(wú)縫切換。
<header>?????<div?class="container?nav-box">?????????<div>網(wǎng)站LOGO</div>?????????<!--?移動(dòng)端折疊按鈕?-->?????????<div>≡</div>?????????<nav>?????????????<ul>?????????????????<li><a?href="#">首頁(yè)</a></li>?????????????????<li><a?href="#">關(guān)于我們</a></li>?????????????????<li><a?href="#">服務(wù)內容</a></li>?????????????????<li><a?href="#">新聞資訊</a></li>?????????????????<li><a?href="#">聯(lián)系我們</a></li>?????????????</ul>?????????</nav>?????</div>?</header>
/*?電腦端樣式:屏幕大于1024px?*/?@media?screen?and?(min-width:?1024px){?????.menu-btn{?????????display:?none;?/*?電腦端隱藏折疊按鈕?*/?????}?????.nav-box{?????????display:?flex;?????????justify-content:?space-between;?????????align-items:?center;?????????height:?8rem;?????}?????.nav?ul{?????????display:?flex;?????????gap:?3rem;?????}?}?/*?移動(dòng)端樣式:屏幕小于767px?*/?@media?screen?and?(max-width:?767px){?????.menu-btn{?????????display:?block;?????????font-size:?3rem;?????}?????.nav{?????????display:?none;?/*?默認隱藏導航菜單?*/?????????width:?100%;?????????margin-top:?2rem;?????}?????.nav?ul{?????????flex-direction:?column;?????????gap:?2rem;?????}?}
網(wǎng)站首頁(yè)圖文卡片板塊,電腦端一行展示4張卡片,平板端一行2張,手機端一行1張,無(wú)需修改HTML結構,僅通過(guò)媒體查詢(xún)修改卡片寬度即可實(shí)現自動(dòng)分列,是響應式布局最常用的內容排版方案。
.card-list{?????display:?flex;?????flex-wrap:?wrap;?????gap:?2rem;?????margin:?4rem?0;?}?.card-item{?????background:?#f5f5f5;?????padding:?2rem;?????border-radius:?1rem;?}?/*?電腦端:4列?*/?@media?(min-width:1024px){?????.card-item{width:?23%;}?}?/*?平板端:2列?*/?@media?(min-width:768px)?and?(max-width:1023px){?????.card-item{width:?48%;}?}?/*?移動(dòng)端:1列?*/?@media?(max-width:767px){?????.card-item{width:?100%;}?}
網(wǎng)頁(yè)圖片是適配高頻出錯點(diǎn),禁止固定圖片寬高,設置圖片最大寬度100%,圖片會(huì )跟隨父容器自動(dòng)縮放,不會(huì )超出屏幕、不會(huì )拉伸變形,全局通用圖片樣式一行搞定:
img{?????max-width:?100%;?????height:?auto;?????display:?block;?}
布局板塊、圖片、文字按鈕嚴禁使用px固定寬高,固定尺寸無(wú)法跟隨屏幕自適應,是適配失敗的頭號原因。所有布局尺寸統一使用vw、rem、百分比,僅邊框、小間距極小元素可以少量使用px。
媒體查詢(xún)遵循從小到大或者從大到小統一順序,推薦先寫(xiě)大屏樣式,再依次向下適配平板、手機,避免樣式覆蓋沖突,出現小屏樣式不生效的問(wèn)題。
所有元素統一設置border-box盒模型,內邊距和邊框不會(huì )撐大元素原有寬度,避免小屏狀態(tài)下板塊寬度溢出屏幕,產(chǎn)生橫向滾動(dòng)條。
移動(dòng)端觸摸設備要求按鈕最小點(diǎn)擊區域不低于44*44px,響應式開(kāi)發(fā)中需要保證移動(dòng)端按鈕尺寸足夠,避免手機端按鈕過(guò)小,用戶(hù)無(wú)法精準點(diǎn)擊。
針對不支持vw單位的老舊瀏覽器,可以增加rem降級適配方案,通過(guò)JS動(dòng)態(tài)監聽(tīng)屏幕寬度,實(shí)時(shí)修改html根節點(diǎn)字體大小,保證老舊終端也可以正常展示布局。
結合媒體查詢(xún)顏色方案識別規則,跟隨設備系統自動(dòng)切換淺色、深色兩套網(wǎng)站主題,提升全場(chǎng)景瀏覽體驗,無(wú)需額外開(kāi)發(fā)頁(yè)面。
避免文字在小屏設備上過(guò)于擁擠,通過(guò)媒體查詢(xún)單獨縮小移動(dòng)端字體大小、板塊間距,優(yōu)化移動(dòng)端閱讀舒適度,兼顧大屏美觀(guān)度和小屏可讀性。
響應式網(wǎng)站布局核心邏輯十分簡(jiǎn)單:依靠視口標簽打通移動(dòng)端渲染規則,依靠相對單位實(shí)現元素等比例縮放,依靠媒體查詢(xún)在不同屏幕寬度下切換布局樣式,最終實(shí)現一套代碼、多端自動(dòng)適配。相較于分開(kāi)開(kāi)發(fā)電腦端、移動(dòng)端兩套站點(diǎn),響應式布局可以減少50%以上的前端開(kāi)發(fā)工作量,后續迭代維護只需要修改一份代碼,同時(shí)利于網(wǎng)站SEO收錄,搜索引擎可以識別唯一域名頁(yè)面,不會(huì )出現多端頁(yè)面權重分散的問(wèn)題。新手搭建響應式網(wǎng)站無(wú)需學(xué)習復雜框架,原生HTML+CSS即可完成全部適配,只要把控好視口配置、相對單位使用、媒體查詢(xún)斷點(diǎn)三個(gè)核心關(guān)鍵點(diǎn),就能徹底解決網(wǎng)頁(yè)在手機、電腦兩端排版錯亂、顯示異常的問(wèn)題,快速完成通用企業(yè)官網(wǎng)、資訊頁(yè)面、展示型頁(yè)面的響應式改造與從零開(kāi)發(fā)。