CSS(Part3)
CSS盒子模型
盒子模型
页面布局三大核心:盒子模型、浮动、定位
看透网页布局的本质
网页布局过程:1.先准备好相关的网页元素,网页元素基本都是盒子Box;2.利用CSS设置好盒子样式,然后放到相应位置;3.往盒子里面装内容。
网页布局的核心本质:用CSS摆盒子
盒子模型(Box Model)组成
盒子模型就是把HTML页面中的布局元素看作是一个矩形盒子,也就是一个盛装内容的容器
CSS盒子模型本质上是一个盒子,封装周围的HTML元素,它包括:边框border、外边距margin、内边距padding、实际内容content
边框border:边框宽度(粗细)、边框样式、边框颜色
border: border-width||border-style||border-color
实线边框
border-style: solid;
虚线边框
border-style: dashed;
点线边框
border-style: dotted;
边框的复合写法:
border: 1px solid red;
没有顺序边框分开写法:
border-top(上边框)/border-bottom/left/right: 1px solid red;
表格的细线边框border-collapse:控制相邻单元格边框
border-collapse: collapse;
表示相邻边框合并在一起
边框会影响盒子实际大小,变大
内边距(padding):边框与内容之间的距离
padding-left/right/top/bottom
内边距的复合写法:
padding: 5px; 上下左右
padding: 5px 10px;上下,左右
padding: 5px 10px 20px;上,左右,下
padding: 5px 10px 20px 30px;上,右,下,左(顺时针)
padding会影响盒子实际大小,变大
padding应用-新浪导航栏
字数不一样,给盒子相同的padding合理
小米侧边栏修改
padding可以撑开盒子,修改宽度
padding不会撑开盒子的情况
盒子本身没指定width/height属性
外边距margin
设置外边距,即控制盒子和盒子之间的距离
margin-left/margin-right/margin-top/margin-bottom
margin简写方式和padding一样
外边距典型应用-块级盒子水平居中对齐
条件:1.盒子必须指定了宽度;2.盒子左右的外边距都设置为auto
.header{width: 960px;margin: 0 auto;}
常见写法
margin-left: auto;margin-right auto;
margin: auto;
margin: 0 auto;
(常用)上下是0,左右是auto
行内元素和行内块元素水平居中
给父元素添加
text-align: center
即可
外边距合并(垂直方向才有)
相邻块元素垂直外边距的合并
概念:上下相邻两个块元素(兄弟关系)相遇时,上盒子有下外边距,下盒子有上外边距,它们之间的垂直间距不是margin-bottom与margin-top之和,取两个值中较大者
解决方案:尽量只给一个盒子添加margin值
嵌套块元素垂直外边距的塌陷
概念:对于两个嵌套关系(父子关系)的块元素,两都有外边距,此时父元素会塌陷较大的外边距值
解决方案:1.可以为父元素定义上边框;(border: 1px solid transparent(透明的);)2.可以为父元素定义上内边距;(padding 1px;)3.可以为父元素添加overflow: hidden; 还有其他方法,比如浮动、固定,绝对定位的盒子不会有塌陷问题,后面学了再总结
清楚内外边距
网页元素有很多默认的内外边距,而且不同游览器默认的不一致,所以我们在布局前,首先要清楚网页元素的内外边距。
* { (通配符选择器符号)
padding: 0;
margin: 0;
} /* 这句话也是CSS的第一行代码*/
行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下。但转换为块级和行内块元素就可以了
PS基本操作
大部分切图工作都是在PS完成
测量:1.截图保存,PS打开文件;2.标尺ctrl+r,右击标尺改成像素;3.放大缩小ctrl++/-,移动按空格然后鼠标动;4.用选区,选择矩形选框工具,拖动,测量大小;5.ctrl+d或点击旁边空白区域取消选区。
取色:吸管工具,取色,复制。
综合案例
小米
产品模块布局分析
box布局
图片和段落制作
评价和详情制作
竖线细节制作
快报
快报模块布局分析
快报模块头部制作
快报模块列表制作
去掉li前面的项目符号(小圆点)
list-style: none;
圆角边框
border-radius: length;(数值越大,弧度越大)
原理:(椭)圆与边框的交集形成圆角效果
使用:
参数可以是数值也可以百分比
如果是正方形,数值可以直接设为50%
如果是个矩形,设置为高度的一半
两个值:左上右下、右上左下
四个值:左上角、右上角、左下角、右下角
分开写:border-top-left/right-radius、border-bottom-right/left-radius
盒子阴影box-shadow
box-shadow: h-shadow v-shadow blur spread color inset ;
h-shadow必需。水平阴影位置,允许负值
v-shadow必需。垂直阴影位置,允许负值
blur可选。模糊距离
spread可选。阴影的尺寸
color可选。阴影的颜色。可以这样
rgba(0,0,0,.3);
设透明度insert可选。将外部阴(outsert(默认。不能出现))改为内部阴影
不占空间
文字阴影text-shadow
text-shadow: h-shadow v-shadow blur color;
h-shadow必需。水平阴影位置,允许负值
v-shadow必需。垂直阴影位置,允许负值
blur可选。模糊距离
color可选。阴影颜色
CSS浮动
浮动float
传统网页布局的三种方式
网页布局的本质——用CSS摆盒子。
CSS提供的针对PC端的:普通流(标准流)、浮动、定位
标准流(普通流/文档流):标签按默认方式排列。是最基本的布局方式
为什么需要浮动?很多布局效果用标准流无法完成,此时可用浮动完成。因为浮动可改变元素标签默认的排列方式。
浮动最典型应用:让多个块级元素一行内排列显示
网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动。
什么是浮动:float属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。
语法:
选择器 { float: 属性值 ; }
none元素不浮动(默认)
left元素向左浮动
right元素向右浮动
浮动特性(重难点)
浮动元素会脱离标准流(脱标)
脱离标准普通流的控制(浮)移动到指定位置(动)
浮动的盒子不再保留原先的位置
浮动元素会一行内显示并且元素顶部对齐
之间无空隙,顶部对齐
浮动元素会具有行内块元素的特性
任何元素都能设置浮动,设后具有行内块特性
浮动元素经常和标准流父级搭配使用
为约束浮动元素位置,网页布局一般策略:
先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置。符合网页布局第一准则。
浮动布局练习-小米布局
浮动练习-手机模块
网页布局第二准则:先设置盒子大小,再设置盒子位置
常见网页布局
画盒子,游览器一样宽指定高即可
浮动布局注意:1.和标准父盒子搭配;2.一浮全浮,浮动盒子只影响其后标准流
清除浮动
为什么?无限/父盒不方便给高度;浮动不占位,父高为0,影响其下标准流。->让孩子撑开父盒。
清除浮动本质:清除浮动元素造成的影响;
选择器{ clear: 属性值 }(left/right/both)
清浮动策略:闭合浮动
清除浮动方法:
1.额外标签法(隔墙法):在末尾添空标签(标签必块级元素)或其他如<br/>
2.父添overflow属性,值:hidden/auto/scroll
3.父添after伪元素:
.clearfix: after{
content:"";
display:block;
height:0;
clear:both;
visibility:hidden;
}
.clearfix{ /*IE6、7专用*/
*zoom:1;
}
4.父添双伪元素:
.clearfix:before,.clearfix:after{
content:"";
display:table;
}
.clearfix:after{
clear:both;
}
.clearfix{
*zoom:1;
}
PS切图
* 常见图片格式:
* jpg(JPEG)
* 特点:高清
* 应用:产品类图片
* gif
* 特点:透明背景
* 应用:图片小动画,简单图形字体
* png
* 结合以上两者(高清+透明背景)
* 应用:背景透明图片
* PSD
* 保留图层
* 应用:方便信息提取
* 交接提醒:psd>>ps>>图层
* 实现:
* 图层切图:图层导出png
* 切片切图:切片工具>>导出为web所用格式
* ps插件切图:Cutterman(代替手动切片)
* 交接提醒:完整版>>扩展,像素大厨倒闭
定位
定位position
为什么?元素自由在盒移动并压其他盒子
定位组成:定位=定位模式(定 定位方式)+边偏移(定 最终位置)
定位模式:
(属性)position:(值) static/relative/absolute/fixed/skicky
边偏移:(属性)
top/bottom/left/right
。eg:top: 80px ;子绝父相
由来:1.子绝、不占位,放父任一位;2.父需加定位限制子;3.父布局需占位,相对
固定到版式右侧:1.left:50%;2.margin-left版宽度一半
定位叠放次序z-index
定位拓展
绝对定位的盒子居中left:50%,magin-left:负值
定位特殊特性(类似浮动):行内元素可设宽高,块级元素不设默认内容大小
投标盒不触发外边距塌陷
浮动压盒子但不压文字(文字环绕效果),绝对定位完全压住内容
案例-淘宝焦点图
网页布局总结:标准流、浮动、定位
元素的显示与隐藏
display: none/block;
(搭配JS)visibility(可见性):inherit(继承父可见)/visible(常用)/hidden(常用)/collapse(对表格的)
overflow溢出:visible/auto(推荐)/hidden/scroll
CSS高级技巧
精灵图
* 原理:把小图像合成一张大图
* 目的:减少服务器请求次数,提高页面加载速度
* 实现:对于每个盒子,靠移动背景图片调整到图标显示位置
* 交接提醒:坐标方向
字体图标
* 特点:
* 显示图片,本质文字
* 轻量级,减少服务器请求
* 灵活修改
* 兼容性强
* 应用:
* 简单小图标:字体图标
* 复杂小图片:精灵图
* 下载网站:
* icomoon
* 阿里iconfont
* 引入:
* fonts复制一份放到页面根目录下
* 把style里面第一段复制到<style>里面
* 复制demo里面的小方框(`<span>小方框</span>`)
* 声明字体系列(`font-family:'icomoon';`和style里面的第一句声明一样)
* 追加
* incomoon>>lcoMoon App>>import>>选择selection文件>>GenerateFont F>>删掉原来的文件夹
CSS三角
无宽高,四边设不同颜色,三边透明
div {
width: 0;
height: 0;
line-height: 0; (照顾低版本,为兼容)
font-size: 0; (照顾...)
border: 50px solid transparent;
border-left-color: pink;
}
实例:京东三角
CSS用户界面样式
鼠标样式cursor
default 小白,默认
pointer 小手
move 移动
text 文本
not-allowed 禁止
轮廓线outline
取消表单轮廓:
input{outline: 0;或none;}
防止拖拽文本域(textarea)resize
textarea{ resize: none; }
取消轮廓:
input,textarea{outline: none;}
文本域尽量在一行写,不然会有空白区域
<textarea name="" id="" cols="30" rows="10"></textarea>
vertical-align属性应用
使用场景:设置图片或表单(行内块元素)和文字垂直对齐。只针对行内元素或行内块元素有效。
vertical-align: baseline(默认基线对齐) | top | middle | bottom
解决图片底部默认空白缝隙问题
问题原因:默认和文字基线对齐
解决:1.给图添:
vertical-align: middle|top|bottom
等(提倡);2.把图片转位块级元素:display: block;
。不推荐因为独占一行
溢出的文字省略号显示
单行文字
满足条件
1.先强制一行显示文本
white-space: nowrap;
(默认值normal自动换行)
2.超出部分隐藏
overflow: hidden;
3.文字用省略号替代超出部分
text-overflow: ellipsis;
多行文字
有较大兼容性问题,适合webKit游览器或移动端
overflow: hidden:
text-overflow: ellipsis;
弹性伸缩盒子模型显示
display: -webkit-box;
限制在一个块元素显示的文本行数
-webkit-line-clamp: 2;
设置或检索伸缩盒对象的子元素的排列方式
-wevkit-box-orient: vertical;
常见的布局技巧
margin负值巧妙运用
边框1+1=2,往左走压住一条边框:
margin-left: -1;
鼠标放上,边框变色,但是被压。解决:鼠标经过提高盒子层级(没定位,加相对定位(保留位置);有定位,加z-index)
文字围绕浮动元素巧妙运用
直接写文字,放图给图片加浮动,浮动元素不压文字
行内块的巧妙运用
页码布局:行内块,设宽高;父亲
text-align:center;
就能居中;小于<大于>
CSS三角巧妙运用
比如淘宝价钱现价VS原价。
原理:先有个矩形,再来个三角形覆盖一边,就可以变成梯形。
怎么做直角三角形?左边和下边边框宽度设为0,上边框宽度变大,右边宽稍小。
border-color: transparent red transparent transparent ;
border-style: solid ;
border-width: 100px 50px 0 0 ;