標準盒模型:總寬度:內容 ( content ) + border + padding + margincss
IE盒模型(怪異盒模型):寬度 = 內容寬度 ( content + border + padding ) + marginhtml
flex-direction:row //(默認)主軸爲水平方向,起點在左端。
flex-direction:row-reverse //主軸爲水平方向,起點在右端
flex-direction:column //使用後會使主軸變爲y軸
flex-firection:column-reverse //主軸爲垂直方向,起點在下沿。複製代碼
flex-wrap:nowrap //(默認)不換行
flex-wrap:wrap //換行,第一行在上方
flex-wrap:wrap-reverse //換行,第一行在下方複製代碼
flex-flow:該屬性是flex-direction屬性和flex-wrap屬性的簡寫形式。
flex-flow:值1(主軸方向) 值2(是否換行)
flex-flow:row nowrap //(默認)複製代碼
justify-content:flex-start //(默認)左對齊
justify-content:flex-end //右對齊
justify-content:center //居中(子元素緊湊居中)
justify-content:space-between; //兩端對齊,項目之間的間隔都相等
justify-content:space-around; //每一個項目兩側的間隔相等複製代碼
align-items:flex-start //與交叉軸的起點對其
align-items:flex-end //與交叉軸的終點即末尾對其
align-items:center //與交叉軸的中點對其
align-items:baseline //項⽬的第⼀⾏⽂字的基線對齊
align-items:stretch //若是項⽬未設置⾼度或設爲auto,將佔滿整個容器的⾼度複製代碼
align-content屬性,緊跟於flex-wrap屬性後,該屬性用於修飾flex-wrap屬性
align-content:flex-start //與交叉軸的起點對齊
align-content:flex-end //與交叉軸的終點對其
align-content:center //與交叉軸的中點對齊
align-content:space-between //與交叉軸兩端對齊,軸線之間的間隔平均分佈
align-content:space-around //每根軸線兩側的間隔都相等複製代碼
align-self:center
//容許單個元素與其餘元素有不同的對齊方式
//在彈性子元素上使用。覆蓋容器的 align-items 屬性。複製代碼
order屬性: (自定義子元素的顯示順序)
//用整數值來定義排列順序,數值小的排在前面。能夠爲負值。
//注: 默認值爲0。父元素必須設置爲彈性盒模型
align-self:flex-start //默認
align-self:flex-end //終點複製代碼
flex-grow屬性:(定義彈性盒子元素的擴展比率)
//表示的是當容器有多餘的空間時,這些空間在不一樣條目之間的分配比例
//好比,一個容器中有 3 個條目,其"flex-grow"屬性的值分別爲 1,2 和 3
//那麼當容器中有空白空間時,這 3 個條目所得到的額外空白空間分別佔
//所有空間的 1/六、1/3 和 1/2複製代碼
flex-shrink屬性:(定義彈性盒子元素的收縮比率)
//該屬性的值也是無單位的,表示的是當容器的空間不足各個條目的尺寸縮小的比例。
//例如,在容器中有 3 個條目,其"flex-shrink"屬性的值分別爲 1,2 和 3。
//每一個條目的主軸尺寸均爲 200px。當容器的主軸尺寸不足 600px 時,
//好比變成了 540px 以後則須要縮小的尺寸 60px 由 3 個條目按照比例來分配。
//3 個條目分別要縮小 10px、20px 和 30px,
//主軸尺寸分別變爲 190px、180px 和 170px複製代碼
⑴px:絕對單位。頁面按精確像素展現。web
⑵em:相對單位,基準點爲父節點字體的大小,若是自定義了font-size按自身的來算,整個頁面內1em不是一個固定的值。編程
⑶rem:相對單位,相對於根節點html的font-size的大小來計算。瀏覽器
⑷vw:視窗寬度,1vw等於視窗寬度的1%。sass
⑸vh:視窗高度:1vh等於視窗高度的1%。bash
⑹vmin:以寬和高之間最短的一端爲基準,若是寬>高,那麼1vmin至關於寬的1%;框架
⑺vmax:以寬和高之間最長的一端爲基準,若是寬>高,那麼1vmax至關於寬的1%;less
⑻%:百分比。iphone
⑼pt:point,大約1/72寸,一寸=3.3333···釐米。
⑽pc:pica,大約6pt,1/6寸。
⑾ex:取當前做用效果的字體的x的高度,在沒法肯定x高度的狀況下以0.5em計算,IE11如下不支持。
⑿ch:以節點所使用字體中的「0」字符爲基準,找不到時爲0.5em。IE10以上支持。
①給設置了浮動的元素的父級加高。
②給設置了浮動的元素的父級設置overflow:hidden。若是須要兼容IE,在添加一個zoom:1
③給須要清除浮動的元素設置clear:both;
④在最後一個子元素的後面加一個空的div,給它樣式屬性 clear:both(不推薦)
⑤僞類清除:.clearfix:after{content:"";clear:both;display:block;}
.clearfix{zoom:1}
<div class="container clearfix">
<div class="box"></div>
</div>
<div class="main "></div>
.box{
width:100px;
height:100px;
background:yellow;
float: left;
}
.main{
width:150px;
height: 150px;
background:red;
}
.clearfix:after{
content: "";
clear: both;
display: block;
}
.clearfix{
zoom:1;
}
複製代碼
X軸
,
Y軸
以及表示層疊的
Z軸
。通常狀況下,元素在頁面上沿
X軸Y軸
平鋪,咱們察覺不到它們在
Z軸
上的層疊關係。而一旦元素髮生堆疊,這時就能發現某個元素可能覆蓋了另外一個元素或者被另外一個元素覆蓋。
通元素設置position
屬性爲非static
值並設置z-index
屬性爲具體數值,產生層疊上下文。
⑴靜態佈局:最傳統、原始的Web佈局設計。網頁最外層容器(outer)有固定的大小,全部的內容以該容器爲標準,超出寬高的部分用滾動條(overflow:scroll)來實現滾動查閱。
優勢:採用的是css2以前的寫法,不存在瀏覽器兼容性。佈局簡單。
缺點:可是移動端不可使用pc端的頁面,兩個頁面的佈局不一致,移動端須要本身另外設計一個佈局並使用不一樣域名呈現。
⑵流式佈局:流式佈局也叫百分比佈局。隨着屏幕的改變,頁面的佈局沒有發生大的變化,能夠進行適配調整,這個正好與自適應佈局相補。
優勢:元素的寬高用百分比作單位,元素寬高按屏幕分辨率調整,佈局不發生變化。
缺點:屏幕尺度跨度過大的狀況下,頁面不能正常顯示。
⑶彈性佈局:彈性佈局是CSS3引入的強大的佈局方式,彈性盒模型:display:flex;
優勢:簡單、方便、快速
缺點:CSS3新特性,瀏覽器兼容性很是頭疼。並且手機瀏覽器對flex的支持也不是很理想。
⑷響應式佈局:採用自適應佈局和流式佈局的綜合方式,爲不一樣屏幕分辨率範圍建立流式佈局。利用媒體查詢能夠檢測到屏幕的尺寸(主要檢測寬度),並設置不一樣的CSS樣式,就能夠實現響應式的佈局。
CSS預處理器:用一種編程語言,爲CSS增長了一些編程的特性,最終編譯出css文件。好比sass、less、stylus。
優勢:語言級邏輯處理,動態特性,改善項目結構
缺點:採用特殊語法,框架耦合度高,複雜度高
實現原理:
①取到 DSL 源代碼 的 分析樹CSS後處理器:堆css進行處理,並最終生成css的預處理器,屬於廣義上的css預處理器,最典型的就是css壓縮工具(clean-css),流行的Autoprefixer,以Clean I Use上的瀏覽器支持數據爲基礎,自動處理兼容性問題
優勢:使用 CSS 語法,容易進行模塊化,貼近 CSS 的將來標準
缺點:邏輯處理能力有限
實現原理:
①將 源代碼 作爲 CSS 解析,得到 分析樹新增一:rgba(簡單不作解釋);
新增二:彈性佈局flex(上面第二題);
新增三:媒體查詢;
新增四:漸變色;
新增五:動畫animation,使用@keyframes定義,使用的元素animation:名字 時間;
@keyframes changeWidth{
0%{width:100px}
100%{width:800px}
}
div{
width:100px;
height:100px;
background:red;
animation:changeWidth 10s forwards;
}複製代碼
animation的6個值:
第三個值:
第五個值:
第六個值:
display:list-item此元素會做爲列表顯示
元素被當成行內元素排版的時候,原來HTML代碼中的回車換行被轉成一個空白符,在字體不爲0的狀況下,空白符佔據必定寬度,因此inline-block的元素之間就出現了空隙。這些元素之間的間距會隨着字體的大小而變化,當行內元素font-size:16px時,間距爲8px。(不懂不要緊,看下面解決方法就明白了)。
方法一:父級font-size:0;子級設置字體大小;
方法二:改變書寫方式
//原來
<span>1</span>
<span>2</span>
<span>3</span>
//改變
<span>1</span><span>2</span><span>3</span>複製代碼
方法三:margin負值
方法四:設置父元素display:table;word-spacing:0(兩個記得都要加上);
<metaname="viewport" content="width=device-width,initial-scale=1.0">複製代碼
*{
margin:0;
padding:0;
}
.wrap{
width:20%;
}
.box{
kground:pink;
}
.box p{
width:100%;
height:100%;
position: absolute;
color:#666;
}複製代碼
<div class="wrap"> <div class="box"> <p>13</p> </div></div>複製代碼
div{
width:0;
height:0;
border-top:50px solid transparent;
border-left:50px solid transparent;
border-right:50px solid transparent;
border-bottom:50px solid red;
}複製代碼
注:上述三角形爲正三角形,若是想要倒三角形,那麼將border-top的值設爲50px solid red,其他的屬性值相同。
爲何會有1像素邊框問題:在開發中,在移動端css裏面寫了1px,實際看起來比1px粗。這就關係到物理像素和邏輯像素的問題了,開發中UI設計師要求的1px是指設備的物理像素1px,而css裏記錄的像素是邏輯像素,它們之間存在一個比例關係,能夠用window.devicePixelRadio來獲取,也能夠用媒體查詢的-webkit-min-device-pixel-ratio來獲取,比例的多少與設備相關。iphone的devicePixelRatio == 2,而咱們設置的border:1px 描述的是設備的獨立像素,因此被放大到物理像素2px顯示,在iphone上就顯的比較粗。
解決方案:
⑴媒體查詢利用設備像素比縮放,設置小數像素。
優勢:簡單,好理解。.box{border:1px solid #333}
@media screen and (-webkit-min-device-pixel-ratio:2){
.box{border:1px solid #333}
}
@media screen and (-webkit-min-device-pixel-radio:3){
.border{border:0.333333px solid #333}
}複製代碼
⑵設置border-image方案
缺點:須要製做圖片,圓角可能會出現模糊。
.border-image-1px{
border-width:1px 0px;
-webkit-border-image:url("border.png")2 0 strech;
border-image:url("border.png")2 0 stretch;
}複製代碼
border-width:指定邊框的寬度,能夠設定四個值,分別爲上右下左top right bottom left。
⑶box-shadow方案
優勢是沒有圓角問題。缺點是顏色很差控制。
.box{
-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.5);
}複製代碼
參數:水平陰影位置,垂直陰影位置,模糊距離,陰影尺寸,陰影顏色,將外部陰影改成內部陰影。
⑷transform:scale(0.5)方案(推薦):
以上的方案,思想其實都是將1px縮小爲0.5px來展現,然而0.5px並非全部的設備或瀏覽器都支持。其實1像素問題的產生基本發生在設置邊框或分割線的時候,場景並不覆蓋全局樣式,所以,直接縮放須要設置的元素,纔是咱們真正需求的。transform就能夠實現。
①設置height:1px,根據媒體查詢結合transform縮放爲相應的尺寸
.box{
height:1px;
background:#333;
-webkit-transform:scaleY(0.5);
-webkit-transform-origin:0 0;
overflow:hidden;
}複製代碼
②用: :after和: :before,設置border-bottom:1px solid #000;,而後縮放-webkit-transform:scaleY(0.5);能夠實現兩根邊線的需求;
.box::after{
content:"";
width:100%;
border-bottom:1px solid #000;
transform:scaleY(0.5);
}複製代碼
③用: :after設置border:1px solid #000;width:200%;height:200%;而後縮放scaleY(0.5);優勢能夠實現圓角京東就是這麼實現的,缺點是按鈕添加active比較麻煩。
.div::after {
content: '';
width: 200%;
height: 200%;
position: absolute;
top: 0;
left: 0;
border: 1px solid #bfbfbf;
border-radius: 4px;
-webkit-transform: scale(0.5,0.5);
transform: scale(0.5,0.5);
-webkit-transform-origin: top left;
}複製代碼