这是浮动最早的被应用。比如我们有一张图片和一段文字:
<div style="border:1px dashed;padding:10px;"> <img src="/images/logo.png" style="float:left;" /> <p style="line-height: 25px;"> 昨天接了一个招聘“营销合伙人”的求职电话,给我说:现在我们这样的培训机构,“至少要花60%的精力做营销。 只要把生招到了,其他的问题都好解决…… 招个老师什么的,容易得很!” </p> </div>
只需要将 img 设置为左浮动(float:left),就会出现如下效果:
还可以设置为右浮动:float:right (演示)
这是一个很好的理解“浮动”的例子,浮动会对以下两者都造成影响:
实际上,浮动被广泛应用的还是布局(从而完全取代了表格布局),所以我们用这种常见布局结构来予以演示:
<body> <header> header:源栈欢迎你 </header> <article> article:<br />我们的飞哥棒棒哒! </article> <aside> aside:<br />大神小班 </aside> <footer></footer> </body>
CSS初始样式如下:
header{ background-color: aquamarine; height:30px; } article { background-color: blue; width: 200px; height: 300px; /*float:left;*/ } aside { background-color: greenyellow; width: 100px; height: 500px; /*float:right;*/ }
演示:只有article也浮动起来,aside才能“向上”移动。
因为如果article没有浮动,它就仍然占据着HTML文档中的一行;只有当天浮动起来,浮动的元素会脱离文档流,下面的aside才有可能“向上”移动。
演示:article和aside都向左浮动
说明:浮动不会导致重叠,aside虽然“尽量”向左移动,但不能覆盖article的区域。
但是,如果上面是一个流元素,流元素默认是流动的,无法阻拦浮动元素。如果挡住了浮动元素,还会被挤走。
header{ display:inline; }
如果已浮动元素的宽度+下面浮动元素的宽度 > 父元素内空宽度,上面的元素就无法向上浮动。换言之,一排装不下,后面的元素自动换行
前面的元素浮动,会影响后面的元素:有时候这是蛮讨厌的。
所以CSS允许用clear在元素上设置:
footer{ border: 1px dashed; clear: both; }
清除之前元素浮动对自己造成的影响。可选项有:
clear的使用是非常普遍的。
此外,浮动还会:
我们给article和aside外面添加一个main标签:
<main> <article> article:<br />我们的飞哥棒棒哒! </article> <aside> aside:<br />大神小班 </aside> </main>并给它添加一个背景色:
main{ background-color:grey; }
一旦article和aside都浮动起来,你就看不到main的背景色了。
这是因为当article和aside浮动起来,脱离原有的文档流,main里面就没有内容,所以它就“坍塌”了。
解决这个问题的一种流行做法,把这样一个空的div元素添加到main的底部:
<div style="clear:both;"></div>
就可以撑起main元素,避免上文所述的,因article和aside浮动造成的main元素坍塌!
当然,额外添加一个没有语义的HTML标签,不是那么“优雅”。
所以,还可以利用伪元素(复习)实现:
main::after{ content: " "; clear: both; display: block; }
在CSS中使用定位,需要指定以下要素:
|
代码 | 参照物 | 脱离文档流 |
固定定位 | position:fixed |
显示窗体屏幕 |
会 |
绝对定位 |
position:absolute |
最近一个定位的父元素,直到最外层元素 |
会 |
相对定位 |
position:relative |
本来应该在的位置 |
不会 |
所有定位的偏移都可由top/right/bottom/left指定,如下图所示:
偏移量既可以是正数也可以是负数,以top为例,正数就是向下偏移,负数就是向上偏移。
注意:通常我们只需要指定两个偏移量就能确定元素位置,不要画蛇添足引起冲突。
和浮动不同,定位会在脱离文档原有的、由x轴(横向)和y轴(纵向)构成的平面,产生一层一层的“z轴”上的顺序(z-index)。
于是,定位元素和未定位元素、定位元素和定位元素之间就会形成重叠。
CSS通过指定z-index来决定哪一个元素在上面哪一个元素在下面:z-index越大,越显示在前面。(z-index可以设置为负数)
注意:
只有加了position之后,z-index的设置才生效
z-index默认为0
PS:一般全局的普遍性的布局用float,局部的特殊的用定位
float布局一个最大的问题是:元素(不是文本)很难垂直居中。
CSS3引入了flex布局,很好的解决了这个问题,而且flex的底层设计逻辑也更“科学”(可以按比例“自适应缩放”),所以随着CSS3被越来越多的浏览器支持,flex布局也得到了越来越多的应用。
flex布局的关键是理解:
<div style="display:flex; /* 由此将该元素设置为flex container */"> <p style="width:200px; background-color:bisque;">item-1</p> <p style="width:300px; background-color:yellowgreen;">item-2</p> </div>如果没有display:flex设置,p标签应该按行上下排列;但现在:
注意没有浮动哟,没有display:inline哟!这就是flex布局起作用了。
display:flex;只能影响他的直接的子元素。
换言之,如果在container和items之间还隔了一层(演示),flex布局的效果就不会作用到原items上。
你也可以理解成:display:flex;不能被继承。
item上设置浮动无效,但可以设置position。
如果想要实现右对齐,可以适用margin-left:auto;反之亦然。且左右margin都设置为auto时,还可以居中!
以下内容,英文尚可的同学建议直接:https://css-tricks.com/snippets/css/a-guide-to-flexbox/,里面图文并茂,看图识意即可。
可以在container元素上设置的样式有:
设置items排列的方向。
可选项包括:
设置当一行/列不能摆放所有items是否可折叠,可选项包括:
以上两项可以合并简写成 flex-flow:<flex-direction> <flex-wrap>
设置items间的间隔距离,可选项包括:
设置每一个items如何在横轴上对齐。可选项包括:
把所有的items当做一个整体,确定其如何和container边框对齐。可选项包括:
具体还是看图吧……,(*/ω\*)
PS:以上所有选项第一项均为默认选项。
在items中,可以设置:
最后,用align-self可以覆盖container对当前item的定义。
@想一想@:flex布局有没有什么问题?
随着移动设备(比如iPad和手机)的普及,很多web项目,都要求既能同时在PC端和移动端上使用。
所以,如果页面的样式,能够根据屏幕宽度相应的调整就完美了——这就是响应式布局。
我们需要设置 meta 标签来告诉浏览器,让视口(网页的可视区域)的宽度等于设备的宽度,还可以禁止用户对页面进行缩放
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
接下来在css中使用@media(媒介,可理解为浏览器),指定
@media (min-width:500) { body{ background-color: blanchedalmond; } }
以上代码,意思是:仅当屏幕的宽度最小为500px的时候,才为body设置背景色。(演示)
.test { color: #090\9; /* For IE8+ */ *color: #f00; /* For IE7 and earlier */ _color: #ff0; /* For IE6 and earlier */ }目前这种做法已经非常少了……
通过添加前缀,可以让浏览器识别这个CSS样式“专属于”谁:
而且,现在还有了自动化工具:autoprefixer
CSS3还可以添加:
这些其实就是把以前需要用图片表示的东西,用CSS表现出来,减少网页的大小。所以:
否则,可以搞出来,但效果嘛……看你美感了,^_^
而且,从开发效率上来说,一定要使用像PhotoShop/Firework一样的可视化工具的,由工具自己生成CSS代码。
多快好省!前端后端,线上线下,名师精讲
更多了解 加: