SS盒子模型
提到盒子大家應(yīng)該可以想到很多生活中的例子,例如紙盒、收納盒、垃圾桶等等立體的盒子。這些盒子和CSS中的盒子有很多的相似點(diǎn),都有高度寬度都可以裝東西。那么我們來一起探究一下什么是盒子模型?
概念:使用盒子模型來盛放網(wǎng)頁(yè)中的各種元素,在網(wǎng)頁(yè)設(shè)計(jì)中,內(nèi)容指文字、圖片等元素,也可以是盒子之間的嵌套。填充只有寬度高度屬性,可以理解為填充物(padding),而盒子的材料厚度就是邊框(大小、線性、顏色),盒子與盒子之間的距離(margin)就是間距。
Box Model CSS盒模型本質(zhì)上是一個(gè)盒子,封裝周圍的HTML元素,它包括:邊距,邊框,填充,和實(shí)際內(nèi)容。
盒模型的組成由width、height、border、padding、margin來描述。
margin是什么?
例如生活中的箱子,兩個(gè)箱子并排放在一起,他們兩個(gè)之間的間距(margin)被稱為外邊距。分為上右下左四個(gè)方向。
padding是什么?
當(dāng)我們往盒子里邊放了一些貴重的物品時(shí)(小心易碎!),需要在物品和盒子之間放置一些填充物,這些填充物(padding)被稱為內(nèi)邊距。同樣內(nèi)邊距分為上右下左四個(gè)方向。
在盒子模型中,width,height指的是內(nèi)容區(qū)域的的尺寸。增加內(nèi)外邊距不會(huì)影響內(nèi)容區(qū)域的尺寸,但是會(huì)影響元素的總尺寸。 所以當(dāng)我們?nèi)ビ?jì)算一個(gè)元素應(yīng)該在頁(yè)面呈現(xiàn)多大我們需要去合理的設(shè)置相關(guān)的屬性達(dá)到我們需要的效果。
探究一下padding與margin不同的值所體現(xiàn)的效果。
example
使用“DIV+CSS”對(duì)網(wǎng)站進(jìn)行布局符合W3C標(biāo)準(zhǔn),采用這種方式布局通常是為了說明與HTML表格定位方式的區(qū)別。因?yàn)楝F(xiàn)在的網(wǎng)站設(shè)計(jì)標(biāo)準(zhǔn)中,已經(jīng)不再使用表格定位技術(shù),而是采用DIV+CSS的方式實(shí)現(xiàn)各種定位。通過使用div盒子模型結(jié)構(gòu)將各部分內(nèi)容劃分到不同的區(qū)塊,然后用css來定義盒子模型的位置、大小、邊框、內(nèi)外邊距、排列方式等。簡(jiǎn)單地說,div用于搭建網(wǎng)站結(jié)構(gòu)(框架)、css用于創(chuàng)建網(wǎng)站表現(xiàn)(樣式/美化)。該標(biāo)準(zhǔn)簡(jiǎn)化了HTML頁(yè)面代碼,獲得一個(gè)較優(yōu)秀的網(wǎng)站結(jié)構(gòu),有利于日后網(wǎng)站維護(hù)、協(xié)同工作和便于搜索引擎抓取。當(dāng)然并不是所有的網(wǎng)頁(yè)都需要用div布局,例如數(shù)據(jù)頁(yè)面、報(bào)表之類的頁(yè)面,還是使用HTML的表格會(huì)比較方便,web標(biāo)準(zhǔn)里并沒有說要拋棄table。
Firebug 為你的 Firefox 集成了瀏覽網(wǎng)頁(yè)的同時(shí)隨手可得的豐富開發(fā)工具。你可以對(duì)任何網(wǎng)頁(yè)的 CSS、HTML 和 JavaScript 進(jìn)行實(shí)時(shí)編輯、調(diào)試和監(jiān)控
就算在不同的瀏覽器中效果不完全一致,也要做到大概一至
每個(gè)HTML元素都可以看作一個(gè)裝了東西的盒子,盒子具有寬度(width)和高度(height),盒子里面的內(nèi)容到盒子的邊框之間的距離即填充(padding),盒子本身有邊框(border),而盒子邊框外和其他盒子之間,還有邊界(margin)。
布局中的主要樣式
定位屬性
區(qū)塊屬性(區(qū)塊模型)
雖然使用絕對(duì)定位可以實(shí)現(xiàn)頁(yè)面布局,但由于調(diào)整某個(gè)區(qū)塊框時(shí)其它區(qū)塊的位置并不會(huì)跟隨著改變,所以并不是布局的首選方式。而使用浮動(dòng)的區(qū)塊框可以向左或向右移動(dòng),直到它的外邊緣碰到包含它區(qū)塊的邊框或另一個(gè)浮動(dòng)框的邊框?yàn)橹埂2⑶矣捎诟?dòng)框不在文檔的普通流中,所以文檔的普通流中的區(qū)塊框表現(xiàn)得就像浮動(dòng)框不存在一樣。
設(shè)置浮動(dòng)
在進(jìn)行頁(yè)面布局時(shí),經(jīng)常需要設(shè)置多個(gè)區(qū)塊框并列在一行中排列。最常見的方式就是使用float屬性,再通過left或right值移動(dòng)區(qū)塊框向左或向右浮動(dòng)。但當(dāng)前面并列的多個(gè)區(qū)塊框總寬度不足包含框的100%時(shí),就會(huì)在行框中留出一定的寬度,而下面的某個(gè)區(qū)塊框又恰好滿足這個(gè)寬度,則很可能會(huì)向上提,和上一行并列的區(qū)塊框在同一行排列。而這不并是我們想要的結(jié)果,所以可以使用clear屬性解決這一問題,該屬性的值可以是 left、right、both 或 none,它表示框的哪些邊不應(yīng)該挨著浮動(dòng)框。
高度和寬度固定的區(qū)塊居中(position)
高度和寬度可變的區(qū)塊居中(margin)
端發(fā)展越來越快,每天都有數(shù)不勝數(shù)的技術(shù)發(fā)布。
想要入門前端卻沒有一條較為理想的路徑?
在這個(gè)世界里兜兜轉(zhuǎn)轉(zhuǎn)了很久還是感覺在外圍搬磚?
那么你可能需要這份技術(shù)學(xué)習(xí)路線圖!
我們把學(xué)習(xí)前端分為三重境界:
接下來我們就通過介紹這三重境界來為你呈現(xiàn)詳細(xì)的學(xué)習(xí)路線圖。
何為單機(jī)呢?其實(shí)就是一個(gè)人
你一個(gè)人使用 Web 基礎(chǔ)技術(shù)開發(fā)網(wǎng)站,沒有將代碼分享給別人(你可能不知道程序世界的代碼分享規(guī)則),同時(shí)只是在本地環(huán)境運(yùn)行你的網(wǎng)站,你甚至對(duì)網(wǎng)站如何能把其他人訪問到毫無頭緒。
這個(gè)階段也是成為一名前端工程師最最基礎(chǔ)的一環(huán),大部分初學(xué)者還停留在這個(gè)階段,那么我們來看一下這個(gè)階段需要什么樣的技能。
HTML + CSS + JavaScript
沒錯(cuò),其實(shí)就是我們耳熟能詳?shù)那岸巳齽停m然看起來是最最入門的內(nèi)容,但是需要了解的內(nèi)容也不少,就類似我們需要先學(xué) 26 個(gè)字母,學(xué)各種漢字基礎(chǔ),才能寫作或者創(chuàng)作詩(shī)歌一樣。了解這三門技術(shù)大致需要了解那些內(nèi)容以及有哪些學(xué)習(xí)資源推薦呢?
HTML 代表超文本標(biāo)記語言。 它用于前端,為網(wǎng)頁(yè)提供結(jié)構(gòu),您可以使用 CSS 設(shè)置樣式并使用 JavaScript 進(jìn)行交互。
HTML 的學(xué)習(xí)大致需要 6 個(gè)階段:
CSS 或級(jí)聯(lián)樣式表是用于設(shè)置任何網(wǎng)站前端樣式的語言。 CSS 是萬維網(wǎng)的基礎(chǔ)技術(shù),與 HTML 和 JavaScript 并列。
學(xué)習(xí)基礎(chǔ)的 CSS 大致需要 3 個(gè)階段:
JavaScript 允許您向頁(yè)面添加交互性。 您可能在網(wǎng)站上看到的常見示例是滑塊、點(diǎn)擊交互、彈出窗口等。
學(xué)習(xí)基礎(chǔ)的 JavaScript 大致需要 5 個(gè)階段:
了解了上面的這些內(nèi)容,你基本上算是一名基礎(chǔ)的前端工程師了,你可以編寫各種各樣的基礎(chǔ)界面,也應(yīng)該在學(xué)習(xí)的過程中產(chǎn)出了很多個(gè) DEMO 了。
請(qǐng)注意我們這一小節(jié)的關(guān)鍵詞:聯(lián)機(jī)、高效。
在這個(gè)階段,你將學(xué)會(huì)如下知識(shí):
基于上述的目標(biāo),這一階段的關(guān)鍵技術(shù)如下:
Git 是一種版本控制系統(tǒng)。
版本控制系統(tǒng)允許您跟蹤代碼庫(kù)/文件隨時(shí)間的變化。 它們?cè)试S您毫無問題地返回到代碼庫(kù)的某個(gè)先前版本。 此外,它們還有助于與處理相同代碼的人協(xié)作——如果您曾經(jīng)與其他人合作過一個(gè)項(xiàng)目,您可能已經(jīng)知道將其他人的更改復(fù)制和合并到您的代碼庫(kù)中的挫敗感; 版本控制系統(tǒng)可以讓你擺脫這個(gè)問題。
你可以通過下面的鏈接學(xué)習(xí)它:
GitHub 是使用 Git 進(jìn)行軟件開發(fā)和版本控制的互聯(lián)網(wǎng)托管提供商。 它提供了 Git 的分布式版本控制和源代碼管理功能,以及它自己的特性。
你可以通過下面的鏈接學(xué)習(xí)它:
互聯(lián)網(wǎng)是一個(gè)全球性的計(jì)算機(jī)網(wǎng)絡(luò),它們相互連接,通過一組標(biāo)準(zhǔn)化的協(xié)議進(jìn)行通信。
HTTP 是基于 TCP/IP 的應(yīng)用層通信協(xié)議,它標(biāo)準(zhǔn)化了客戶端和服務(wù)器之間的通信方式。 它定義了如何通過 Internet 請(qǐng)求和傳輸內(nèi)容。
Web 瀏覽器是一種軟件應(yīng)用程序,它使用戶能夠通過其圖形用戶界面訪問和顯示網(wǎng)頁(yè)或其他在線內(nèi)容。
域名系統(tǒng) (DNS) 是 Internet 的電話簿。 人類通過域名(如 nytimes.com 或 espn.com)在線訪問信息。 Web 瀏覽器通過 Internet 協(xié)議 (IP) 地址進(jìn)行交互。 DNS 將域名轉(zhuǎn)換為 IP 地址,因此瀏覽器可以加載 Internet 資源
名是用于訪問網(wǎng)站的唯一且易于記憶的地址,例如“google.com”和“facebook.com”。 借助 DNS 系統(tǒng),用戶可以使用域名連接到網(wǎng)站。
虛擬主機(jī)是一種在線服務(wù),可讓您將網(wǎng)站文件發(fā)布到互聯(lián)網(wǎng)上。 因此,任何可以訪問互聯(lián)網(wǎng)的人都可以訪問您的網(wǎng)站。
React
React 是最流行的用于構(gòu)建用戶界面的前端 JavaScript 庫(kù)。 React 還可以使用 Node 在服務(wù)器上渲染,并使用 React Native 為移動(dòng)應(yīng)用程序提供動(dòng)力。
Redux
Redux 是 JavaScript 應(yīng)用程序的可預(yù)測(cè)狀態(tài)容器。 它可以幫助您編寫行為一致、在不同環(huán)境(客戶端、服務(wù)器和本機(jī))中運(yùn)行并且易于測(cè)試的應(yīng)用程序。 最重要的是,它提供了出色的開發(fā)人員體驗(yàn),例如實(shí)時(shí)代碼編輯與時(shí)間旅行調(diào)試器相結(jié)合。
當(dāng)然狀態(tài)管理方面目前也有 Mobx 與 Recoil 等有力的競(jìng)爭(zhēng)者。
上述的是 React 生態(tài),此外 JavaScript 社區(qū)還有 Vue 與 Angular 等其他非常有競(jìng)爭(zhēng)力的框架。
Styled Components
利用標(biāo)記的模板文字(最近添加到 JavaScript)和 CSS 的強(qiáng)大功能,styled-components 允許您編寫實(shí)際的 CSS 代碼來設(shè)置組件的樣式。 它還刪除了組件和樣式之間的映射——將組件用作低級(jí)樣式構(gòu)造!
CSS Modules
給 CSS 加入了局部作用域與模塊依賴
Sass
為 CSS 加入編程元素,被稱為 CSS 預(yù)處理器
TailwindCSS
供一系列輔助類,直接為 HTML 標(biāo)記添加這些預(yù)設(shè)的輔助類就可以快速完成一組專業(yè)的網(wǎng)站。
Webpack
Webpack 是一個(gè)模塊打包器。 它的主要目的是捆綁 JavaScript 文件以在瀏覽器中使用,但它也能夠轉(zhuǎn)換、捆綁或打包幾乎任何資源或資產(chǎn)。
除了 Webpack,目前前端圈比較火的還有:
Npm scripts
組合 Yarn、Npm、Pnpm 等包管理一起使用,來便捷的執(zhí)行一系列腳本
Babel
Babel是一個(gè)廣泛使用的轉(zhuǎn)碼器,可以將ES6代碼轉(zhuǎn)為ES5代碼,從而在現(xiàn)有環(huán)境執(zhí)行
BEM
塊、元素、修飾符方法(通常稱為 BEM)是 HTML 和 CSS 中類的流行命名約定。 由 Yandex 團(tuán)隊(duì)開發(fā),其目標(biāo)是幫助開發(fā)人員更好地理解給定項(xiàng)目中 HTML 和 CSS 之間的關(guān)系。
JavaScript Style Guide
編寫 JavaScript 最合理的方法之一
經(jīng)歷上面的一陣狂風(fēng)亂炸的洗禮之后,你現(xiàn)在已經(jīng)能夠理解如下知識(shí)了:
如果你想讓你的網(wǎng)站被更多人使用,甚至是你要開發(fā)一款產(chǎn)品,完成你的創(chuàng)業(yè)目標(biāo),那么你可能還需要一些額外的知識(shí)輔助你。
在這個(gè)階段你需要了解的知識(shí)點(diǎn)如下:
HTTPS
HTTPS 是一種在 Web 服務(wù)器和瀏覽器之間發(fā)送數(shù)據(jù)的安全方式。
CORS
跨域資源共享 (CORS) 是一種基于 HTTP 標(biāo)頭的機(jī)制,它允許服務(wù)器指示除其自身之外的任何來源(域、方案或端口),瀏覽器應(yīng)允許從中加載資源。
CSP(內(nèi)容安全策略)
內(nèi)容安全策略是一種計(jì)算機(jī)安全標(biāo)準(zhǔn),用于防止在受信任的網(wǎng)頁(yè)上下文中執(zhí)行惡意內(nèi)容而導(dǎo)致的跨站點(diǎn)腳本、點(diǎn)擊劫持和其他代碼注入攻擊。
Jest
Jest 是一個(gè)令人愉快的 JavaScript 測(cè)試框架,專注于簡(jiǎn)單性。 它適用于使用以下項(xiàng)目的項(xiàng)目:Babel、TypeScript、Node、React、Angular、Vue 等等!
React Testing Library
完備的 React DOM 的測(cè)試輔助庫(kù)
Cypress
對(duì)應(yīng)用進(jìn)行端到端測(cè)試
Enzyme
測(cè)試 React 的輔助庫(kù)
TypeScript
TypeScript 是一種基于 JavaScript 的強(qiáng)類型編程語言,可為您提供任何規(guī)模的更好的工具。
Web 最新的 Progressive Web Apps (PWA)技術(shù),使得 Web 網(wǎng)站可以像 App 一樣,擁有離線使用、推送通知等功能。
PWA 主要包含下面幾個(gè)部分:
主要的參考學(xué)習(xí)資源如下:
Web 性能是加載時(shí)間和運(yùn)行時(shí)的客觀測(cè)量和感知用戶體驗(yàn)。 Web 性能是指網(wǎng)站加載、變得交互和響應(yīng)所需的時(shí)間,以及在用戶交互期間內(nèi)容的流暢程度。
性能涉及到計(jì)算、衡量與改進(jìn)性能,主要涉及下面這些知識(shí)點(diǎn):
主要的參考學(xué)習(xí)資源如下:
SEO(Search Engine Optimization)—— 搜索引擎優(yōu)化,目的是幫助我們的網(wǎng)站在Google或者Baidu搜索的時(shí)候排名會(huì)提升靠前。
Next.js
Next.js 是一個(gè)構(gòu)建在 Node.js 之上的開源開發(fā)框架,支持基于 React 的 Web 應(yīng)用程序功能,例如服務(wù)器端渲染和生成靜態(tài)網(wǎng)站。
React Native
使用 React 來開發(fā)移動(dòng)端應(yīng)用,如 Android 或 iOS。
Flutter
Flutter 為應(yīng)用開發(fā)帶來了革新: 只要一套代碼庫(kù)(Dart),即可構(gòu)建、測(cè)試和發(fā)布適用于移動(dòng)、Web、桌面和嵌入式平臺(tái)的精美應(yīng)用
Electron
Electron(原名為Atom Shell)是GitHub開發(fā)的一個(gè)開源框架。它通過使用Node.js(作為后端)和Chromium的渲染引擎(作為前端)完成跨平臺(tái)的桌面GUI應(yīng)用程序的開發(fā)。Electron現(xiàn)已被多個(gè)開源Web應(yīng)用程序用于前端與后端的開發(fā),著名項(xiàng)目包括GitHub的Atom和微軟的Visual Studio Code。
WebAssembly
WebAssembly是一種新的編碼方式,可以在現(xiàn)代的網(wǎng)絡(luò)瀏覽器中運(yùn)行 - 它是一種低級(jí)的類匯編語言,具有緊湊的二進(jìn)制格式,可以接近原生的性能運(yùn)行,并為諸如C / C ++等語言提供一個(gè)編譯目標(biāo),以便它們可以在Web上運(yùn)行。它也被設(shè)計(jì)為可以與JavaScript共存,允許兩者一起工作。
當(dāng)你學(xué)完了這個(gè)部分的內(nèi)容,基本上已經(jīng)是算是一位高階的前端工程師了,能夠在任何大廠勝任各種研發(fā)工作,當(dāng)然能夠堅(jiān)持到這里不容易,需要持續(xù)的努力,加油
本文從三個(gè)維度切入了在 2022 年作為一名前端工程師需要學(xué)習(xí)的內(nèi)容,以及給出了詳細(xì)的學(xué)習(xí)路線圖和對(duì)應(yīng)的學(xué)習(xí)資源,當(dāng)然有些資源都是國(guó)外的,需要自備科學(xué)上網(wǎng)工具,后續(xù)會(huì)基于這條學(xué)習(xí)路線圖進(jìn)行完善,并且補(bǔ)充詳細(xì)的中文學(xué)習(xí)資源,敬請(qǐng)期待。
以上便是本次分享的全部?jī)?nèi)容,希望對(duì)你有所幫助^_^
喜歡的話別忘了 分享、點(diǎn)贊、收藏 三連哦~
歡迎關(guān)注公眾號(hào) 程序員巴士,來自字節(jié)、蝦皮、招銀的三端兄弟,分享編程經(jīng)驗(yàn)、技術(shù)干貨與職業(yè)規(guī)劃,助你少走彎路進(jìn)大廠。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。