整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          “請(qǐng)解釋一下Twitter的前10行源代碼”

          “請(qǐng)解釋一下Twitter的前10行源代碼”
          作者 | Anand Chowdhary 譯者 | 彎月
          出品 | CSDN(ID:CSDNnews)

          最近,我在為公司招聘一名高級(jí)全棧JavaScript工程師。由于我們是遠(yuǎn)程工作,因此面試在Zoom上進(jìn)行,而且我注意到一些開發(fā)人員非常適合這份工作,卻不擅長(zhǎng)在白板上編寫程序。所以,我們采取了一小時(shí)技術(shù)交流的方式,我提出有關(guān)Web指標(biāo)、可訪問(wèn)性、瀏覽器之戰(zhàn),以及其他有關(guān)Web的問(wèn)題。每次我都要問(wèn)的一個(gè)問(wèn)題是:“請(qǐng)解釋一下Twitter的網(wǎng)頁(yè)源代碼前10行。”

          我認(rèn)為,這是一個(gè)很簡(jiǎn)單的測(cè)試,但能檢驗(yàn)出候選人對(duì)于前端基礎(chǔ)知識(shí)掌握的深度。

          面試時(shí),我會(huì)共享我的屏幕,打開Twitter.com并點(diǎn)擊“查看源代碼”。然后,我會(huì)讓他們逐行解釋HTML代碼,至于解釋的深度由他們自行決定。我還會(huì)放大屏幕,這樣候選人看不到每一行完整的代碼,但能大致了解代碼的意思。如下所示:

          請(qǐng)注意,我們的技術(shù)討論只是一次對(duì)話,所以我并不會(huì)期待完美的答案。如果我聽(tīng)到一些正確的關(guān)鍵字,我就知道候選人了解這個(gè)概念,然后我會(huì)朝著正確的方向引導(dǎo)他們。


          第一行:<!DOCTYPE html>

          網(wǎng)頁(yè)源代碼的第一行非常適合這類面試,因?yàn)楹蜻x人對(duì)于DOCTYPE的了解程度基本上能反映出他們的經(jīng)驗(yàn)。我還記得當(dāng)年Dreamweaver流行的時(shí)候,需要編寫一串XHTML DOCTYPE,就像2009年Chris在文章《The Common DOCTYPES》中列出的一樣(https://css-tricks.com/snippets/html/the-common-doctypes/)。

          最佳答案:這一行是文檔類型定義,所有HTML文件的第一行必須這么寫。有人可能會(huì)認(rèn)為這行代碼是多余的,因?yàn)闉g覽器已經(jīng)知道響應(yīng)的MIME類型是text/html,但在Netscape和Internet Explorer的時(shí)代,有許多不同的HTML標(biāo)準(zhǔn),因此瀏覽器很難判斷應(yīng)該遵照哪個(gè)標(biāo)準(zhǔn)來(lái)渲染頁(yè)面。

          這一點(diǎn)非常煩人,因?yàn)槊總€(gè)標(biāo)準(zhǔn)都會(huì)生成不同的布局,這才需要使用這個(gè)標(biāo)簽,幫助瀏覽器進(jìn)行渲染。以前,DOCTYPE非常長(zhǎng),而且還會(huì)包含標(biāo)準(zhǔn)的連接(就像今天的SVG文件那樣),但幸運(yùn)的是,這種簡(jiǎn)潔的<!DOCTYPE html>成為了HTML 5的標(biāo)準(zhǔn),并延續(xù)至今。

          可以接受的答案:這是DOCTYPE標(biāo)簽,讓瀏覽器知道這是一個(gè)HTML 5網(wǎng)頁(yè),并應(yīng)按照HTML 5渲染。


          第二行:<html dir="ltr">

          這一行可以判斷出候選人是否了解可訪問(wèn)性和本地化。令人驚訝的是,我面試過(guò)的人中很少有人知道dir屬性,但這個(gè)屬性能引發(fā)有關(guān)屏幕閱讀器的討論。幾乎每個(gè)人都能判斷出lang="en"屬性的含義,即使他們從未用過(guò)。

          最佳答案:這是HTML文檔的根元素,其他元素都位于該元素之內(nèi)。它有兩個(gè)屬性:方向和語(yǔ)言。方向?qū)傩缘闹禐椤皬淖蟮接摇保嬖V用戶代理內(nèi)容的方向;這個(gè)值也可以是“從右到左”,比如阿拉伯語(yǔ);或者是“auto”,讓瀏覽器自行判斷方向。

          lang(語(yǔ)言)屬性指明了該標(biāo)簽內(nèi)的所有代碼都是英語(yǔ)。你可以將這個(gè)值設(shè)置成任何語(yǔ)言標(biāo)簽,甚至可以區(qū)分en-us和en-gb。它也可以幫助屏幕閱讀器判斷該用哪種語(yǔ)言來(lái)讀出文字。


          第三行:<meta charset="utf-8">

          最佳答案:源代碼中的meta標(biāo)簽為文檔提供了元數(shù)據(jù)。字符集(charset)屬性告訴瀏覽器該使用哪種字符編碼,Twitter使用的是標(biāo)準(zhǔn)的UTF-8編碼。UTF-8非常好,因?yàn)樗嗽S多字符點(diǎn),因此可以在源代碼中使用各種符號(hào),甚至是表情符號(hào)。將這個(gè)標(biāo)簽放在文檔開頭非常重要,保證瀏覽器在遇到該標(biāo)簽時(shí)不至于已開始解析太多文本。我記得規(guī)則是要放在文檔開頭1k字節(jié)內(nèi),但我認(rèn)為最佳實(shí)踐是放在<head>的第一行。

          另外,似乎Twitter出于性能原因省略了<head>標(biāo)簽(以減少加載的代碼量),但我依然認(rèn)為應(yīng)當(dāng)明確地寫出<head>,因?yàn)?lt;head>是容納元信息、樣式等的容器。


          第四行:<meta name="viewport" content="width=device-...

          最佳答案:源代碼中的這個(gè)meta標(biāo)簽用來(lái)指定在小屏幕(比如手機(jī))上的正確尺寸。如果你還記得最初的iPhone幻燈片,當(dāng)時(shí)喬布斯在小小的4.5寸屏幕上顯示了整個(gè)紐約時(shí)報(bào)的網(wǎng)站,當(dāng)時(shí)能夠雙指放大看清文字,還是個(gè)非常好用的功能。

          但現(xiàn)在,網(wǎng)頁(yè)都要設(shè)計(jì)成響應(yīng)式,width=device-width會(huì)告訴瀏覽器使用100%的設(shè)備寬度作為視口大小,以避免產(chǎn)生水平滾動(dòng)條,但你甚至可以指定像素寬度。標(biāo)準(zhǔn)的最佳實(shí)踐是將初始比例設(shè)置為1,將寬度設(shè)置為device-width,這樣人們?cè)谛枰獣r(shí)依然可以使用放大功能。

          源代碼截圖中并沒(méi)有顯示出這些值,但這些知識(shí)了解一下更好:Twitter還使用了user-scalable=0,顧名思義,它禁止了用戶自行縮放。對(duì)于可訪問(wèn)性來(lái)說(shuō)這并不好,但可以讓網(wǎng)頁(yè)更像原生應(yīng)用。出于同樣的理由,Twitter還設(shè)置了maximum-scale=1(可以使用最小和最大比例來(lái)限制放縮的范圍)。通常,只設(shè)置全屏寬度和初始縮放比例就足夠了。


          第五行:<meta property="og:site_name" content="Twitt...

          大約有50%的候選人知道Open Graph標(biāo)簽,而回答好該問(wèn)題證明他們懂得SEO。

          最佳答案:這個(gè)標(biāo)簽是一個(gè)Open Graph(OG)標(biāo)簽,用于設(shè)置網(wǎng)站名為Twitter。Open Graph協(xié)議由Facebook提出,旨在方便獲取鏈接內(nèi)容并將鏈接顯示成卡片形式,開發(fā)者可以在網(wǎng)頁(yè)中添加各種細(xì)節(jié)和封面圖像,就可以在分享鏈接時(shí)生成漂亮的卡片。實(shí)際上,現(xiàn)在更常見(jiàn)的做法是利用Puppeteer之類的工具自動(dòng)生成open graph圖像。

          另一個(gè)有意思的地方是,meta標(biāo)簽通常使用name屬性,但OG采用了非標(biāo)準(zhǔn)的property屬性。我猜這只是Facebook自己的喜好?title、url和description這幾個(gè)Open Graph標(biāo)簽有點(diǎn)多余,因?yàn)檫@些信息可以從正常的meta標(biāo)簽中獲取,但安全起見(jiàn),人們還是會(huì)設(shè)置這些標(biāo)簽。今天的絕大多數(shù)網(wǎng)站都會(huì)使用Open Graph和其他原標(biāo)簽的組合,結(jié)合網(wǎng)頁(yè)的內(nèi)容,生成內(nèi)容豐富的預(yù)覽。


          第六行:<meta name="apple-mobile-web-app-title" cont...

          絕大多數(shù)候選人不知道這一條,但有經(jīng)驗(yàn)的開發(fā)者可以討論如何為蘋果設(shè)備優(yōu)化網(wǎng)站,如apple-touch-icons,以及在Safari中錨定的標(biāo)簽頁(yè)上顯示的SVG等。

          最佳答案:你可以將一個(gè)網(wǎng)站錨定到iPhone的主屏幕上,使它看起來(lái)像是一個(gè)原生應(yīng)用。Safari不支持漸進(jìn)式Web應(yīng)用,而且在iOS上無(wú)法真正使用其他瀏覽器引擎,所以如果想實(shí)現(xiàn)類似于原生的體驗(yàn),你別無(wú)選擇。Twiiter為了實(shí)現(xiàn)原生效果,使用了這一行告訴Safari該應(yīng)用的名稱為Twitter。下一行很相似,控制當(dāng)應(yīng)用啟動(dòng)時(shí)狀態(tài)欄的顯示方式。


          第八行:<meta name="theme-color" content="#ffffff"...

          最佳答案:這個(gè)meta標(biāo)簽定義了蘋果設(shè)備上的狀態(tài)欄顏色,現(xiàn)在幾乎成了Web標(biāo)準(zhǔn)。它指定了瀏覽器該如何設(shè)置周邊UI的主題。安卓上的Chrome和桌面上的Brave瀏覽器都能很好地處理它。content中可以設(shè)置任何CSS顏色,甚至可以通過(guò)media屬性僅在特定媒體查詢(例如暗色模式)滿足時(shí)顯示顏色。你也可以在Web應(yīng)用的manifest中定義該屬性以及額外的屬性。


          第九行:<meta http-equiv="origin-trial" content="...

          我面試過(guò)的候選人沒(méi)人知道這個(gè)。我覺(jué)得只有深入了解最新技術(shù)發(fā)展趨勢(shì)的人才知道這一條。

          最佳答案:Origin trial可以在網(wǎng)站上使用最新的試驗(yàn)特性,根據(jù)用戶代理跟蹤反饋并匯報(bào)至Web標(biāo)準(zhǔn)社區(qū),而不需要用戶同意參與某個(gè)特性標(biāo)志。例如,Edge就有一個(gè)用于雙屏和可折疊設(shè)備的origin trial,這個(gè)功能非常酷,你可以根據(jù)折疊屏手機(jī)打開或關(guān)閉來(lái)實(shí)現(xiàn)不同的布局。

          可接受答案:不了解這個(gè)選項(xiàng)。


          第十行:html{-ms-text-size-adjust:100%;-webkit-text...

          幾乎沒(méi)人知道這個(gè)選項(xiàng),只有那些特別了解CSS的極端情況和優(yōu)化措施的人才知道。

          最佳答案:假設(shè)你的網(wǎng)站不支持移動(dòng)端響應(yīng)式,然后在一個(gè)小屏幕設(shè)備上打開該網(wǎng)站。瀏覽器有可能會(huì)放大字體,以方便閱讀。CSS的text-size-adjust屬性設(shè)置為none即可禁止該特性,或設(shè)置為一個(gè)百分比,告訴瀏覽器最多能放大多少。

          這里,Twitter將最大值設(shè)置為100%,也就是說(shuō)文字不會(huì)超過(guò)其實(shí)際大小。這樣做的原因是網(wǎng)站已經(jīng)是響應(yīng)式網(wǎng)站了,因此他們不希望冒著布局被破壞的風(fēng)險(xiǎn)來(lái)允許大號(hào)字體。這個(gè)標(biāo)簽應(yīng)用到根HTML標(biāo)簽上,所以對(duì)所有內(nèi)容生效。因?yàn)檫@是一個(gè)試驗(yàn)性的CSS,所以需要加上廠商前綴。此外,在這個(gè)CSS之前少了一個(gè)<style>,不過(guò)應(yīng)該是被最小化到上一行了,我們沒(méi)看到而已。

          可接受答案:我不知道這個(gè)選項(xiàng)的具體情況,但-ms和-webkit-分別是Internet Exporer和基于Webkit的瀏覽器的廠商前綴,用于非標(biāo)準(zhǔn)屬性。在CSS3出現(xiàn)時(shí)我們?cè)?jīng)使用過(guò)這些前綴,但隨著屬性從試驗(yàn)階段進(jìn)入穩(wěn)定階段,或被標(biāo)準(zhǔn)接受,這些前綴就不再需要了。


          額外獎(jiǎng)勵(lì):第十一行:body{margin:0;}

          Twitter的這行代碼非常有意思,因?yàn)槟憧梢皂槺銌?wèn)一下網(wǎng)頁(yè)重置和標(biāo)準(zhǔn)化的區(qū)別。幾乎每個(gè)人都知道某個(gè)版本的正確答案。

          最佳答案:因?yàn)椴煌臑g覽器有不同的默認(rèn)樣式(用戶代理樣式表),所以你應(yīng)該通過(guò)重置屬性的方式覆蓋默認(rèn)樣式,使網(wǎng)站在不同設(shè)備上擁有同樣的外觀。此處,Twitter告訴瀏覽器去掉body標(biāo)簽的默認(rèn)margin。這樣可以減少瀏覽器之間的不一致,但與重置相比,我更喜歡使用正規(guī)化樣式,即在所有瀏覽器上應(yīng)用同樣的默認(rèn)樣式,而不是簡(jiǎn)單地刪除。有些人甚至?xí)褂?* {margin:0 },這一條過(guò)于強(qiáng)大了,而且會(huì)影響性能,但現(xiàn)在更常見(jiàn)的做法是導(dǎo)入 normalize.css或 reset.css等樣式表。


          補(bǔ)充

          我很喜歡通過(guò)瀏覽器的Inspector工具來(lái)查看網(wǎng)站的制作,因此想出了這個(gè)面試的點(diǎn)子。盡管我認(rèn)為我很了解語(yǔ)義HTML,但每次這樣做都會(huì)學(xué)到一些新東西。

          因?yàn)門witter主要是一個(gè)客戶端React應(yīng)用,因此源代碼中只有很少的幾行。即使如此,能學(xué)到的東西也有很多!還有一些非常有意思的代碼,這些作為給讀者的練習(xí)。你能在面試中解釋多少行代碼?

          <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="Twitter">

          告訴瀏覽器,用戶可以將Twitter設(shè)置為搜索引擎。

          <link rel="preload" as="script" crossorigin="anonymous" href="https://abs.twimg.com/responsive-web/client-web/polyfills.cad508b5.js" nonce="MGUyZTIyN2ItMDM1ZC00MzE5LWE2YmMtYTU5NTg2MDU0OTM1" />

          這一條有很多值得討論的東西,特別是nonce。

          <link rel="alternate" hreflang="x-default" href="https://twitter.com/" />

          這一條用于國(guó)際化的首頁(yè)。

          :focus:not([data-focusvisible-polyfill]){outline: none;}

          這一條用于在不使用鍵盤瀏覽時(shí)去掉焦點(diǎn)元素的框線(這里針對(duì):focus-visible這個(gè)CSS選擇器使用了polyfill)。

          原文地址:https://css-tricks.com/explain-the-first-10-lines-of-twitter-source-code/#top-of-site

          本文為 CSDN 翻譯,未經(jīng)授權(quán),禁止轉(zhuǎn)載


          END


          成就一億技術(shù)人

          本文簡(jiǎn)介

          • 面試大廠,HTML/CSS,JS,網(wǎng)絡(luò)基礎(chǔ)這三塊硬知識(shí)是必不可少的
          • 我整理了一些備考筆記,分享給大家
          • 初中級(jí)前端到高級(jí)前端的蛻變,從基礎(chǔ)知識(shí)開始~

          2 塊元素和行元素

          2.1 請(qǐng)說(shuō)出3個(gè)H5新增的塊元素,并介紹他們的應(yīng)用場(chǎng)景

          • aside:表示article元素內(nèi)容之外,與article元素內(nèi)容相關(guān)的輔助信息
          • figure:代表一個(gè)塊級(jí)圖像,包含說(shuō)明。figure添加標(biāo)題時(shí),與figcaption元素結(jié)合使用。
          • dialog:表示幾個(gè)人直接的對(duì)話。與dt和dd元素結(jié)合使用,dt表示講話者,dd表示講話內(nèi)容。

          2.2 行內(nèi)元素和塊元素的區(qū)別

          • HTML元素分為行內(nèi)、塊狀、行內(nèi)塊元素三種。
          • 塊元素和行內(nèi)塊元素可以設(shè)置寬高
          • 行內(nèi)元素不可以,高度由內(nèi)容撐開
          • 三者是可以通過(guò)display屬性任意轉(zhuǎn)換的 block 塊狀元素 inline-block行內(nèi)塊元素 inline 行內(nèi)元素

          2.3 塊級(jí)元素特征

          • 可以設(shè)置寬高
          • 設(shè)置margin、padding的上下左右都有效
          • 元素獨(dú)占一行
          • 多個(gè)塊狀元素一起寫,默認(rèn)排列從上至下

          我自己是一名從事了多年開發(fā)的web前端老程序員,目前辭職在做自己的web前端私人定制課程,今年我花了一個(gè)月整理了一份最適合2020年學(xué)習(xí)的web前端學(xué)習(xí)干貨,各種框架都有整理,送給每一位前端小伙伴,想要獲取的可以關(guān)注我的頭條號(hào)并在后臺(tái)私信我:前端,即可免費(fèi)獲取。

          2.4 行內(nèi)塊元素特征

          • 能設(shè)置寬高
          • 不會(huì)自動(dòng)換行
          • 多個(gè)行內(nèi)塊一起寫,默認(rèn)從左至右排列

          2.5 行內(nèi)元素特征

          • 設(shè)置寬高無(wú)效
          • 設(shè)置margin的上下無(wú)效,左右有效,設(shè)置padding上下左右都有效(并且會(huì)撐大空間)
          • 不會(huì)自動(dòng)換行

          3 CSS

          3.1 請(qǐng)說(shuō)出3個(gè)CSS瀏覽器前綴

          1. -ms- 兼容IE瀏覽器
          2. -moz- 兼容firefox
          3. -o- 兼容opera
          4. -webkit- 兼容chrome和safari

          使用demo

          div {  -ms-transform: rotate(0);  -webkit-transform: rotate(0);  -moz-transform: rotate(0);  -o-transform: rotate(0);  transform: rotate(0);}

          CSS前綴自動(dòng)補(bǔ)全:autoprefixer

          3.2 盒模型

          1. 盒模型分為標(biāo)準(zhǔn)盒模型和怪異盒模型(IE5.X和6)兩種
          2. 標(biāo)準(zhǔn)盒模型 width=content
          3. 怪異盒模型 width=content + padding + border

          已知: margin:20px; border:10px; padding:10px; width:200px; height:50px;

          ![](https://imgkr2.cn-bj.ufileos.com/5b02ca29-357c-41bd-b193-925fbf089562.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=N8j%252FT85l87RtNBPpgYnJ1lYCWIo%253D&Expires=1599734594)

          標(biāo)準(zhǔn)盒模型:1\. 占用寬:margin*2+padding*2+border*2+width=20*2+10*2+10*2+200=2802\. 占用高:margin*2+padding*2+border*2+height=20*2+10*2+10*2+50=1303\. 盒子實(shí)際寬度:padding*2+border*2+width=10*2+10*2+200=2404\. 盒子實(shí)際高度padding*2+border*2+height=10*2+10*2+50=90

          ![](https://imgkr2.cn-bj.ufileos.com/7779f321-279b-4c46-b6e5-b319a28b8549.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=iY2y7oaq2dl4L39xDbN0PO%252Bd4QI%253D&Expires=1599734605)

          怪異盒模型:1\. 占用寬:margin*2+width=20*2+200=2402\. 占用高:margin*2+height=20*2+50=903\. 盒子實(shí)際寬度:width=2004\. 盒子實(shí)際高度height=50
          

          IE8及更早版本不兼容問(wèn)題解決方案:在HTML頁(yè)面聲明

          3.3 box-sizing都有哪些值?他們的寬高分別如何計(jì)算?

          1. content-box(標(biāo)準(zhǔn)盒模型)|border-box(怪異盒模型)|inherit(繼承父元素)
          2. content-box的寬高由content決定
          3. border-box的寬高由content+padding+border決定


          4. BFC

          4.1 什么是邊界塌陷(或邊界重疊)?

          1. 兄弟div(上下margin塌陷)
          2. 父子div(如果父級(jí)div沒(méi)有padding\border\inlinecontent, 子級(jí)div的margin會(huì)向上查找邊界塌陷的div,直到找到某個(gè)標(biāo)簽包括border\padding\inline content的其中一個(gè),然后按此div進(jìn)行margin)

          4.2 什么是BFC(格式化上下文)?如何實(shí)現(xiàn)?

          BFC(塊狀格式化上下文,獨(dú)立的盒子,布局不受外部影響,但是如果同一個(gè)BFC中,同級(jí)塊狀元素的margin-top和margin-bottom會(huì)重疊)

          只要元素滿足下面的任一條件,都會(huì)觸發(fā)BFC特征。

          1. body根元素
          2. position: fixed|absolute(絕對(duì)定位元素)
          3. float(浮動(dòng)元素) 除了none
          4. overflow: hidden|auto|scroll (除了visible之外的值)
          5. display: inline-block\ table-cells\flex (具有table-的屬性)

          解決問(wèn)題:

          1. 解決邊界塌陷問(wèn)題
          2. 解決浮動(dòng)元素導(dǎo)致父元素高度塌陷問(wèn)題
          3. 解決阻止元素被浮動(dòng)元素覆蓋問(wèn)題


          4.3 多個(gè)inline元素之間會(huì)有空隙,為什么?如何解決?

          元素被當(dāng)成行內(nèi)元素排版時(shí),元素直接的空白符會(huì)被瀏覽器處理,根據(jù)white-spack的處理方式(默認(rèn)是normal,合并多余空白),Html代碼在回車換行時(shí)被轉(zhuǎn)成一個(gè)空白符,在字體不為0的情況下,空白符占據(jù)一定寬度,所以inline-block元素之間就出現(xiàn)了空隙。

          復(fù)現(xiàn)<ul>  <li>首頁(yè)</li>  <li>登陸</li>  <li>資源</li>  <li>社區(qū)</li>  <li>幫助</li></ul>

          ![](https://imgkr2.cn-bj.ufileos.com/50a6afa3-421d-4af9-9fad-48d72e69feb3.jpeg?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=fkwoshYKbb6i%252FNOezztndQzAZPk%253D&Expires=1599740520)

          解決辦法:

          1. 多個(gè)inline元素寫在同一行
          2. 將父級(jí)元素的font-size:0
          3. 給inline元素添加float的樣式
          4. 設(shè)置子元素的margin為負(fù)值
          5. 設(shè)置父元素display:table和word-spacing:-1em

          5 浮動(dòng)

          5.1 浮動(dòng)會(huì)出現(xiàn)什么問(wèn)題?

          • 浮動(dòng)會(huì)導(dǎo)致父元素高度塌陷
          • 會(huì)覆蓋其他元素

          5.2 如何清除浮動(dòng)?

          • 父元素加上overflow:hidden
          • 在浮動(dòng)元素的后面(同級(jí)),添加一個(gè)div,屬性是clear:both
          • 在父元素添加一個(gè)偽元素 .clearfix:after { display: block; height: 0; visibility: hidden; clear: both; content: '';} .clearfix{ //IE6模式下 zoom:1;}
          • 在父元素添加雙偽元素 .clearfix:before,.clearfix:after { display: table; content: '';}.clearfix:after { clear: both;}.clearfix { zoom: 1; //兼容IE6下}

          6 position都有哪些值?

          • relative 相對(duì)定位 (相對(duì)元素在文檔中的初始位置定位)
          • absolute絕對(duì)定位(相對(duì)于定位元素定位,最頂級(jí)是body)
          • fixed 固定定位 (相對(duì)窗口定位)
          • static 文檔流

          ![](https://imgkr2.cn-bj.ufileos.com/6ddb8a2b-1261-4b84-ae49-ec32c3c4b59a.webp?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=B7HTGqcB2LRMUjsAlcvjkLzn03s%253D&Expires=1599739510)

          7 CSS的選擇器

          7.1 CSS的選擇器有哪些?

          • id 選擇器
          • class 選擇器
          • tag 選擇器
          • 屬性 選擇器(a[href=""] )
          • 派生 選擇器

          7.2 優(yōu)先級(jí)高低如何判斷?

          • 不同級(jí)優(yōu)先級(jí): !important>內(nèi)聯(lián)>id>class=屬性=偽類 >標(biāo)簽=偽元素 > 通配符(*)
          • 同一級(jí)別: 后來(lái)居上 (后寫覆蓋先寫) 內(nèi)聯(lián)樣式 > 內(nèi)部樣式表 > 外部樣式表 > 導(dǎo)入樣式 @import ![](https://imgkr2.cn-bj.ufileos.com/67305866-9d2f-4f5c-9761-d42ee5ec7848.jpeg?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=%252FKfOJPBRWgQIyPnGTYRpw8J4f%252BQ%253D&Expires=1599739287)

          優(yōu)先級(jí)相同時(shí)會(huì)發(fā)生什么? 樣式被覆蓋

          7.3 列舉幾條常用的CSS reset

          • *{ margin:0; padding:0;}
          • ol, ul { list-style:none;}
          • body {line-height:1;}

          7.4 是否了解normalize?

          normalize.css是一個(gè)css reset的替代方案。

          • 保護(hù)有用的瀏覽器默認(rèn)樣式而不是完全去掉
          • 一般化樣式:為大部分html元素提供
          • 修復(fù)瀏覽器自身的bug
          • 優(yōu)化css可用性
          • 解釋代碼

          7.5 如何做到一個(gè)list中奇數(shù)和偶數(shù)行的背景色不一樣?

           ul>li:nth-child(2n+1) {    background-color: red; }ul>li:nth-child(2n) {    background-color: yellow;}
          

          7.6 如何做到一個(gè)list的第一行沒(méi)有上邊框?

           ul>li:first-child {      border-top: none;  }
          


          有夢(mèng)想的人,眼睛會(huì)發(fā)光。

          希望屏幕前的你,能夠關(guān)注我一波。接下來(lái),我會(huì)分享前端各種干貨,以及編程中的趣事。

          字加載...動(dòng)畫

          html

          正在加載中<dot>...</dot>
          

          css

          dot{ 
           display: inline-block; 
           height: 1em; 
           line-height: 1; 
           text-align: left; 
           vertical-align: -.25em; 
           overflow: hidden; 
          } 
          dot::before{ 
           display: block; 
           content: '...\A..\A.'; 
           white-space: pre-wrap; 
           animation: dot 2s infinite step-start both; 
          } 
          @keyframes dot{ 
           33% { 
           transform: translateY(-2em); 
           } 
           66% { 
           transform: translateY(-1em); 
           } 
          }
          

          如果你看上圖代碼沒(méi)有看懂,請(qǐng)看下圖,我注釋掉一行代碼,你就明白了。原來(lái)是dot元素,沿著Y軸在循環(huán)位移,隱藏掉就讓你看到了加載的動(dòng)畫效果。

          border 實(shí)現(xiàn)邊框

          當(dāng)你需要這樣一個(gè)上傳文件,按鈕時(shí),你考慮的是找設(shè)計(jì)弄個(gè)圖片,還是自己寫一個(gè)???

          其實(shí)CSS寫,也很簡(jiǎn)單的。

          <a href="javascript:;" class="upload" title="繼續(xù)上傳">添加圖片</a>
          .upload{ 
           position: relative; 
           display: inline-block; 
           width: 76px; 
           height: 76px; 
           color: #ccc; 
           border: 2px dashed; /*邊框虛線*/ 
           text-indent: -12em; /*使其文字看不到*/ 
           transition: color .25s; /*hover事件:顏色漸變動(dòng)畫*/ 
           overflow: hidden; 
           margin: 50px 100px; 
          } 
          /*用before/after偽類做 + 號(hào)樣式*/ 
          .upload:before, .upload:after{ 
           content: ''; 
           position: absolute; 
           top: 50%; 
           left: 50%; 
          } 
          .upload:hover{ 
           color: #34538b; 
          } 
          .upload::before{ 
           width: 20px; 
           border-top: 4px solid; 
           margin: -2px 0 0 -10px; 
          } 
          .upload::after{ 
           height: 20px; 
           border-left: 4px solid; 
           margin: -10px 0 0 -2px; 
          }
          

          不規(guī)則的投影 filter

          當(dāng)我們想給一個(gè)矩形或其他能用 border-radius 生成的形狀加投影時(shí),用 box-shadow 都可以解決,如下圖:

          但是,當(dāng)元素添加了一些偽元素或半透明的裝飾之后,box-shadow就有些 力不從心了,因?yàn)?border-radius 會(huì)無(wú)恥地忽視透明部分。這類情況包括下列幾種情況:

          1、半透明圖像、背景圖像、或者 border-image(比如老式的金質(zhì)像框);

          2、元素設(shè)置了點(diǎn)狀、虛線或半透明的邊框,但沒(méi)有背景(或者當(dāng) background-clip 不是 border-box 時(shí));

          3、對(duì)話氣泡,它的小尾巴通常是用偽元素生成的;

          4、幾乎所有的折角效果

          5、通過(guò) clip-path 生成的形狀。

          下面來(lái)看看這個(gè)示例: html代碼

          <div class="speech">不規(guī)則的投影</div>
          

          css樣式

          div { 
           position: relative; 
           display: inline-flex; 
           flex-direction: column; 
           justify-content: center; 
           vertical-align: bottom; 
           box-sizing: border-box; 
           width: 8em; 
           padding: .5em; 
           height: 5em; 
           margin: .6em; 
           background: #0cc071; 
           color: #fff; 
           /*box-shadow: .1em .1em .3em rgba(0,0,0,.5); 此時(shí)是偽類是沒(méi)有陰影的*/ 
           -webkit-filter: drop-shadow(.2em .2em .2em rgba(0,0,0,.5)); 
           filter: drop-shadow(.2em .2em .2em rgba(0,0,0,.5)); 
          } 
           
          .speech { 
           border-radius: .3em; 
          } 
          .speech::before { 
           content: ''; 
           position: absolute; 
           top: 1em; 
           right: -.7em; 
           width: 0; 
           height: 0; 
           border: 1em solid transparent; 
           border-left-color: #0cc071; 
           border-right-width: 0; 
          }
          

          從上圖可以看出box-shadow搞不定的,drop-shadow給搞定了。這是為什么了?

          可以很明顯的看出區(qū)別,為什么會(huì)這樣呢?在這里我用的是div標(biāo)簽,大家都知道,div標(biāo)簽是個(gè)塊標(biāo)簽,說(shuō)白了是個(gè)盒模型,指的是一塊區(qū)域,box-shadow的屬性只能添加到盒模型外面,因此內(nèi)部的東西是不會(huì)添加上的,就變成上圖的樣子,中間還是白色部分。而drop-shadow就不一樣了,他是把所有的非透明區(qū)域都做了陰影效果,就相當(dāng)于一種真正的投影。

          css 實(shí)現(xiàn)自適應(yīng)的彈框

          經(jīng)常在網(wǎng)頁(yè)中看到一些Dialog,例如有些網(wǎng)頁(yè)點(diǎn)擊登錄注冊(cè)時(shí)就會(huì)跳出一個(gè)彈框來(lái)顯示登錄注冊(cè)頁(yè)面,下面就使用 css 完成一個(gè)可以自適應(yīng),無(wú)論窗口的大小,始終能保持水平垂直居中的dialog。

          <div class="c-pupup"> 
           <div class="dialog"> 
           <div class="content"> 
           我是內(nèi)容 
           </div> 
           </div> 
          </div>
          

          css樣式

          .c-pupup{ 
           position: fixed; 
           top:0; 
           bottom: 0; 
           left: 0; 
           right: 0; 
           background: rgba(0,0,0,.5); 
           text-align: center; 
           white-space: nowrap; 
           z-index: 99; 
          } 
          .c-pupup:after{ 
           content: ''; 
           display: inline-block; 
           height: 100%; 
           vertical-align: middle; 
          } 
          .dialog{ 
           background-color: #fff; 
           display: inline-block; 
           vertical-align: middle; 
           border-radius: 6px; 
           text-align: left; 
           white-space: normal; 
           width: 400px; 
           height: 250px; 
          }
          

          總結(jié)

          這些CSS都是非常實(shí)用的,有興趣的可以收藏起來(lái),沒(méi)準(zhǔn)以后能用上。然后drop-shadow就不用去糾結(jié)IE能不能用了,因?yàn)槲覀円呀?jīng)放棄它了。

          喜歡小編或者覺(jué)得小編文章對(duì)你有幫助的,可以點(diǎn)擊一波關(guān)注哦!

          天下數(shù)據(jù)是國(guó)內(nèi)屈指可數(shù)的擁有多處海外自建機(jī)房的新型IDC服務(wù)商,被業(yè)界公認(rèn)為“中國(guó)IDC行業(yè)首選品牌”。

          天下數(shù)據(jù)與全球近120多個(gè)國(guó)家頂級(jí)機(jī)房直接合作,提供包括香港、美國(guó)、韓國(guó)、日本、臺(tái)灣、新加坡、荷蘭、法國(guó)、英國(guó)、德國(guó)、埃及、南非、巴西、印度、越南等國(guó)家和地區(qū)的服務(wù)器、云服務(wù)器的租用服務(wù),需要的請(qǐng)聯(lián)系天下數(shù)據(jù)客服!

          除提供傳統(tǒng)的IDC產(chǎn)品外,天下數(shù)據(jù)的主要職責(zé)是為大中型企業(yè)提供更精細(xì)、安全、滿足個(gè)性需求的定制化服務(wù)器解決方案,特別是在直銷、金融、視頻、流媒體、游戲、電子商務(wù)、區(qū)塊鏈、快消、物聯(lián)網(wǎng)、大數(shù)據(jù)等諸多行業(yè),為廣大客戶解決服務(wù)器租用中遇到的各種問(wèn)題。


          主站蜘蛛池模板: 久久精品综合一区二区三区| 无码AV动漫精品一区二区免费| 在线观看国产一区二三区| 亚洲日韩精品国产一区二区三区| 精品亚洲AV无码一区二区三区| 国产伦精品一区二区三区视频猫咪 | 亚洲午夜一区二区电影院| 国产自产对白一区| 无码av免费一区二区三区| 国产高清精品一区| 国产精品视频免费一区二区| 日本片免费观看一区二区| 无码人妻精品一区二区三区夜夜嗨 | 国产精品自拍一区| 国产精品特级毛片一区二区三区 | 国产一区二区三区无码免费| 国产一区二区好的精华液 | 欧洲亚洲综合一区二区三区| 午夜AV内射一区二区三区红桃视 | 后入内射国产一区二区| 免费人人潮人人爽一区二区| 日韩一区二区a片免费观看| 亚洲一区二区观看播放| 色窝窝无码一区二区三区| 色窝窝无码一区二区三区色欲| 亚洲国产精品无码久久一区二区| AV无码精品一区二区三区宅噜噜| 国产一区二区三区无码免费| 日韩一区二区精品观看| 午夜无码视频一区二区三区| 一区二区三区福利| 少妇人妻偷人精品一区二区| 一区二区三区影院| 亚洲AV无码一区二三区| 国产AV国片精品一区二区| 色窝窝无码一区二区三区色欲 | 好吊妞视频一区二区| 色婷婷av一区二区三区仙踪林| 中文字幕日韩一区| 亚洲AV福利天堂一区二区三| 久久99国产精一区二区三区|