这里是修真院前端小课堂,每篇分享文从css
【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】html
八个方面深度解析前端知识/技能,本篇分享的是:前端
【九宫格布局方式有哪些,有什么优缺点?】浏览器
1.背景介绍布局
盒子模型与元素水平学习
九宫格对于一个初学者来讲,只须要了解标准盒模型,盒模型由内至外分别是content、padding、border、margin, 其中可使用百分比的有content,padding,margin,边框border则不能够用%单位。flex
元素水平分为3种:block水平,inline-block水平,inline水平,3种元素各有不一样的表现。编码
block水平默认状况下,继承父级宽度,铺满整行。多个元素竖直方向排列,能够设置宽高,竖直方向上的padding,margin有效。htm
inline元素水平排列,多个inline水平的元素,会在一行里排列,不能够设置宽高,竖直方向上的padding,margin无效。继承
inline-block水平元素,用时具备block水平和inline水平的特色,多个元素水平排列成一行。能够设置宽高,竖直方向上的padding,margin有效。
2.知识剖析
既然这样,实现九宫格效果,必然不能是9个block水平的元素或者是9个inline水平的元素,只能是inline-block的元素。
因此引出第一种九宫格布局。inline-block布局。固定尺寸的九宫格布局。
关于九宫格的自适应,什么叫自适应,九宫格的自适应指的又是什么,认识css单位,px,%,与vw。
px,%,vw的不一样之处
vw:viewpoint-width,视窗宽度,1vw等于视窗宽度的1%。
vh:viewpoint-height,视窗高度,1vh等于视窗高度的1%。
%:百分比,以父级元素的尺寸为基准,乘以%后获得相应的尺寸。
既然这样就能够轻松的写出第一个九宫格展现图。
b、float布局
关于浮动
float 属性定义元素在哪一个方向浮动。以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素均可以浮动。浮动元素会生成一个块级框,而不论它自己是何种元素。
c、vw布局
d、flex布局
e、grid布局
f、position布局
g、line-height布局
3.常见问题
display:inline-block后的九宫格会折行?
4.解决方案
分析缘由:
解决办法:
一、父级设置font-size为0
二、标签闭合
5.编码实战
6.扩展思考
9宫格必须使用9个div吗?
不必定
直接看demo。
3个div实现宫格
1个div实现9宫格
7.参考文献
参考一:w3c
参考二:知乎
8.更多讨论
讨论点1:以上提到的九宫格布局实现方案,还有别的实现方案吗?
table布局方案,纯position定位方案
讨论点2:选择哪一种方案好?
考虑兼容性的话float布局与inline-block布局最好,其余的布局方案或多或少不兼容低版本浏览器
讨论点3:初学者实现九宫格要注意的问题
inline-block布局的问题,有必要清楚浮动吗?
问题:
1.display:inline-block后的九宫格会折行?
答:
a、父级设置font-size为0
b、标签闭合
2.为何绝对定位知识设置相对方向值,就能实现width或者height具备尺寸?
答:这是绝对定位的特性,假如咱们在一个相对定位的容器有一个子元素,咱们直接设置这个子元素是绝对定位,而后设置left:0;right:0;top:0;bottom:0;此时子元素的宽度就是父级的宽度,子级的高度就是父级的高度,这就是绝对定位的特性,拉伸特性。
3.为何九宫格布局不能使用height的百分比。
答:
Web浏览器在计算有效宽度时会考虑浏览器窗口的打开宽度。若是你不给宽度设定任何缺省值,那浏览器会自动将页面内容平铺填满整个横向宽度。
(即块级元素的宽度)
可是高度的计算方式彻底不同。事实上,浏览器根本就不计算内容的高度,除非内容超出了视窗范围(致使滚动条出现)。或者你给整个页面设置一个绝对高度。不然,浏览器就会简单的让内容往下堆砌,页面的高度根本就无需考虑。
由于页面并无缺省的高度值,因此,当你让一个元素的高度设定为百分比高度时,没法根据获取父元素的高度,也就没法计算本身的高度。换句话说,父元素的高度只是一个缺省值:height: auto。当你要求浏览器根据这样一个缺省值来计算百分比高度时,只能获得undefined的结果。也就是一个null值,浏览器不会对这个值有任何的反应。
由于父级元素的高度是由该元素里面的内容撑起的,在不设置该圆素高度的前提下。
因而子元素的高度height: 50% 也不会起做用。解决办法就是给html和body加上height: 100%。
“咱们相信人人均可以成为一个工程师,如今开始,找个师兄,带你入门,学习的路上再也不迷茫。
这里是技能树.IT修真院:http://www.jnshu.com,初学者转行到互联网行业的汇集地。"
欢迎加IT交流群565734203与你们一块儿讨论交流