第一天先更新html/css,還有後續JavaScript、vue、es6會持續更新
(看前先點贊,養成好習慣哈哈哈 )
css盒模型、BFC、css浮動、css經典佈局、css相容、css hack、html/ css基礎
-
JavaScrip面試題地址(超用心)
-
es6面試題地址
-
vue面試題地址
-
css盒模型
css盒模型基本概念?
- margin、border、padding、content。在網頁中,一個元素佔有空間的大小由幾個部分構成,其中包括元素的內容(content),元素的內邊距(padding),元素的邊框(border)元素的外邊距(margin)四個部分。這四個部分佔有的空間中,有的部分可以顯示相應的內容,而有的部分只用來分隔相鄰的區域。4個部分一起構成了css中元素的盒模型。
- 分類:標準模型、IE模型
標準模型和IE模型的區別:計算高度和寬度的不同,怎麼不同,高度寬度是怎麼計算的?
- 標準模型
div寬度 = 內容寬度+border寬度+padding寬度 //改變border寬度,div寬度會變化 box-sizing:content-box; /*設定標準盒子*/ 複製程式碼
- 怪異模型|IE模型
div寬度(定死) = 內容寬度+border寬度+padding寬度 //改變border寬度,div寬度不會變化 box-sizing:border-box; /*IE模型*/ 複製程式碼
-
BFC(邊距重疊解決方案)
BFC的基本概念?
BFC(Block Formatting Context ):塊級格式化上下文
IFC(CSS2.1):Inline Formating Contexts,內聯元素格式化上下文
GFC(CSS3):GridLayout Formating Contexts,網格佈局格式化上下文
FFC(CSS3):Flex Formatting Contexts,自適應格式化上下文
複製程式碼
BFC原理/ BFC渲染規則?
1、BFC元素垂直方向的邊距會發生重疊
2、BFC的區域不會與浮動元素的box重疊(可用於清除浮動)
3、BFC為一個獨立的元素,外面的元素不會影響裡面的元素,裡面的元素也不會影響外面的元素。
4、計算BFC高度的時候,浮動元素也會參與計算。
複製程式碼
如何建立BFC?
1、float值不為none,即為left, right
2、position的值不為static(預設值),relative,即為absolute,fixed
3、display為inline-block, flex, inline-flex, table-cell,table-caption
4、overflow不為visible,overflow為auto,hidden,scroll ;
5、使用fieldset元素(可以給表單元素設定環繞邊框的html元素)
複製程式碼
BFC的使用場景?
1、BFC垂直方向邊距重疊
2、BFC不與float重疊
3、清除浮動:子元素是浮動元素的時候,把外層元素設定成BFC的時候,子元素的浮動元素也會參與到父級元素的高度計算上來。
複製程式碼
-
css浮動
css浮動原理?
浮動的框可以左右移動,直至它的外邊緣遇到包含框或者另一個浮動框的邊緣。
複製程式碼
浮動元素引起的問題?
1、父元素的高度無法被撐開,影響與父元素同級的元素
2、與浮動元素同級的非浮動元素(內聯元素)會跟隨其後
3、若非第一個元素浮動,則該元素之前的元素也需要浮動,否則會影響頁面顯示的結構
複製程式碼
css清除浮動的方法?
1、使用空標籤
給所有浮動標籤後面新增一個空標籤,定義CSS clear:both.
但是這種方法會增加一個無意義的標籤。
2、設定父級元素為BFC元素
3、使用after偽元素清除浮動
這個方法只適用於非IE瀏覽器。該方法必須為需要清除浮動元素的偽物件中設定height:0,不然該元素會比實際元素高出若干畫素。
#parent:after{
content:".";
height:0;
visibility:hidden;
display:block;
clear:both;
}
複製程式碼
-
css經典佈局
三欄佈局:左右各300px,中間自適應?
- 浮動float
<style>
html * {
padding:0;
margin:0;
}
.layout{
margin-top:20px;
}
.layout article div{
min-height:100px;
}
</style>
</head>
<body>
<!--浮動解決方案-->
<section class="layout float">
<style media="screen">
.layout.float .left{
float:left;
width:300px;
background:red;
}
.layout.float .right{
float:right;
width:300px;
background:blue;
}
.layout.float .center{ /*塊元素自動撐開*/
background:yellow;
}
</style>
<article class="left-right-center">
<div class="left"></div>
<div class="right"></div>
<div class="center">
<h1>浮動解決方案</h1>
1.這是三藍布局中間部分
2.這是三藍布局中間部分
</div>
</article>
</section>
複製程式碼
- 絕對定位position:absolute
<!--絕對定位解決方案-->
<section class="layout absolute">
<style>
.layout.absolute .left-center-right>div{
position:absolute;
}
.layout.absolute .left{
left:0;
width:300px;
background:red;
}
.layout.absolute .center{
left:300px;
right:300px;
background:yellow;
}
.layout.absolute .right{
right:0;
width:300px;
background:blue;
}
</style>
<article class="left-center-right">
<div class="left"></div>
<div class="center">
<h2>絕對定位解決方案</h2>
1.這是三藍布局中間部分
2.這是三藍布局中間部分
</div>
<div class="right"></div>
</article>
</section>
複製程式碼
- flex佈局
<!--flexbox解決方案-->
<section class="layout flexbox">
<style>
.layout.flexbox{
margin-top:140px;
}
.layout.flexbox .left-center-right{
display:flex;
}
.layout.flexbox .left{
width:300px;
background:red;
}
.layout.flexbox .center{
flex:1; /*中間自適應原理*/
background:yellow;
}
.layout.flexbox .right{
width:300px;
background:blue;
}
</style>
<article class="left-center-right">
<div class="left"></div>
<div class="center">
<h2>flexbox解決方案</h2>
1.這是三藍布局中間部分
2.這是三藍布局中間部分
</div>
<div class="right"></div>
</article>
</section>
複製程式碼
- 表格佈局table-cell
<!--表格佈局解決方案-->
<section class="layout table">
<style>
.layout.table .left-center-right{
width:100%;
display:table;
height:100px;
}
.layout.table .left-center-right>div{
display:table-cell;
}
.layout.table .left{
width:300px;
background:red;
}
.layout.table .center{
background:yellow;
}
.layout.table .right{
width:300px;
background:blue;
}
</style>
<article class="left-center-right">
<div class="left"></div>
<div class="center">
<h2>表格佈局解決方案</h2>
1.這是三藍布局中間部分
2.這是三藍布局中間部分
</div>
<div class="right"></div>
</article>
</article>
</section>
複製程式碼
- 網格佈局grid
<!--網格佈局解決方案-->
<section class="layout grid">
<style media="screen">
.layout.grid .left-center-right{
display:grid;
width:100%;
grid-template-rows:100px;
grid-template-columns:300px auto 300px;
}
.layout.grid .left{
background:red;
}
.layout.grid .center{
background:yellow;
}
.layout.grid .right{
background:blue;
}
</style>
<article class="left-center-right">
<div class="left"></div>
<div class="center">
<h2>網格佈局解決方案</h2>
1.這是三藍布局中間部分
2.這是三藍布局中間部分
</div>
<div class="right"></div>
</article>
</section>
複製程式碼
- 延伸
這5種方案的優缺點
①浮動:清除浮動,相容性比較好。
②絕對定位:快捷,佈局已經脫離了文件流,導致下面的元素也要脫離文件流,使用性較差。
③flex佈局,解決了浮動和絕對定位的缺點,移動端基本已經支援了相容性。
④表格佈局:表格佈局的相容性非常好
⑤網格佈局:新出的
如果“高度已知”去掉,中間內容高度撐開了,需要左右的高度也自動撐開,哪些方案仍適合
①flex、table能用
②flex左邊有遮擋,所以顯示在右邊,沒有遮擋的時候,就會顯示在最左邊。建立bfc - 三欄佈局
①左右寬度固定,中間自適應
②上下高度固定,中間自適應。 - 兩欄佈局
①左寬度固定,右自適應
②右寬度固定,左自適應
③上高度固定,下自適應
④下高度固定,上自適應
聖盃佈局?
- 聖盃佈局的核心是左、中、右三欄都通過float進行浮動,然後通過負值margin進行調整。
- .left, .right的margin-left是為了讓.main .left .right在同一行。
- .container的padding-left,padding-right,.left的position和left,right的position和left是為了防止文字被遮擋。
<style>
.main{
float:left;
width:100%;
}
.content{
height:200px;
margin-left:100px;
margin-right:200px;
background-color:green;
}
.main::after{
display:block;
content: '';
font-size: 0;
height:0;
clear: both;
zoom:1;
}
.left{
float:left;
width:100px;
height:200px;
margin-left:-100%; /*左欄移到第一行的首部*/
background-color:red;
}
.right{
float:left;
width:200px;
height:200px;
margin-left:-200px; /*右欄移到和左中一行*/
background-color:yellow;
}
</style>
</head>
<body>
<div class="main">
<div class="content"></div>
</div>
<div class="left"></div>
<div class="right"></div>
複製程式碼
-
css相容
經常遇到的css相容性的問題在哪些?如何解決的?
本都是ie8及以前的版本會遇到css相容問題。一般是圖片透明、圓角、字型大小,新出的css3樣式。
aSuncat:如此老舊瀏覽器終究會被市場放棄,不花時間在這上面。
複製程式碼
-
css hack
什麼是CSS hack?
針對不同的瀏覽器或瀏覽器不同版本寫相應的CSS的過程,就是CSS hack
複製程式碼
CSS hack分類?
3種:條件hack、屬性級hack、選擇符hack。
// 1、條件hack
<!--[if IE]>
<style>
.test{color:red;}
</style>
<![endif]-->
複製程式碼
// 2、屬性hack(類內部hack)
.test{
color:#090\9; /*For IE8*/
*color:#f00; /*For IE7 and earlier*/
_color:#ff0; /*For IE6 and earlier*/
}
複製程式碼
// 3、選擇符hack(選擇器屬性字首法)
* htm .test{color:#0f90;} /*For IE6 and earlier*/
* + html .test{color:#ff0;} /*For IE7*/
複製程式碼
CSS hack書寫順序?
CSS hack書寫順序,一般是將適用範圍廣、被識別能力強的CSS定義在前面。
複製程式碼
-
html、css基礎
link和@import的區別?
1、從屬關係區別:
link屬於html標籤,而@import是css提供的。
2、載入順序區別:
頁面被載入時,link會同時被載入,而@import引用的css會等到頁面被載入完再載入。
3、相容性區別:
import只在IE5以上才能識別,而link是html標籤,無相容問題。
4、dom可操作性區別:
可以通過JS 操作 DOM ,插入link標籤來改變樣式;由於 DOM 方法是基於文件的,無法使用@import的方式插入樣式
5、權重區別:
如果已經存在相同樣式,@import引入的這個樣式將被該 CSS 檔案本身的樣式層疊掉,表現出link方式的樣式權重高於@import的權重這樣的直觀效果。
(aSuncat:簡而言之,link和@import,誰寫在後面,誰的樣式就被應用,後面的樣式覆蓋前面的樣式。)
複製程式碼
如何理解標籤語義,它有哪些好處?
1、語義元素清楚地向瀏覽器和開發者描述其意義。
2、好處:
(1)html結構清晰,程式碼可讀性較好。
(2)有利於SEO,搜尋引擎根據標籤來確定上下文和各個關鍵字的權重。
(3)無障礙閱讀,樣式丟失的時候能讓頁面呈現清晰的結構。
(4)方便其他裝置解析,如盲人閱讀器根據語義渲染網頁
(5)便於團隊維護和開發,語義化更具可讀性,程式碼更好維護,與CSS3關係更和諧。
複製程式碼
css的選擇符有哪些,優先順序如何計算,哪些屬性可以繼承?
- css選擇符型別
1、通用選擇器:*
2、類別選擇器:.class
3、id選擇器:#id
4、標籤選擇器:p
5、後代選擇器:div p
6、子選擇器:div > p
7、群組選擇器:div , p
8、相鄰同胞選擇器:div +p
9、偽類選擇器::link :visited :active :hover :focus :first-child
10、偽元素選擇器::first-letter :first-line:before :after :lang(language)
11、屬性選擇器:[attribute] [attribute=value] [attribute~=value] [attribute|=value]
複製程式碼
- 優先順序計算
!important > 內聯樣式 > id > class > tag
3、屬性繼承
(1)所有元素可繼承:visibility、cursor
(2)塊級元素可繼承:text-indent、text-align
(3)內聯元素可繼承:
①字型系列屬性:font、font-family、font-size、font-style、font-variant、font-weight、font-stretch、font-size-adjust
②除text-indent、text-align之外的文字系列屬性:
letter-spacing、word-spacing、white-space、line-height、color、text-transform、direction
擴充套件:
一、不可繼承的樣式屬性:
1、display
2、文字屬性:vertical-align、text-decoration、text-shadow、unicode-bidi
3、盒子模型屬性:border、padding、margin、width、height
4、背景屬性:background
5、定位屬性:float、clear、position
6、生成內容屬性:content
7、輪廓樣式屬性:outlien-style
8、頁面樣式屬性:size
9、聲音樣式屬性:pause-before
複製程式碼
行內元素和塊級元素舉幾個例子?
行內元素:span,a,var ,em,input,img,img,textarea,var,em,strong,select,lable
塊級標籤:div,p,h1-h3,ul,ol,dl,li,dd,dt,table,td,tr
複製程式碼
偽類和偽元素?
偽類::active :focus :hover :link :visited :first-child
偽元素::before :after :first-letter :first-line
複製程式碼
svg和canvas的區別?
1、canvas時h5提供的新的繪圖方法 ;svg已經有了十多年的歷史
2、canvas畫圖基於畫素點,是點陣圖,如果進行放大或縮小會失真 ;svg基於圖形,用html標籤描繪形狀,放大縮小不會失真
3、canvas需要在js中繪製 ;svg在html繪製
4、canvas支援顏色比svg多
5、canvas無法對已經繪製的影像進行修改、操作 ;svg可以獲取到標籤進行操作
複製程式碼
flex實現原理?
1、容器上有主軸和縱軸的概念,預設主軸(main-axis)是橫向,從左到右,縱軸是豎向,從上到下。
2、其中所有的孩子的佈局都會受到這兩個軸的影響。
3、有很多相關的css屬性就是通過改變主軸和縱軸的方向來實現不同的佈局效果的。
複製程式碼
src與href的區別?
1、href 是指向網路資源所在位置,建立和當前元素(錨點)或當前文件(連結)之間的連結,用於超連結。
2、src是指向外部資源的位置,指向的內容將會嵌入到文件中當前標籤所在位置;在請求src資源時會將其指向的資源下載並應用到文件內,例如js指令碼,img圖片和frame等元素。當瀏覽器解析到該元素時,會暫停其他資源的下載和處理,直到將該資源載入、編譯、執行完畢,圖片和框架等元素也如此,類似於將所指向資源嵌入當前標籤內。這也是為什麼將js指令碼放在底部而不是頭部。
複製程式碼
-
JavaScrip面試題地址(超用心)
-
es6面試題地址
-
vue面試題地址
-
後續還有JavaScript vue es6 關注持續更新.....
收集不易,如果你對這篇文章感興趣,就點個贊和關注吧