视觉格式化模型,大体上将页面中盒子的排列分为三种方式:
1. 常规流
2. 浮动
3. 定位
1. 文字环绕
字体环绕
2. 横向排列
修改float属性值为:
- left:左浮动,元素靠上靠左
- right:右浮动,元素靠上靠右
默认值为none
1. 当一个元素浮动后,元素必定为块盒(更改display属性为block)
2. 浮动元素的包含块,和常规流一样,为父元素的内容盒
1. 宽度为auto时,适应内容宽度
2. 高度为auto时,与常规流一致,适应内容的高度
3. margin为auto,为0.
4. 边框、内边距、百分比设置与常规流一样
1. 左浮动的盒子靠上靠左排列
2. 右浮动的盒子考上靠右排列
3. 浮动盒子在包含块中排列时,会避开常规流块盒
4. 常规流块盒在排列时,无视浮动盒子
5. 行盒在排列时,会避开浮动盒子
6. 外边距合并不会发生
> 如果文字没有在行盒中,浏览器会自动生成一个行盒包裹文字,该行盒叫做匿名行盒。
高度坍塌的根源:常规流盒子的自动高度,在计算时,不会考虑浮动盒子
清除浮动,涉及css属性:clear
- 默认值:none
- left:清除左浮动,该元素必须出现在前面所有左浮动盒子的下方
- right:清除右浮动,该元素必须出现在前面所有右浮动盒子的下方
- both:清除左右浮动,该元素必须出现在前面所有浮动盒子的下方
网页布局中经常要定义元素的宽和高。但很多时候我们希望元素的大小能够根据窗口或子元素
自动调整,这就是pc自适应。
自适应的优点:
元素自适应在网页布局中非常重要,它能够使网页显示更灵活,可以适应在不同设备、不同窗口和不同分辨率下显示。
元素宽度设置为100%。(块元素宽度默认为100%)
或者不设置宽度(width);(宽度是父元素的宽度)
1)自适应元素高度:height:auto;或者不设置;(是子元素撑开父元素的高度)
2)元素高度自适应窗口高度
设置方法:html,body{height:100%;}
注:如果设置子元素的高度跟随父元素的高度变化而变化,那么父元素必须有高度。
min-height属性:最小高度;(IE6浏览器不识别该属性)
hack1:min-height:value;_height:value;
hack2:min-height:value; height:auto!important;height:value;
当子元素有浮动并且父元素没有高度的情况下父元素会出现高度塌陷
hack1:给父元素添加声明overflow:hidden;(触发一个BFC)
hack2: 在浮动元素下方添加空div,并给该元素添加 声明:div{clear:both; height:0; overflow:hidden;}
hack3:万能清除浮动法
选择符:after {
content: "";
clear: both;
display: block;
height: 0;
overflow: hidden;
visibility: hidden;
}
visibility:hidden;和display:none;的区别:
visibility:hidden;属性会使对象不可见,但该对象在网页所占的空间没有改变,等于留出了一块空白区域,而 display:none属性会使这个对象彻底消失不显示,也不再占用位置。
1)、::after : 与content属性一起使用,定义在对象后的内容。
语法:选择符::after{content:”文字”;}
选择符::after{content:url(图片路径);}
如:div::after{content:url(logo.jpg);}
div::after{content:"文本内容";}
2)、::before: 与content属性一起使用,定义在对象前 的内容。
div::before{content:"在其前放内容";}
3)、::first-letter 定义对象内第一个字符的样式。
说明:
*(该伪元素只能用于块级元素)
4)、::first-line:定义对象内第一行的样式。
*(该伪元素只能用于块级元素。)
本文转自知乎号:千锋HTML5学院
以前我写网的网页习惯的网页都是定宽的,比如最外层设置一个宽度为980px的盒子,这是因为那时候的网页主要显示在pc端上,而pc端显示器的大小差异不会特别大。于是固定宽度的样式写法成为了流行趋势。但是随着移动互联网的到来,设备类型的增多,如智能手机,平板。那么屏幕大小的差异也就凸显出来了,如果每一个屏幕设备宽度写一个样式的话,会发现存在大量重复的样式代码,且工作量会很大,于是我们需要一种减少重复样式,让样式能够自动适应屏幕的解决方案就出来了:"响应式"。我们知道不同的设备拥有不同屏幕大小即视口(viewport),那么我们不可能一个样式适应所有的屏幕大小,那么响应式解决的就是网站自动去识别不同屏幕,然后去使用对应的样式去适应屏幕。
注:“视口”(viewport),指显示网页的区域
为了能够让我们的网页去适应屏幕的大小,我们需要添加一个meta属性
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
至此我们解决了让网页自动适应不同的视口大小,但是不同的视口大小要显示不同的样式,我们还需要借助媒体查询来完成。CSS3规范分成很多模块,媒体查询(3级)只是其中一个模块。利用媒体查询,可以根据设备的能力应用特定的CSS样式。比如,可以根据视口宽度、屏幕宽高比和朝向(水平还是垂直)等,只用几行CSS代码就改变内容的显示方式。媒体查询得到了广泛实现。除了古老的IE(8及以下版本),几乎所有浏览器都支持它。
媒体查询的语法
说了这么多媒体查询长什么样子呢,我们来看一点示例代码。
div {
background:green
}
@media screen and (min-width:350px){
div {
background:red
}
}
@media表示媒体查询代码,上面的内容含义是,如果是屏幕设备,并且视口宽度大于等于350px那么就会把div的背景颜色设置为红色,由于代码是由上向下循序解析的,所以,背景色红色会覆盖上面的背景色绿色的代码。
注:因为我们接触的设备都是有屏幕的所以screen可以省略
<link rel="style sheet" type="text/css" media="(min-width:350px)" href="index.css">
这里会告诉浏览器,视口宽度大于等于350px时才加载index.css样式文件。
@import url("base.css") screen and (max-width:350px);
css中可以通过import来导入其他的样式文件,这里告诉浏览器视口宽度大于等于350px时才加载base.css样式文件。
@media screen and (min-width:350px){
div {
background:red
}
}
这里告诉浏览器视口宽度大于等于350px时把div的背景色设置为红色。
媒体查询中支持的属性
其他媒体查询最常用的属性就是min-width和max-width,其他的属性你可能一辈子都用不上
开发者不可能知道或预见浏览网站的所有设备,只有浏览器在打开和渲染内容时才会知道使用它的设备的具体情况(屏幕大小、设备能力等)。另一方面,只有开发者(你和我)知道自己手里有几种大小的图片。比如,我们有同一图片的三个版本,分别是小、中、大,分别对应于相应的屏幕大小和分辨率。浏览器不知道这些,我们得想办法让它知道。简言之,难点在于我们知道自己有什么图片,浏览器知道用户使用什么设备访问网站以及最合适的图片大小和分辨率是多少,两个关键因素无法融合。
使用picture元素
<picture>
<source media="(min-width: 750px)" srcset="source-medium.jpg">
<source media="(min-width: 350px)" srcset="source-small.jpg">
<img src="source.jpg">
</picture>
以上代码会根据视口宽度来适应使用不同的图片,如果视口宽度大于等于750px那么使用source-medium.js图片,否则,如果视口宽度大于等于350px使用source-small.jpg图片,否则都不满足条件使用source.jpg图片。这里source的顺序很重要,根据min-width大小按顺序进行编写,相反如果使用max-width就需要倒序编写。这样就可以根据不同大小视口使用不同大小的图片。
虽然<picture>很好用,但浏览器支持并不是全面。幸运的是,您可以在不支持此元素的浏览器中使用,方法就是使用Picturefill.js,下载地址: https://scottjehl.github.io/picturefill。
<script>document.createElement("picture");</script>
<script src="js/picturefill.min.js" async></script>
第一个<script>块用于无法识别<picture>元素的浏览器,如果浏览器在Picturefill完成加载之前用HTML解析它们,就可以防止出现问题。然后第二个块加载Picturefill库。
max-width
img {
max-width: 100%;
}
这里声明max-width,就是要保证所有图片最大显示为其自身的100%(即最大只可以显示为自身那么大)。此时,如果包含图片的元素(比如包含图片的body或div)比图片固有宽度小,图片会缩放占满最大可用空间。
为什么不用width:100%?
如果使用width:100%的话那么,图片的宽度就会是父容器的宽度,如果父容器的宽度大于图片的真实宽度,那么图片就会被拉伸变形。而max-width:100%则不会,因为宽度默认是auto那么会显示真实宽度,如果宽度大于父容器宽度,也会等比例缩放到父容器宽度
在很早很早之前,网站的宽度大都以百分比形式定义。百分比布局使得网页宽度能够随着查看它们的屏幕窗口大小变化,因而得名弹性布局。后来出现了固定宽度的布局方式,现如今,我们要做响应式设计了,又得回头捡起弹性布局设计。相信前端人员都用过flexbox,使用起来也非常的爽,之前垂直居中,瀑布流等写起来非常痛苦,但flexbox就很方便的解决了这些问题。
前缀
flexbox是css3中的属性,所以为了兼容各种浏览器需要添加各种浏览器对应的前缀,一下提供自动加前缀的方法:
主要属性
flex中没有水平和垂直的说法,只有主轴和侧轴的说法,比如,flex-direction:row,那么你的主轴方向为水平方向,侧轴方向为垂直方向,于是,justify-content: center以主轴方向对齐即当前为水平方向对齐,align-content: center以侧轴方向对齐即当前为垂直方向对齐,flex-direction:clunm反之亦然
垂直居中
<style>
div{
width: 400px;
height: 300px;
margin: 200px auto;
display: flex;
flex-direction: row; //默认主轴方向是row即水平方向
flex-wrap: wrap; //允许换行
align-content: center; //设置侧轴方向居中
background-color: paleturquoise;
}
p{
width: 100px;
height: 100px;
line-height: 100px;
background-color: rebeccapurple;
text-align: center;
}
</style>
<div>
<p>hello world</p>
</div>
水平偏移
*请认真填写需求信息,我们会在24小时内与您取得联系。