盒模型
常見的盒模型有w3c盒模型(又名標準盒模型)box-sizing:content-box和IE盒模型(又名怪異盒模型)box-sizing:border-box。
標準盒子模型:寬度=內容的寬度(content)+ border + padding + margin
低版本IE盒子模型:寬度=內容寬度(content+border+padding)+ margin
css3 新特性
常問:
- word-wrap 文字換行
- text-overflow 超過指定容器的邊界時如何顯示
- text-decoration 文字渲染
- text-shadow文字陰影
- gradient漸變效果
- transition過渡效果 transition-duration:過渡的持續時間
- transform拉伸,壓縮,旋轉,偏移等變換
- animation動畫
- audio音頻
- vadio視頻
- RGBA和透明度
css3 邊框
border-radius 圓角
box-shadow 盒子陰影
border-image 邊框圖片
css3 背景
background-image 背景圖片
background-size 背景大小
background-origin 背景圖像的位置區域
background-clip 背景剪裁屬性是從指定位置開始繪製
css選擇器及優先級
!important
內聯樣式
ID選擇器
類選擇器 屬性選擇器 偽類選擇器
元素選擇器 關係選擇器 偽元素選擇器
通配選擇器
1,class選擇符:10,id選擇符:100,內聯樣式權值最大,為1000
- !important聲明的樣式優先級最高,如果衝突再進行計算。
- 如果優先級相同,則選擇最後出現的樣式。
-
繼承得到的樣式的優先級最低。
CSS選擇器有哪些?哪些屬性可以繼承?
- id選擇器(#myid)、
- 類選擇器(.myclassname)、
- 標籤選擇器(div, h1, p)、
- 相鄰選擇器(h1 + p)
- 子選擇器(ul > li)、
- 後代選擇器(li a)、
- 通配符選擇器(*)、
- 屬性選擇器(a[rel=”external”])、
- 偽類選擇器(a:hover, li:nth-child)
可繼承的屬性:
font-size,
font-family,
color
不可繼承的樣式:
border,
padding,
margin,
width,
height
BFC
BFC是塊級格式化上下文。
- 計算BFC高度時,浮動元素也會參與計算、
- 在BFC這個元素垂直方向的邊距會發生重疊
- BFC的區域不會與浮動元素的box重疊
- BFC在頁面上是一個獨立的容器,其裏外的元素不會互相影響
BFC應用:
防止margin重疊
清除內部浮動
自適應兩欄佈局
防止字體環繞
BFC的生成條件:
根元素
float值不為none
overflow的值不為visible
display的值為inline-block,table-cell,table-caption
position的值為absolute,fixed
彈性盒
display:flex;
align-items:center;
justify-conter:center;
圖片整合技術的優勢
- 減少對服務器的請求次數
-
減少圖片體積,提高加載速度
元素垂直水平居中
不需要知道寬和高
position:absolute;top:0;left:0;right:0;bottom:0;margin:auto;
需要知道寬和高
position:absolute;top:50%;left:50%;margin-top:+/-50%(自身高度的50%);margin-left:+/-50%;
元素水平居中
margin:0 auto;
css定位方式
position:static;//默認定位
position:relative;//相對定位 (參照物是自身,不脱離文檔流)
position:absolute;//絕對定位 (參照物是父元素,遵循就近原則,尋找父元素及其爺爺元素中設置 position:relative 屬性進行定位,脱離文檔流;如果都不設置定位屬性,就以根元素<html>進行定位。)
position:fixed;//固定定位 (參照物是可視區窗口,脱離文檔流)相對於瀏覽器窗口進行定位。
position:sticky;//
display:none和visibility:hidden區別?
display:none指的是元素完全不陳列出來,不佔據空間,涉及到了DOM結構,故產生重排和重繪
visibility:hidden指的是元素不可見但存在,保留空間,不影響結構,故只產生重繪,但不可觸發綁定事件
rem和em的區別
總而言之,就是瀏覽器把誰轉化成“px”
rem 依據的是html的font-size值。1rem=16px
em 依據的是父元素的font-size值。
清除浮動
方法一:clear:both
clear:both;
方法二:萬能清除浮動
.clean{
content:'.';
height:0;
display:block;
clear:both;
overflow:hiddden;
visibility:hidden;
}
display 有哪些值?説明他們的作用?
inline默認。此元素會被顯示為內聯元素,元素前後沒有換行符。
block此元素將顯示為塊級元素,此元素前後會帶有換行符。
none此元素不會被顯示(隱藏)。
inline-block行內塊元素。(CSS2.1 新增的值)
list-item此元素會作為列表顯示。
table此元素會作為塊級表格來顯示(類似table),表格前後帶有換行符
為什麼要初始化 CSS 樣式
因為瀏覽器的兼容問題,不同瀏覽器對有些標籤的默認值是不同的,如果沒對CSS初始化往往會出現瀏覽器之間的頁面顯示差異。
瀏覽器內核
- Trident IE瀏覽器
- Gecko Firefox瀏覽器
- Webkit Chrome Safari
- Blink Chrome Opera
移動端1像素問題
一般來説,在pc端瀏覽器中,設備像素比dpr等於1,1個css像素就等於1個物理像素;但是在retina屏幕中,dpr普遍是2或者3 ,1個css像素不在等於一個物理像素,因此在實際設計稿中粗不少。
- 偽元素+scale
.box{
width:100%;
height:1px;
margin:20px 0;
position:relative;
}
.box::after{
content:'';
position:absolute;
bottom:0;
width:100%;
height:1px;
transform:scaleY(0.5);
transform-origin:0 0;
background:red;
}
<div class="box"><div>
- border-image
div{
border-width:1px 0px;
-webkit-border-image:url(xxx.png) 2 0 stretch;
border-image:url(xxx.png) 2 0 stretch;
}
做移動端開發有沒有遇到不兼容的問題?如何解決?(https://yq.aliyun.com/articles/587092)
1.使用背景圖來代替img標籤
background:url(../images/icon/all.png) no-repeat center center;
-webkit-background-size:50px 50px;
background-size: 50px 50px;
display:inline-block;
width:100%;
height:50px
-
防止手機中網頁放大和縮小
設置meta標籤中的viewport;<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0" /> -
浮動子元素撐開父元素盒子高度
解決方法如下:
1.父元素設置為 overflow: hidden;
2.父元素設置為 display: inline-block;等
如何解決移動端滾動條卡頓問題?
安卓或者ios
-webkit-overflow-scrolling: auto; / 當手指從觸摸屏上移開,滾動會立即停止 */
-webkit-overflow-scrolling: touch; /* 當手指從觸摸屏上移開,會保持一段時間的滾動 ,繼續滾動的速度和持續的時間和滾動手勢的強烈程度成正比。同時也會創建一個新的堆棧上下文。
link 與 @import 的區別
a.從屬關係區別
@import是 CSS 提供的語法規則,只有導入樣式表的作用;link是HTML提供的標籤,不僅可以加載 CSS 文件,還可以定義 RSS、rel 連接屬性等
b.加載順序區別
加載頁面時,link標籤引入的 CSS 被同時加載;@import引入的 CSS 將在頁面加載完畢後被加載。
c.兼容性區別
@import是 CSS2.1 才有的語法,故只可在 IE5+ 才能識別;link標籤作為 HTML 元素,不存在兼容性問題。
d.DOM可控性區別
可以通過 JS 操作 DOM ,插入link標籤來改變樣式;由於DOM方法是基於文檔的,無法使用@import的方式插入樣式。
常見的佈局方式
-
聖盃佈局
body{ min-width: 550px; } #container{ padding-left: 200px; padding-right: 150px; } #container .column{ float: left; } #center{ width: 100%; } #left{ width: 200px; margin-left: -100%; position: relative; right: 200px; } #right{ width: 150px; margin-right: -150px; }
<div id="container">
<div id="center" class="column">center</div>
<div id="left" class="column">left</div>
<div id="right" class="column">right</div>
</div>
- 雙飛翼佈局
body {
min-width: 500px;
}
#container {
width: 100%;
}
.column {
float: left;
}
#center {
margin-left: 200px;
margin-right: 150px;
}
#left {
width: 200px;
margin-left: -100%;
}
#right {
width: 150px;
margin-left: -150px;
}
<div id="container" class="column">
<div id="center">center</div>
</div>
<div id="left" class="column">left</div>
<div id="right" class="column">right</div>