整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          踏上編程之路的必經之路之html篇六

          踏上編程之路的必經之路之html篇六

          德經第二十二章中有一句是說“少則得,多則惑”,這句話的意思是:少取則真得,貪多則反而導致自身的混亂。結合我親身經歷,更容易理解這句話的意思。

          有一段時間,我們天都學習10個小時,這種情況一直持續了大半個月。可是效果卻幾乎等于沒有,這段時間內每天都會有大量的信息涌入你的腦袋,在學的那一刻,你感覺你已經完全會了。但是過個一兩天,你卻完全不記得你到底學過些什么,像失憶了似的。


          艾賓浩斯記憶曲線也告訴我們,大腦的記憶是一個緩慢的過程,想要對某一知識記憶深刻,就需要不斷地重復練習。直到隨時隨地拿來就用的地步,你就再也不會忘記了。

          為什么說少則得,多則惑呢?每天只學一點,練習好幾遍,把這個知識點刻到腦子里面去,這樣日積月累你會發現你已經學會了很多。每天學習很多知識點,很少時間去練習,過段時間你會發現你什么都沒有記住,到用的時候根本想不起來,還得返回頭再去學習一遍。徒增學習成本,也就是多則惑的道理。


          好了言歸正傳,今天我們來學習html中的表格和表單,這兩個可不是一個東西哦。

          表格:excel表格知道吧,橫行豎起列的那種表格。看圖:


          上面是一個9行2列的表格,在html里面也有這種表格,我們來使用html的table表格標簽來實現一個5行3列的表格。



          上圖中table標簽表示這是一個表格,tr表示一行,圖中我寫了五行,都用紅圈標注了出來,每個tr里面又包含著td,td表示列,第1行里面有3列,第2、3、4、5行每行里面都有3列。


          在瀏覽器中的效果:

          和我們想象中的樣子好像有點不一樣,沒有格子,這是因為我們沒有設置的緣故,table標簽允許你通過border屬性來設置邊框(也就是格子),那我們來給它設置一個邊框吧。


          通過給table標簽添加border="1",就可以讓表格有邊框了,來看看瀏覽器中的效果:

          還是有點別扭,我腦海里面的表格應該是和艾賓浩斯記憶曲線的那張表格一樣才對啊,現在的這個表格有點鏤空的感覺,第1行的第1列和第1行的第2列,也就是“關羽”、“男”之前有距離,如何把這個距離去掉呢?我們可以通過table標簽的cellspacing屬性把距離去掉,試一下:

          加了cellspacing="0" 屬性后,瀏覽器中的效果如下:

          當然了, table標簽的cellspacing屬性的不光可以等于0,還可以等于其他值,比如我們就是希望有距離,那么我們設置成20試一下:


          瀏覽器中的效果:

          cellspacing屬性的值應該取多少,按照你的需求來設置就好了。


          現在還有一個問題,我覺得每個單元格的太小了,也就是“關羽”這個格子的邊框和“關羽”這兩個字貼得太緊了,一點都不好看,我們可以讓他稍微有點距離,那樣看起來應該比較美觀一點。這個需求可以通過table標簽的cellpadding屬性來設置,其實也就是設置內邊距,關于內邊距的概念我們在《踏上編程之路的必經之路之html篇三》中講解過,如果忘記的同學可以返回去看一下。

          我們將cellpadding設置為10,在瀏覽器中的效果如下:

          現在整個表格感覺是豎起來的,能不能讓他感覺是橫著呢?table標簽允許你調整它的寬度,只要寬度夠了,感覺起來自然就是橫的了。我們通過table標簽的width屬性來調整表格的寬度:

          調整表格的寬度為600,瀏覽器中的效果如下:


          表格中的文字現在是左對齊,也就是靠近單元格的左邊,我們可以讓它居中,或者靠右對齊(右對齊),文字的對齊方式可以通過tr標簽的align屬性來控制:



          注意文字對齊方式,是給tr標簽(也就是table的行標簽)設置了align屬性,不是給table,不要寫錯地方了。align="center"就是讓文字居中,align="right"就是讓文字右對齊,如果不寫,默認是左對齊。


          設置了文字對齊方式后,瀏覽器中的效果如下:


          最我們整體調整一下,我需要有邊框(border="1",設置為0就是沒有邊框),單元格之間不要距離(cellspacing="0",設置成其它值就是有距離),內邊距需要5(cellpadding="5"),表格寬度需要400(width="400"),文字統一都是居中對齊(table標簽的tr標簽上面設置align="center"),整體設置后的代碼如下:



          瀏覽器中的效果如下:


          其實table標簽也有一個align屬性,它可以讓整表格在瀏覽器中的居中、靠左或者靠右對齊,有興趣的同學可以自己嘗試一下。



          最后提醒一句,代碼中的各種標簽和標簽的屬性還有單雙引號,都必須是英文的,如果你寫成中文的,是不正確的。

          舉個例子:




          良好的行動力,是成功的一半,動手練起來。

          見瀏覽器兼容性問題與解決方案?

          參考答案

          (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補丁和內補丁不同

          問題癥狀:隨便寫幾個標簽,不加樣式控制的情況下,各自的margin 和padding差異較大。

          碰到頻率:100%

          解決方案:CSS里 {margin:0;padding:0;}

          備注:這個是最常見的也是最易解決的一個瀏覽器兼容性問題,幾乎所有的CSS文件開頭都會用通配符來設置各個標簽的內外補丁是0。

          (2)瀏覽器兼容問題二:塊屬性標簽float后,又有橫行的margin情況下,在IE6顯示margin比設置的大

          問題癥狀:常見癥狀是IE6中后面的一塊被頂到下一行

          碰到頻率:90%(稍微復雜點的頁面都會碰到,float布局最常見的瀏覽器兼容問題)

          解決方案:在float的標簽樣式控制中加入 display:inline;將其轉化為行內屬性

          備注:我們最常用的就是div+CSS布局了,而div就是一個典型的塊屬性標簽,橫向布局的時候我們通常都是用div float實現的,橫向的間距設置如果用margin實現,這就是一個必然會碰到的兼容性問題。

          (3)瀏覽器兼容問題三:設置較小高度標簽(一般小于10px),在IE6,IE7,遨游中高度超出自己設置高度

          問題癥狀:IE6、7和遨游里這個標簽的高度不受控制,超出自己設置的高度

          碰到頻率:60%

          解決方案:給超出高度的標簽設置overflow:hidden;或者設置行高line-height 小于你設置的高度。

          備注:這種情況一般出現在我們設置小圓角背景的標簽里。出現這個問題的原因是IE8之前的瀏覽器都會給標簽一個最小默認的行高的高度。即使你的標簽是空的,這個標簽的高度還是會達到默認的行高。

          (4)瀏覽器兼容問題四:行內屬性標簽,設置display:block后采用float布局,又有橫行的margin的情況,IE6間距bug

          問題癥狀:IE6里的間距比超過設置的間距

          碰到幾率:20%

          解決方案 : 在display:block;后面加入display:inline;display:table;

          備注:行內屬性標簽,為了設置寬高,我們需要設置display:block;(除了input標簽比較特殊)。在用float布局并有橫向的margin后,在IE6下,他就具有了塊屬性float后的橫向margin的bug。不過因為它本身就是行內屬性標簽,所以我們再加上display:inline的話,它的高寬就不可設了。這時候我們還需要在display:inline后面加入display:talbe。

          (5) 瀏覽器兼容問題五:圖片默認有間距

          問題癥狀:幾個img標簽放在一起的時候,有些瀏覽器會有默認的間距,加了問題一中提到的通配符也不起作用。

          碰到幾率:20%

          解決方案:使用float屬性為img布局

          備注 : 因為img標簽是行內屬性標簽,所以只要不超出容器寬度,img標簽都會排在一行里,但是部分瀏覽器的img標簽之間會有個間距。去掉這個間距使用float是正道。(我的一個學生使用負margin,雖然能解決,但負margin本身就是容易引起瀏覽器兼容問題的用法,所以我禁止他們使用)

          (6) 瀏覽器兼容問題六:標簽最低高度設置min-height不兼容

          問題癥狀:因為min-height本身就是一個不兼容的CSS屬性,所以設置min-height時不能很好的被各個瀏覽器兼容

          碰到幾率:5%

          解決方案:如果我們要設置一個標簽的最小高度200px,需要進行的設置為:{min-height:200px; height:auto !important;

          height:200px; overflow:visible;}

          備注:在B/S系統前端開時,有很多情況下我們又這種需求。當內容小于一個值(如300px)時。容器的高度為300px;當內容高度大于這個值時,容器高度被撐高,而不是出現滾動條。這時候我們就會面臨這個兼容性問題。

          (7)瀏覽器兼容問題七:透明度的兼容CSS設置

          一般在ie中用的是filter:alpha(opacity=0);這個屬性來設置div或者是塊級元素的透明度,而在firefox中,一般就是直接使用opacity:0,對于兼容的,一般的做法就是在書寫css樣式的將2個都寫上就行,就能實現兼容

          列出display的值并說明他們的作用?

          參考答案

          display: none | inline | block |

          list-item | inline-block | table | inline-table |

          table-caption | table-cell | table-row | table-row-group | table-column |

          table-column-group | table-footer-group | table-header-group | run-in | box |

          inline-box | flexbox | inline-flexbox | flex | inline-flex

          默認值:inline

          none: 隱藏對象。與visibility屬性的hidden值不同,其不為被隱藏的對象保留其物理空間

          inline: 指定對象為內聯元素。

          block: 指定對象為塊元素。

          list-item:指定對象為列表項目。

          inline-block: 指定對象為內聯塊元素。(CSS2)

          table: 指定對象作為塊元素級的表格。類同于html標簽<table>(CSS2)

          inline-table:指定對象作為內聯元素級的表格。類同于html標簽<table>(CSS2)

          table-caption:指定對象作為表格標題。類同于html標簽<caption>(CSS2)

          table-cell:指定對象作為表格單元格。類同于html標簽<td>(CSS2)

          table-row:指定對象作為表格行。類同于html標簽<tr>(CSS2)

          table-row-group:指定對象作為表格行組。類同于html標簽<tbody>(CSS2)

          table-column:指定對象作為表格列。類同于html標簽<col>(CSS2)

          table-column-group: 指定對象作為表格列組顯示。類同于html標簽<colgroup>(CSS2)

          table-header-group: 指定對象作為表格標題組。類同于html標簽<thead>(CSS2)

          table-footer-group: 指定對象作為表格腳注組。類同于html標簽<tfoot>(CSS2)

          run-in:根據上下文決定對象是內聯對象還是塊級對象。(CSS3)

          box:將對象作為彈性伸縮盒顯示。(伸縮盒最老版本)(CSS3)

          inline-box:將對象作為內聯塊級彈性伸縮盒顯示。(伸縮盒最老版本)(CSS3)

          flexbox:將對象作為彈性伸縮盒顯示。(伸縮盒過渡版本)(CSS3)

          inline-flexbox:將對象作為內聯塊級彈性伸縮盒顯示。(伸縮盒過渡版本)(CSS3)

          flex:將對象作為彈性伸縮盒顯示。(伸縮盒最新版本)(CSS3)

          inline-flex:將對象作為內聯塊級彈性伸縮盒顯示。(伸縮盒最新版本)(CSS3)

          如何居中div, 如何居中一個浮動元素?

          參考答案

          (1)、非浮動元素居中:可以設置margin:0 auto 令其居中, 定位 ,父級元素text-algin:center等等

          (2)、浮動元素居中:

          方法一:設置當前div的寬度,然后設置margin-left:50%; position:relative; left:-250px;其中的left是寬度的一半。

          方法二:父元素和子元素同時左浮動,然后父元素相對左移動50%,再然后子元素相對左移動-50%。

          方法三:position定位等等。

          CSS中link 和@import 的區別是?

          參考答案

          (1)、link屬于HTML標簽,而@import是CSS提供的;

          (2)、頁面被加載的時,link會同時被加載,而@import引用的CSS會等到頁面被加載完再加載;

          (3)、import只在IE5以上才能識別,而link是HTML標簽,無兼容問題;

          (4)、link方式的樣式的權重高于@import的權重.

          請列舉幾種清除浮動的方法(至少兩種)?

          參考答案

          (1)、父級div定義 height

          原理:父級div手動定義height,就解決了父級div無法自動獲取到高度的問題。

          優點:簡單、代碼少、容易掌握

          缺點:只適合高度固定的布局,要給出精確的高度,如果高度和父級div不一樣時,會產生問題

          建議:不推薦使用,只建議高度固定的布局時使用

          (2)、結尾處加空div標簽 clear:both

          原理:添加一個空div,利用css提高的clear:both清除浮動,讓父級div能自動獲取到高度

          優點:簡單、代碼少、瀏覽器支持好、不容易出現怪問題

          缺點:不少初學者不理解原理;如果頁面浮動布局多,就要增加很多空div,讓人感覺很不好

          建議:不推薦使用,但此方法是以前主要使用的一種清除浮動方法

          (3)、父級div定義

          偽類:after 和 zoom

          原理:IE8以上和非IE瀏覽器才支持:after,原理和方法2有點類似,zoom(IE轉有屬性)可解決ie6,ie7浮動問題

          優點:瀏覽器支持好、不容易出現怪問題(目前:大型網站都有使用,如:騰迅,網易,新浪等等)

          缺點:代碼多、不少初學者不理解原理,要兩句代碼結合使用才能讓主流瀏覽器都支持。

          建議:推薦使用,建議定義公共類,以減少CSS代碼。

          (4)、父級div定義 overflow:hidden

          原理:必須定義width或zoom:1,同時不能定義height,使用overflow:hidden時,瀏覽器會自動檢查浮動區域的高度

          優點:簡單、代碼少、瀏覽器支持好

          缺點:不能和position配合使用,因為超出的尺寸的會被隱藏。

          建議:只推薦沒有使用position或對overflow:hidden理解比較深的朋友使用。

          (5)、父級div定義 overflow:auto

          原理:必須定義width或zoom:1,同時不能定義height,使用overflow:auto時,瀏覽器會自動檢查浮動區域的高度

          優點:簡單、代碼少、瀏覽器支持好

          缺點:內部寬高超過父級div時,會出現滾動條。

          建議:不推薦使用,如果你需要出現滾動條或者確保你的代碼不會出現滾動條就使用吧。

          block,inline和inlinke-block細節對比?

          參考答案

          ?

          display:block

          a、block元素會獨占一行,多個block元素會各自新起一行。默認情況下,block元素寬度自動填滿其父元素寬度。

          b、block元素可以設置width,height屬性。塊級元素即使設置了寬度,仍然是獨占一行。

          c、block元素可以設置margin和padding屬性。

          ? display:inline

          a、inline元素不會獨占一行,多個相鄰的行內元素會排列在同一行里,直到一行排列不下,才會新換一行,其寬度隨元素的內容而變化。

          b、inline元素設置width,height屬性無效。

          c、inline元素的margin和padding屬性,水平方向的padding-left, padding-right, margin-left,

          margin-right都產生邊距效果;但豎直方向的padding-top, padding-bottom, margin-top,

          margin-bottom不會產生邊距效果。

          ? display:inline-block

          a、簡單來說就是將對象呈現為inline對象,但是對象的內容作為block對象呈現。之后的內聯對象會被排列在同一行內。比如我們可以給一個link(a元素)inline-block屬性值,使其既具有block的寬度高度特性又具有inline的同行特性。

          補充說明

          a、一般我們會用display:block,display:inline或者display:inline-block來調整元素的布局級別,其實display的參數遠遠不止這三種,僅僅是比較常用而已。

          b、IE(低版本IE)本來是不支持inline-block的,所以在IE中對內聯元素使用display:inline-block,理論上IE是不識別的,但使用display:inline-block在IE下會觸發layout,從而使內聯元素擁有了display:inline-block屬性的表象。

          什么叫優雅降級和漸進增強?

          參考答案

          優雅降級: Web站點在所有新式瀏覽器中都能正常工作,如果用戶使用的是老式瀏覽器,則代碼會檢查以確認它們是否能正常工作。由于IE獨特的盒模型布局問題,針對不同版本的IE的hack實踐過優雅降級了,為那些無法支持功能的瀏覽器增加候選方案,使之在舊式瀏覽器上以某種形式降級體驗卻不至于完全失效.

          漸進增強: 從被所有瀏覽器支持的基本功能開始,逐步地添加那些只有新式瀏覽器才支持的功能,向頁面增加無害于基礎瀏覽器的額外樣式和功能的。當瀏覽器支持時,它們會自動地呈現出來并發揮作用。

          說說浮動元素會引起的問題和你的解決辦法

          參考答案

          問題:

          (1)父元素的高度無法被撐開,影響與父元素同級的元素

          (2)與浮動元素同級的非浮動元素會跟隨其后

          (3)若非第一個元素浮動,則該元素之前的元素也需要浮動,否則會影響頁面顯示的結構

          解決方法:

          使用CSS中的clear:both;屬性來清除元素的浮動可解決問題(2)、(3),對于問題(1),添加如下樣式,給父元素添加clearfix樣式:

          .clearfix:after{content: ".";display: block;height: 0;clear:

          both;visibility: hidden;}

          .clearfix{display: inline-block;} /* for IE/Mac */

          清除浮動的幾種方法:

          (1)、額外標簽法,<div

          style="clear:both;"></div>(缺點:不過這個辦法會增加額外的標簽使HTML結構看起來不夠簡潔。)

          (2)、使用after偽類

          parent:after{

          content:" ";

          height:0;

          visibility:hidden;

          display:block;

          clear:both;

          }

          (3)、浮動外部元素

          (4)、設置overflow為hidden或者auto

          你有哪些性能優化的方法?

          參考答案

          回答一:

          (1)、減少http請求次數:CSS Sprites, JS、CSS源碼壓縮、圖片大小控制合適;網頁Gzip,CDN托管,data緩存

          ,圖片服務器。

          (2)、前端模板 JS+數據,減少由于HTML標簽導致的帶寬浪費,前端用變量保存AJAX請求結果,每次操作本地變量,不用請求,減少請求次數

          (3)、用innerHTML代替DOM操作,減少DOM操作次數,優化javascript性能。

          (4)、當需要設置的樣式很多時設置className而不是直接操作style。

          (5)、少用全局變量、緩存DOM節點查找的結果。減少IO讀取操作。

          (6)、避免使用CSS Expression(css表達式)又稱Dynamic properties(動態屬性)。

          (7)、圖片預加載,將樣式表放在頂部,將腳本放在底部加上時間戳。

          回答二:

          (1)、減少HTTP請求次數

          (2)、使用CDN

          (3)、避免空的src和href

          (4)、為文件頭指定Expires

          (5)、使用gzip壓縮內容

          (6)、把CSS放到頂部

          (7)、把JS放到底部

          (8)、避免使用CSS表達式

          (9)、將CSS和JS放到外部文件中

          (10)、避免跳轉

          (11)、可緩存的AJAX

          (12)、使用GET來完成AJAX請求

          為什么要初始化CSS樣式?

          參考答案

          因為瀏覽器的兼容問題,不同瀏覽器對有些標簽的默認值是不同的,如果沒對CSS初始化往往會出現瀏覽器之間的頁面顯示差異。

          當然,初始化樣式會對SEO有一定的影響,但魚和熊掌不可兼得,但力求影響最小的情況下初始化。

          最簡單的初始化方法就是: {padding: 0; margin: 0;} (不建議)

          解釋下浮動和它的工作原理?清除浮動的技巧?

          參考答案

          浮動元素脫離文檔流,不占據空間。浮動元素碰到包含它的邊框或者浮動元素的邊框停留。

          (1)、使用空標簽清除浮動。

          這種方法是在所有浮動標簽后面添加一個空標簽 定義css clear:both. 弊端就是增加了無意義標簽。

          (2)、使用overflow。

          給包含浮動元素的父標簽添加css屬性 overflow:auto; zoom:1; zoom:1用于兼容IE6。

          (3)、使用after偽對象清除浮動。

          該方法只適用于非IE瀏覽器。具體寫法可參照以下示例。使用中需注意以下幾點。一、該方法中必須為需要清除浮動元素的偽對象中設置height:0,否則該元素會比實際高出若干像素;

          CSS樣式表根據所在網頁的位置,可分為哪幾種樣式表?

          參考答案

          行內樣式表,內嵌樣式表,外部樣式表

          談談你對CSS中刻度的認識?

          參考答案

          在CSS中刻度是用于設置元素尺寸的單位。

          a、特殊值0可以省略單位。例如:margin:0px可以寫成margin:0

          b、一些屬性可能允許有負長度值,或者有一定的范圍限制。如果不支持負長度值,那應該變換到能夠被支持的最近的一個長度值。

          c、長度單位包括:相對單位和絕對單位。

          相對長度單位有: em, ex, ch, rem, vw, vh, vmax,

          vmin

          絕對長度單位有: cm, mm, q, in, pt, pc, px

          絕對長度單位:1in=2.54cm=25.4 mm=72pt=6pc=96px

          文本相對長度單位:em

          相對長度單位是相對于當前對象內文本的字體尺寸,如當前對行內文本的字體尺寸未被人為設置,則相對于瀏覽器的默認字體尺寸。(相對父元素的字體大小倍數)

          body { font-size: 14px; }

          h1 { font-size: 16px; }

          .size1 p { font-size: 1em; }

          .size2 p { font-size: 2em; }

          .size3 p { font-size: 3em; }

          文本相對長度單位:rem

          rem是CSS3新增的一個相對單位(root em,根em),相對于根元素(即html元素)font-size計算值的倍數

          只相對于根元素的大小

          瀏覽器的默認字體大小為16像素,瀏覽器默認樣式也稱為user agent stylesheet,就是所有瀏覽器內置的默認樣式,多數是可以被修改的,但chrome不能直接修改,可以被用戶樣式覆蓋。

          請你說說em與rem的區別?

          參考答案

          rem

          rem是CSS3新增的一個相對單位(root em,根em),相對于根元素(即html元素)font-size計算值的倍數

          只相對于根元素的大小

          rem(font size of the root element)是指相對于根元素的字體大小的單位。簡單的說它就是一個相對單位。

          作用:利用rem可以實現簡單的響應式布局,可以利用html元素中字體的大小與屏幕間的比值設置font-size的值實現當屏幕分辨率變化時讓元素也變化,以前的天貓tmall就使用這種辦法

          em

          文本相對長度單位。相對于當前對象內文本的字體尺寸。如當前對行內文本的字體尺寸未被人為設置,則相對于瀏覽器的默認字體尺寸(默認16px)。(相對父元素的字體大小倍數)

          em(font size of the element)是指相對于父元素的字體大小的單位。它與rem之間其實很相似,區別在。(相對是的HTML元素的字體大,默認16px)

          em與rem的重要區別: 它們計算的規則一個是依賴父元素另一個是依賴根元素計算

          請你說說box-sizing屬性的的用法?

          參考答案

          設置或檢索對象的盒模型組成模式

          a、box-sizing:content-box: padding和border不被包含在定義的width和height之內。對象的實際寬度等于設置的width值和border、padding之和,即( Element width=width + border + padding,但占有頁面位置還要加上margin ) 此屬性表現為標準模式下的盒模型。

          b、box-sizing:border-box: padding和border被包含在定義的width和height之內。對象的實際寬度就等于設置的width值,即使定義有border和padding也不會改變對象的實際寬度,即( Element width=width ) 此屬性表現為怪異模式下的盒模型。

          瀏覽器標準模式和怪異模式之間的區別是什么?

          參考答案

          在“標準模式”(Standards Mode) 頁面按照 HTML 與 CSS 的定義渲染,而在“怪異模式”(Quirks Mode)就是瀏覽器為了兼容很早之前針對舊版本瀏覽器設計、并未嚴格遵循W3C 標準的網頁而產生的一種頁面渲染模式。瀏覽器基于頁面中文件類型描述的存在以決定采用哪種渲染模式;如果存在一個完整的DOCTYPE則瀏覽器將會采用標準模式,而如果它缺失則瀏覽器將會采用怪異模式。

          強烈建議閱讀加深理解:怪異模式(Quirks Mode)對 HTML 頁面的影響,這里列下瀏覽器標準模式和怪異模式的區別:

          (1)盒模型:

          在怪異模式下,盒模型為IE盒模型而非標準模式下的W3C 盒模型:在 IE 盒模型中,

          box width=content width + padding left + padding right + border left + border

          right,

          box height=content height + padding top + padding bottom + border top +

          border bottom。

          而在 W3C 標準的盒模型中,box 的大小就是 content 的大小。

          (2)圖片元素的垂直對齊方式:

          對于inline元素和table-cell元素,在 IE Standards Mode 下 vertical-align 屬性默認取值為baseline。而當inline元素的內容只有圖片時,如table的單元格table-cell。在 IE Quirks Mode 下,table單元格中的圖片的 vertical-align 屬性默認為bottom,因此,在圖片底部會有幾像素的空間。

          (3)<table>元素中的字體:

          CSS 中,描述font的屬性有font-family,font-size,font-style,font-weigh,上述屬性都是可以繼承的。而在IE Quirks Mode 下,對于table 元素,字體的某些屬性將不會從body或其他封閉元素繼承到table中,特別是 font-size屬性。

          (4)

          內聯元素的尺寸:

          在 IE Standards Mode 下,non-replaced inline 元素無法自定義大小,而在IE Quirks Mode 下,定義這些元素的width和height 屬性,能夠影響該元素顯示的大小尺寸。

          (5)

          元素的百分比高度:

          a、CSS 中對于元素的百分比高度規定如下,百分比為元素包含塊的高度,不可為負值。如果包含塊的高度沒有顯式給出,該值等同于“auto”(即取決于內容的高度)。所以百分比的高度必須在父元素有聲明高度時使用。

          b、當一個元素使用百分比高度時,在IE Standards Mode 下,高度取決于內容的變化,而在Quirks Mode 下,百分比高度則被正確應用。

          (6)

          元素溢出的處理:

          在 IE Standard Mode 下,overflow取默認值 visible,即溢出可見,這種情況下,溢出內容不會被裁剪,呈現在元素框外。而在Quirks Mode 下,該溢出被當做擴展box來對待,即元素的大小由其內容決定,溢出不會被裁剪,元素框自動調整,包含溢出內容。

          怪異Quirks模式是什么,它和標準Standards模式有什么區別?

          參考答案

          從IE6開始,引入了Standards模式,標準模式中,瀏覽器嘗試給符合標準的文檔在規范上的正確處理達到在指定瀏覽器中的程度。

          在IE6之前CSS還不夠成熟,所以IE5等之前的瀏覽器對CSS的支持很差, IE6將對CSS提供更好的支持,然而這時的問題就來了,因為有很多頁面是基于舊的布局方式寫的,而如果IE6 支持CSS則將令這些頁面顯示不正常,如何在即保證不破壞現有頁面,又提供新的渲染機制呢?

          在寫程序時我們也會經常遇到這樣的問題,如何保證原來的接口不變,又提供更強大的功能,尤其是新功能不兼容舊功能時。遇到這種問題時的一個常見做法是增加參數和分支,即當某個參數為真時,我們就使用新功能,而如果這個參數 不為真時,就使用舊功能,這樣就能不破壞原有的程序,又提供新功能。IE6也是類似這樣做的,它將DTD當成了這個“參數”,因為以前的頁面大家都不會去寫DTD,所以IE6就假定 如果寫了DTD,就意味著這個頁面將采用對CSS支持更好的布局,而如果沒有,則采用兼容之前的布局方式。這就是Quirks模式(怪癖模式,詭異模式,怪異模式)。

          區別:總體會有布局、樣式解析和腳本執行三個方面的區別。

          盒模型: 在W3C標準中,如果設置一個元素的寬度和高度,指的是元素內容的寬度和高度,而在Quirks 模式下,IE的寬度和高度還包含了padding和border。

          設置行內元素的高寬: 在Standards模式下,給<span>等行內元素設置wdith和height都不會生效,而在quirks模式下,則會生效。

          設置百分比的高度: 在standards模式下,一個元素的高度是由其包含的內容來決定的,如果父元素沒有設置百分比的高度,子元素設置一個百分比的高度是無效的用margin:0 auto設置水平居中:使用margin:0 auto在standards模式下可以使元素水平居中,但在quirks模式下卻會失效。

          (還有很多,答出什么不重要,關鍵是看他答出的這些是不是自己經驗遇到的,還是說都是看文章看的,甚至完全不知道。)

          說說你對邊距折疊的理解?

          參考答案

          外邊距折疊: 相鄰的兩個或多個外邊距 (margin) 在垂直方向會合并成一個外邊距(margin)

          相鄰: 沒有被非空內容、padding、border 或 clear 分隔開的margin特性. 非空內容就是說這元素之間要么是兄弟關系或者父子關系

          垂直方向外邊距合并計算:

          a、參加折疊的margin都是正值:取其中 margin 較大的值為最終 margin 值。

          b、參與折疊的margin 都是負值:取的是其中絕對值較大的,然后,從0 位置,負向位移。

          c、參與折疊的margin 中有正值,有負值:先取出負 margin 中絕對值中最大的,然后,和正margin 值中最大的 margin 相加。

          內聯與塊級標簽有何區別?

          參考答案

          Html中的標簽默認主要分為兩大類型,一類為塊級元素,另一類是行內元素,許多人也把行內稱為內聯,所以叫內聯元素,其實就是一個意思。為了很好的布局,必須理解它們間的區別。

          說說隱藏元素的方式有哪些?

          參考答案

          a、使用CSS的display:none,不會占有原來的位置

          b、使用CSS的visibility:hidden,會占有原來的位置

          c、使用HTML5中的新增屬性hidden="hidden",不會占有原來的位置

          為什么重置瀏覽器默認樣式,如何重置默瀏覽器認樣式?

          參考答案

          每種瀏覽器都有一套默認的樣式表,即user agent stylesheet,網頁在沒有指定的樣式時,按瀏覽器內置的樣式表來渲染。這是合理的,像word中也有一些預留樣式,可以讓我們的排版更美觀整齊。不同瀏覽器甚至同一瀏覽器不同版本的默認樣式是不同的。但這樣會有很多兼容問題。

          a、最簡單的辦法:(不推薦使用)*{margin: 0;padding: 0;}。

          b、使用CSSReset可以將所有瀏覽器默認樣式設置成一樣。

          c、normalize:也許有些cssreset過于簡單粗暴,有點傷及無辜,normalize是另一個選擇。bootstrap已經引用該css來重置瀏覽器默認樣式,比普通的cssreset要精細一些,保留瀏覽器有用的默認樣式,支持包括手機瀏覽器在內的超多瀏覽器,同時對HTML5元素、排版、列表、嵌入的內容、表單和表格都進行了一般化。

          天貓 使用的css reset重置瀏覽器默認樣式:

          @charset

          "gb2312";body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd,

          ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td

          {margin: 0;padding: 0}body, button, input, select, textarea

          {font: 12px "microsoft yahei";line-height: 1.5;-ms-overflow-style: scrollbar}h1,

          h2, h3, h4, h5, h6 {font-size: 100%}ul, ol {list-style: none}a

          {text-decoration: none;cursor:pointer}a:hover

          {text-decoration: underline}img {border: 0}button, input, select,

          textarea {font-size: 100%}table {border-collapse: collapse;border-spacing: 0}.clear

          {clear:both}.fr {float:right}.fl {float:left}.block

          {display:block;text-indent:-999em}

          談談你對BFC與IFC的理解?(是什么,如何產生,作用)

          參考答案

          (1)、什么是BFC與IFC

          a、BFC(Block Formatting Context)即“塊級格式化上下文”, IFC(Inline Formatting Context)即行內格式化上下文。常規流(也稱標準流、普通流)是一個文檔在被顯示時最常見的布局形態。一個框在常規流中必須屬于一個格式化上下文,你可以把BFC想象成一個大箱子,箱子外邊的元素將不與箱子內的元素產生作用。

          b、BFC是W3C CSS 2.1 規范中的一個概念,它決定了元素如何對其內容進行定位,以及與其他元素的關系和相互作用。當涉及到可視化布局的時候,Block Formatting Context提供了一個環境,HTML元素在這個環境中按照一定規則進行布局。一個環境中的元素不會影響到其它環境中的布局。比如浮動元素會形成BFC,浮動元素內部子元素的主要受該浮動元素影響,兩個浮動元素之間是互不影響的。也可以說BFC就是一個作用范圍。

          c、在普通流中的Box(框) 屬于一種 formatting context(格式化上下文) ,類型可以是 block ,或者是 inline ,但不能同時屬于這兩者。并且,Block boxes(塊框) 在 block formatting context(塊格式化上下文) 里格式化, Inline boxes(塊內框) 則在 Inline Formatting Context(行內格式化上下文) 里格式化。

          (2)、如何產生BFC

          當一個HTML元素滿足下面條件的任何一點,都可以產生Block Formatting Context:

          a、float的值不為none

          b、overflow的值不為visible

          c、display的值為table-cell, table-caption, inline-block中的任何一個

          d、position的值不為relative和static

          CSS3觸發BFC方式則可以簡單描述為:在元素定位非static,relative的情況下觸發,float也是一種定位方式。

          (3)、BFC的作用與特點

          a、不和浮動元素重疊,清除外部浮動,阻止浮動元素覆蓋

          如果一個浮動元素后面跟著一個非浮動的元素,那么就會產生一個重疊的現象。常規流(也稱標準流、普通流)是一個文檔在被顯示時最常見的布局形態,當float不為none時,position為absolute、fixed時元素將脫離標準流。

          說說你對頁面中使用定位(position)的理解?

          參考答案

          使用css布局position非常重要,語法如下:

          position:static | relative | absolute | fixed |

          center | page | sticky

          默認值:static,center、page、sticky是CSS3中新增加的值。

          (1)、static

          可以認為靜態的,默認元素都是靜態的定位,對象遵循常規流。此時4個定位偏移屬性不會被應用,也就是使用left,right,bottom,top將不會生效。

          (2)、relative

          相對定位,對象遵循常規流,并且參照自身在常規流中的位置通過top,right,bottom,left這4個定位偏移屬性進行偏移時不會影響常規流中的任何元素。

          (3)、absolute

          a、絕對定位,對象脫離常規流,此時偏移屬性參照的是離自身最近的定位祖先元素,如果沒有定位的祖先元素,則一直回溯到body元素。盒子的偏移位置不影響常規流中的任何元素,其margin不與其他任何margin折疊。

          b、元素定位參考的是離自身最近的定位祖先元素,要滿足兩個條件,第一個是自己的祖先元素,可以是父元素也可以是父元素的父元素,一直找,如果沒有則選擇body為對照對象。第二個條件是要求祖先元素必須定位,通俗說就是position的屬性值為非static都行。

          (4)、fixed

          固定定位,與absolute一致,但偏移定位是以窗口為參考。當出現滾動條時,對象不會隨著滾動。

          (5)、center

          與absolute一致,但偏移定位是以定位祖先元素的中心點為參考。盒子在其包含容器垂直水平居中。(CSS3)

          (6)、page

          與absolute一致。元素在分頁媒體或者區域塊內,元素的包含塊始終是初始包含塊,否則取決于每個absolute模式。(CSS3)

          (7)、sticky

          對象在常態時遵循常規流。它就像是relative和fixed的合體,當在屏幕中時按常規流排版,當卷動到屏幕外時則表現如fixed。該屬性的表現是現實中你見到的吸附效果。(CSS3)

          如何解決多個元素重疊問題?

          參考答案

          使用z-index屬性可以設置元素的層疊順序

          z-index屬性

          語法:z-index: auto | <integer>

          默認值:auto

          適用于:定位元素。即定義了position為非static的元素

          取值:

          auto:元素在當前層疊上下文中的層疊級別是0。元素不會創建新的局部層疊上下文,除非它是根元素。

          整數: 用整數值來定義堆疊級別。可以為負值。 說明:

          檢索或設置對象的層疊順序。

          z-index用于確定元素在當前層疊上下文中的層疊級別,并確定該元素是否創建新的局部層疊上下文。

          當多個元素層疊在一起時,數字大者將顯示在上面。

          arkdown 從誕生之初,就因為其輕量、簡便,而被內容創造者所青睞。然而并不是所有的地方都支持直接書寫并渲染 Markdown 格式的文檔,也并不是所有利用 Markdown 生成內容都是那么方便。接下來,我來介紹下面這幾個在線的小工具,來幫助你更方便地排版 Markdown 文章。

          Markdown Tables Generator

          ? 鏈接:https://www.tablesgenerator.com/markdown_tables

          在 Markdown 中新建一個表格確實不是件輕松的事情。這個 Markdown Tables Generator 可以方便的為我們創建 Markdown 格式的表格文本,我們只需要指定表格的內容即可。

          Markdown Tables Generator

          要知道,Markdown Tables Generator 是一個「所見即所得」的交互方式,因此我們創建表格的方式就非常直觀清晰。同時,Markdown Tables Generator 還能夠直接幫我們設置某列的左對齊、居中和右對齊等樣式。我們生成成功一個表格之后,直接將下方的 Markdown 純文本拷貝,就能粘貼到我們所使用的 Markdown 編輯器中了。

          LaTeX、HTML、純文本等表格的繪制

          不得不再說一下,實際上這個 Tables Generator 這個網站除了支持生成 Markdown 格式的表格,還能幫我們方便的繪制 LaTeX、HTML、純文本和 MediaWiki 格式的表格。特別是 LaTeX 格式的復雜表格,利用 Tables Generator 這個網站生成的操作過程太人性化了,非常推薦。

          Paste to Markdown

          鏈接:https://euangoddard.github.io/clipboard2markdown

          Paste to Markdown 是一個能幫我們將復制的富文本轉換為 Markdown 格式的純文本的網站。比方說,如果我們在一個網頁上面看到了一篇文章,并希望能夠直接保存為 Markdown 格式至本地,我們可以首先通過瀏覽器的閱讀模式將原網頁格式化,從而去除沒有用的元素并正確排版,之后再通過 Paste to Markdown 將原網頁或瀏覽器閱讀模式的富文本內容轉換為 Markdown 格式的內容。

          Paste to Markdown

          通過 Paste to Markdown,我們不僅僅能成功將我們常用的加粗、斜體、刪除線、標題和列表等富文本元素全部轉換為 Markdown 格式的內容,還可以直接地將我們復制的圖片的鏈接(即「圖片外鏈」)轉換為標準 Markdown 圖片引用的格式(比如:![](path/to/image)),這樣的格式化處理讓我們保存網頁文章至本地的操作成本大大降低。

          Markdown Here

          鏈接:https://markdown-here.com/

          Markdown Here 是一個相對知名的瀏覽器 Markdown 擴展插件。其最方便的地方就在于:能夠將我們在任意位置書寫的 Markdown 格式的純文本轉換為相應的富文本內容。這尤其方便了我們在撰寫郵件的時候進行排版,簡單的 Markdown 讓我們高效完成郵件的主體內容,之后通過 Markdown Here 插件一鍵轉換,就能看到已經排版好的郵件內容。

          Markdown Here 撰寫郵件

          Markdown Here 這個瀏覽器插件支持 Chrome、Safari、Firefox 等絕大多數瀏覽器,我們可以直接在 這個頁面 下載你所使用的瀏覽器的插件。同時,Markdown Here 也開源在 GitHub 上面:adam-p/markdown-here

          WeChat Format

          鏈接:https://lab.lyric.im/wxformat

          WeChat Format 是一個開源的、專為微信公眾號排版準備的在線 Markdown 編輯器。相信大家如果有微信公眾號排版使用的經驗,就一定體驗過糟糕的微信公眾號后臺「所見即所得」編輯器。在秀米、135 等專門為微信公眾號排版而生的樣式編輯器霸道橫行的時代,如果我們能利用 Markdown 直接排版微信公眾號,那豈不是又方便又舒服。

          WeChat Format

          傳統的 Markdown 編輯器的輸出預覽其實也是可以直接復制粘貼到微信公眾號后臺排版工具中的,只是微信公眾號并不允許我們添加除了公眾號文章以外的鏈接。WeChat Format 很好的解決了這一問題:文章中的全部鏈接都以文章尾注的形式加在了文章末尾,這樣既方便了我們直接利用 Markdown 排版文章,還能讓讀者輕松查看相應的鏈接。

          目前 WeChat Format 已經將源代碼開源于 lyricat/wechat-format,更加詳細的介紹和說明文檔位于「花三小時寫這個工具,只為一分鐘拯救公眾號排版」,我們如果希望自定義排版的樣式,由于 WeChat Format 已經開源了全部源碼,因此我們當然可以直接自己部署整個項目,并通過修改 CSS 來自定義排版樣式。

          Mermaid JS

          ?? 鏈接:https://mermaidjs.github.io/mermaid-live-editor/#/

          Mermaid JS 是一個專為流程圖、時序圖和甘特圖等圖表的繪制準備的渲染引擎。雖然 Mermaid 渲染引擎的語法相對比較復雜,但是經過簡單的學習我們就可以利用 Mermaid 直接在 Markdown 里面繪制流程圖、時序圖和甘特圖等相對專業的圖表。

          Mermaid 渲染器

          這里我推薦這個 Mermaid JS 在線編輯器,我們可以直接使用 Mermaid 語法繪制相應的流程圖、時序圖和甘特圖等圖標,并將渲染出來的圖表以 SVG 的格式下載到本地。

          在線 Markdown 編輯器

          說完了上面這幾個 Markdown 相關的網頁小工具,接下來我再來推薦兩個好用的在線 Markdown 編輯器。

          StackEdit

          鏈接: https://stackedit.io/app

          StackEdit 是一個非常優質的在線 Markdown 編輯器,其最大的方便之處是能夠和 Dropbox、GitHub、GitLab 和 Google Drive 等直接同步,以及 Blogger、WordPress、ZenDesk 等內容發布平臺的直接發布功能。要說在線編輯器最大的優勢,那肯定就是「隨時隨地,想寫就寫」。只要有網絡和瀏覽器,我們就能創造內容。StackEdit 還能夠讓我們在任何地方、任何設備上面同步修改撰寫我們創作的文章,寫完文章就可以直接發布。這樣的「一條龍服務」是本地的 Markdown 編輯器所幾乎無法達到的。

          StackEdit

          不僅如此,StackEdit 還原生直接支持了 Mermaid 渲染引擎,也就是說我們在 StackEdit 里面能夠直接利用 Mermaid 渲染 UML 圖表等復雜的內容。很多本地的 Markdown 編輯器都沒有做到的功能,StackEdit 全都能勝任。得益于 PWA 技術,StackEdit 網頁編輯器實際上離線同樣也可以使用,因此我們完全可以直接將 StackEdit 添加到本地,這樣沒有網絡我們照樣能夠進行創作。

          HackMD

          鏈接: https://hackmd.io/

          HackMD 和上面 StackEdit 最大的功能升級就是:HackMD 支持多人協作撰寫 Markdown 文檔。我們可以直接理解 HackMD 就是 Markdown 世界里的 Google Docs(或騰訊文檔、石墨文檔這種團隊協作文檔編輯器)。我們可以利用 HackMD 和團隊成員共同實時地寫作撰寫編輯一篇 Markdown 文檔,方便高效。

          HackMD

          HackMD 原生嵌入了 MathJax 及 UML 模式,我們可以直接快速書寫書寫公式或流程圖,當然也可以利用 Mermaid 渲染引擎制作 UML 圖表。

          值得注意的是,上面這兩款在線的 Markdown 編輯器都是無需登錄即可使用的,只有 HackMD 在多人協作時才需要登錄。

          小結

          隨著 Web 技術的急速發展,基于 Web 前端的小工具越來越豐富也越來越強大。很多時候一些小功能,桌面客戶端往往都沒有做很好的處理,這時候 Web 前端的小工具反而能夠勝任。不僅如此,我們還可以通過 PWA 技術讓這些網頁 App 直接變成桌面軟件,離線使用,無所不能。

          善用在線小工具,我們很多時候會發現原本簡潔的工作流程還能更加高效。希望這篇文章中提到的這些工具在你的創作過程中滿足你的所有需求。感謝閱讀。


          主站蜘蛛池模板: 玩弄放荡人妻一区二区三区| 亚洲第一区视频在线观看| 无码人妻一区二区三区兔费| 国产一区二区精品久久凹凸| 精品女同一区二区| 国产一区二区三区韩国女主播 | 蜜芽亚洲av无码一区二区三区| 国产亚洲自拍一区| 亚洲成人一区二区| 欧洲精品码一区二区三区免费看 | 国产一区二区福利| 日韩精品一区二区三区影院| 日本v片免费一区二区三区| 97久久精品无码一区二区| 精品一区二区三区东京热 | 成人精品一区二区三区电影| 无码人妻视频一区二区三区| 国产亚洲情侣一区二区无码AV| 午夜DV内射一区区| 国产精品成人99一区无码| 日韩精品一区二区三区色欲AV | 99久久精品费精品国产一区二区| 国产精品日韩欧美一区二区三区| 亚洲乱码一区二区三区国产精品| 91久久精品无码一区二区毛片| 中文人妻无码一区二区三区| 福利一区二区三区视频在线观看| 国产一区二区三区夜色| 日韩人妻无码一区二区三区 | 国产精品一区二区久久沈樵| 国产乱子伦一区二区三区| 男人的天堂亚洲一区二区三区 | 2018高清国产一区二区三区| 亚洲综合av一区二区三区不卡| 欧美日韩精品一区二区在线观看 | 久久无码人妻一区二区三区午夜| 亚洲码欧美码一区二区三区| 国产丝袜视频一区二区三区 | 亚洲av无码成人影院一区| 国语对白一区二区三区| 日韩一区二区在线观看|