我们可以看到京东的官网上的一些例子(如下图),在同一排中能够存在多个div,这是通过布局方式(例如浮动)来实现的。
解释:
普通流布局又被称之为标准流布局,顾名思义,按照标准的布局规则进行布局
标准布局规则:
<1> 块元素,独占一行,按照自上而下的顺序
<2> 行内元素,先按照自左向右的顺序排列,如果碰到父级元素的边缘则自动换行
举例:
html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Documenttitle> <style> .div1{ height: 200px; width: 200px; background-color: aqua; } .div2{ height: 200px; width: 200px; background-color: brown; } .div3{ height: 200px; width: 200px; background-color: chartreuse; } style> head> <body> <div class="div1">div1div> <div class="div2">div2div> <div class="div3">div3div> body> html>普通流实现一行多个div:
举例:
html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Documenttitle> <style> .div1{ height: 200px; width: 200px; background-color: aqua; display: inline-block; } .div2{ height: 200px; width: 200px; background-color: brown; display: inline-block; } .div3{ height: 200px; width: 200px; background-color: chartreuse; display: inline-block; } style> head> <body> <div class="div1">div1div> <div class="div2">div2div> <div class="div3">div3div> body> html>总结:
虽然我们可以通过普通流来实现一行多个div,但是过于麻烦而且行块内存在缝隙,并且有很多的布局无法通过标准流来实现。
基础:
解释:
float属性用于创建浮动框,将其移动到一边,直至 左/右边缘 触及包含块或者另一个浮动框的边缘。
浮动特性:
所有使用floa属性的元素的display属性都会改变,不论它是一个什么样的元素,都会变成一个块级框,而不论它本生是何种元素
用法:
选择器{float:属性值;}
属性值:
举例:
属性值 说明 none 默认值,不进行浮动 left 向左移动
right 向右移动 inline-end
在最右侧 inline-start
在最左侧
html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Documenttitle> <style> .div1{ float: left; height: 200px; width: 200px; background-color: aqua; } .div2{ float: right; height: 200px; width: 200px; background-color: brown; } style> head> <body> <div class="div1">div1div> <div class="div2">div2div> body> html>
浮动的脱标:
文字解释:
设置了浮动是元素会漂浮在标准流之上,不占用位置,浮动在上面,也称之为脱标。
图解:
举例:
html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Documenttitle> <style> .div1{ float: left; height: 200px; width: 200px; background-color: aqua; } .div2{ height: 800px; width: 800px; background-color: brown; } style> head> <body> <div class="div1">div1div> <div class="div2">div2div> body> html>
浮动的清除:
原因:
父级盒子在很多时候的高度不方便给出,则有可能造成 浮动的盒子影响到下方的标准流盒子。
清除的方法:
<1>隔墙法(额外标签)
方法:
在浮动标签后添加 空标签()或者其他标签(如br)
总结:
优点:书写简单
缺点:无意义标签较多导致结构化较差
举例:
html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Documenttitle> <style> .div1{ float: left; height: 200px; width: 200px; background-color: aqua; } style> head> <body> <div style="background-color: brown;"> <div class="div1"> div1 div> <div style="clear: both">div> <br> div> body> html><2>父级添加overflow属性
方法:
在父级的style内添加overflow,来解决
属性值:
属性值 解释 visible 不裁剪溢出的内容。浏览器把溢出来的内容呈现在其内容元素的显示区域以外的地方,全部内容在浏览器的窗口是可见的。 hidden 裁剪溢出的内容。内容只显示在其容器元素区域里面,这意味着只有一部分内容在浏览器窗口里面是可见的。 scroll 类似于hidden,浏览器将对溢出的内容进行裁切,但会显示滚动条以便让用户能够看到内容部分。 auto 类似于scroll,但是浏览器只在真的发生内容溢出的时候才会显示滚动条,如果内容没有溢出则不显示滚动条 总结:
优点:简洁,方便
缺点:溢出的内容无法显示出来
举例:
html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Documenttitle> <style> .div1{ float: left; height: 200px; width: 200px; background-color: aqua; } style> head> <body> <div style="background-color: brown; overflow: scroll;"> <div class="div1"> div1 div> div> body> html><3>使用after伪类:
方法:
使用after来代替<1>
总结:
优点:结构语义化
缺点:IE6-7不支持,需要使用zoom:1
举例:
html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Documenttitle> <style> .div1{ float: left; height: 200px; width: 200px; background-color: aqua; } .div2:after{ content: ""; display: block; height: 0; clear: both; visibility: hidden; } style> head> <body> <div class="div2" style="background-color: brown;"> <div class="div1"> div1 div> div> body> html><4>使用双伪类
方法:
使用before和after
总结:
优点:结构语义化
缺点:IE6-7不支持,需要使用zoom:1
举例:
html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Documenttitle> <style> .div1{ float: left; height: 200px; width: 200px; background-color: aqua; } .div2:before, .div2:after{ content: ""; display: table; } .div2:after{ clear: both; } style> head> <body> <div class="div2" style="background-color: brown;"> <div class="div1"> div1 div> div> body> html>
补充:
clear的解释:
clear属性指定一个元素是否必须移动(清除浮动后)到在它之前的浮动元素下面。clear 属性适用于浮动和非浮动元素。
属性值:
after和before伪类的补充:
属性值 说明 none
元素不会向下移动清除之前的浮动。
left
元素被向下移动用于清除之前的左浮动。
right
元素被向下移动用于清除之前的右浮动。
both
元素被向下移动用于清除之前的左右浮动。
inline-start
表示该元素向下移动以清除其包含块的起始侧上的浮动。即在某个区域的左侧浮动或右侧浮动。
inline-end
表示该元素向下移动以清除其包含块的末端的浮点,即在某个区域的右侧浮动或左侧浮动。
见此文章:点击查看
等待更新中。。。。。