目录
一.CSS初识(层叠样式表)
1.理想中的结果: 结构(html)与样式(css)相分离
2.作用:用于设置 HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面的布局和外观显示样式。
3.引入CSS样式表
<!-- 行内式(内联式):控制当前标签,没有实现样式和结构分离 --> <标签名 style="属性1:属性值1; ..."> 内容 </标签名> <!-- 内嵌样式表:写在head标签之间,控制当前页面,未彻底分离 --> <head> <style type="text/CSS"> 选择器(选择的标签) { 属性1: 属性值1; ... } </style> </head> <!-- 外部样式表:控制整个站点,实现样式和结构完全分离 --> <head> <link rel="stylesheet" type="text/css" href="css文件路径" /> </head>
二.CSS选择器
1.作用: 选择标签, 把想要的标签选择出来。
2.分类一:css基础选择器
①<!-- 关于多类名:各个类名中间用空格隔开,区分一下类选择器(写在css里的,用逗号或者其他符号隔开) -->
<div class="pink fontWeight font20">亚瑟</div>(写在标签里的)②id选择器和类选择器的区别:
类选择器可以被许多标签重复使用,id选择器仅能被一个标签使用(和JavaScript搭配使用)。
③通配符选择器:会影响页面响应速度,不推荐随便使用。
* { margin: 0; /* 定义外边距*/ padding: 0; /* 定义内边距*/ }
3.分类二:复合选择器
复合选择器:由两个或多个基础选择器,通过不同的方式组合而成的。
作用:选择更准确的目标元素标签。
3.1 后代选择器(包含选择器 重点)
.class h3{color:red;font-size:16px;} //空格分离
对子代目录下全部标签起效果,包括儿子的儿子。
3.2 子元素选择器
.class>h3{color:red;font-size:14px;} //>符号分离
只能对子代第一个亲儿子起效果,不包括儿子的儿子。
3.3 交集选择器
比如: p.one 选择的是: 类名为 .one 的 段落标签。
第一个为标签选择器,第二个为class选择器,两个选择器之间不能有空格!
3.4 并集选择器(重点)
<!-- .one 和 p 和 #test 这三个选择器都会执行颜色为红色,通常用于集体声明 --> .one, p , #test {color: #F00;}
任何形式的选择器(标签选择器、class类选择器id选择器等),都可以作为并集选择器的一部分,逗号隔开。
3.5 链接伪类选择器(重点)
a:link /* 未访问的链接 */ a:visited /* 已访问的链接 */ a:hover /* 鼠标移动到链接上 用的最多 */ a:active /* 鼠标没松手时的链接 */
记忆法则:love hate 爱上了讨厌 一定一定要按顺序写这些,不然会不起效果!实际开发中可能不会写全四个状态。
a { /* a是标签选择器 所有的链接 */ font-weight: 700; font-size: 16px; color: gray; } a:hover { /* :hover 是链接伪类选择器 鼠标经过 */ color: red; /* 鼠标经过的时候,由原来的 灰色 变成了红色 */ }
3.6 复合选择器总结
三.CSS字体样式属性调试工具
1.font字体
①谷歌默认文字大小:16px,不同浏览器默认大小可能不同,所以要在body样式中统一设置。
②可以同时指定多个字体,中间以逗号隔开,如果浏览器不支持第一个字体,则会尝试下一个,直到找到合适的字体, 如果都没有,则以电脑默认的字体为准。
<!-- 注意中文字体名需要添加英文双引号,尽量使用系统默认字体 --> p {font-family: Arial,"Microsoft Yahei", "微软雅黑";}
③font:综合设置字体样式:一定不可以颠倒顺序!必须保留font-size和font-family属性,其他可以省略。
选择器 { font: font-style font-weight font-size font-family;}
2.css外观属性
①颜色:#FF0000 = #F00 = 红,#00FF00 = #0F0 = 绿,#0000FF = #00F = 蓝
②text-align文本水平对齐方式:是让盒子里面的内容水平居中, 而不是让盒子居中对齐。
③一般情况下,行高比字号大7、8像素就可。如谷歌:line-height: 24px;(16px+8px)
④首行缩进2个字: text-indent: 2em; 1个em(字符宽度的倍数)就是1个字的大小 。
⑤none:无下划线;underline:下划线;overline:文本上方划线;line-through:删除线。
3.开发者工具(chrome)
①谷歌浏览器中:“按F12”或者是 “shift+ctrl+i” 打开开发者工具。/ 菜单: 右击网页空白出--检查。
②左侧是html页面结构,右侧是css样式,css样式可以改动数值和颜色查看更改后效果,但最后要回源文件中保存修改。
4. sublime快捷操作emmet语法
//生成标签 直接输入标签名 按tab键即可。 比如 div+tab //生成多个相同标签 加上 * 就可。 比如 div*3 = 快速生成3个div //生成带有类名或者id名字, 直接写 .demo 或者 #two + tab 键 //有父子级关系的标签 用 >。 比如 ul > li*n //有兄弟关系的标签 用 +。 比如 div+p //生成的div类名是有顺序的 可以用 自增符号 $ .demo$*3 <div class="demo1"></div> <div class="demo2"></div> <div class="demo3"></div>
5.第三模块综合案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>第三部分综合案例-体育页面</title> <style> body { font-size: 16px; /* 设置页面整体默认字体大小 */ } .title { font-weight: 400; /*让字体不加粗,400相当于normal */ /*color: #FF6700;*/ /* 十六进制 */ /*color: rgb(255,103,0);*/ /* rgb */ } em { font-style: normal; /*让倾斜的标签 不倾斜*/ } .people { text-decoration: underline; /* 去除链接下划线 */ } .btn { color: green; font-weight: 700; /* 相当于字体加粗 */ } .tac { text-align: center; /*文本 水平居中对齐*/ } p { line-height: 26px; /*行高 */ text-indent: 2em; /*首行缩进2个字的距离em是倍数关系,1em就是1个字的距离 */ } ... </style> </head> <body> <!-- 同时采用两个类名,表示调用两个类选择器 --> <h1 class="title tac"> 这里是标题 </h1> <div class="tac"> <span class="time">2017年07月16日20:11</span> <span class="people"> 新浪体育 评论中大奖 (11人参与)</span> <a href="#">收藏本文</a> <input type="text" value="请输入查询条件" class="search" /> <input type="button" value="搜索" class="btn" /> </div> <hr /> <p> 新浪体育讯 7月16日是燕京啤酒<em>[微博]</em>2017中国足协杯... </p> ... </body> </html>
四.标签显示模式 / CSS三大特性等
4.1 标签显示模式(display)重点
1.标签显示模式:标签以什么方式显示,比如div 自己占一行, span 一行可以放很多个。
2.标签分类:块标签(块元素)、行内标签(行内元素)
3.常见的 块元素 有:<h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>等。
4.块元素特点:(1)自己独占一行。
(2)高度,宽度(默认是容器(父级宽度)的100%)、外边距以及内边距都可以控制。
(4)是一个容器,里面可以放行内或者块级元素(p、hx、dt等除外,这里只能放文字)。
5.常见的 行内元素(内联元素) 有<a>、<strong>、<b>、<em>、<i>、<del>、<s>、<ins>、<u>、<span>等。
6.行内元素特点: (1)一行可以显示多个。(2)高、宽(默认宽度就是它本身内容的宽度)直接设置是无效的。
(3)行内元素只能容纳文本或则其他行内元素。
7.常见的 行内块元素:<img />、<input />、<td>,可以对它们设置宽高和对齐属性。
8.行内块元素的特点:(1)一行可以显示多个。
(2)默认宽度就是它本身内容的宽度。
(3)高度,行高、外边距以及内边距都可以控制。
9.display总结:
块转行内:display:inline;
行内转块:display:block;
块、行内元素转换为行内块: display: inline-block;
4.2 行高
1.行高 = 上距离 + 内容高度 + 下距离
2.上距离和下距离总是相等的,因此文字看上去是垂直居中的。
3.行高和高度的三种关系:
①行高 = 高度 文字会 垂直居中
②行高 > 高度 文字会 偏下
③行高 < 高度 文字会 偏上
4.3 CSS背景(background)
background-color:颜色值; 默认值是 transparent 透明的 /*背景图片 1. 必须加url 2. url 里面的地址不要加 引号*/ background-image : none | url (url) background-image : url(images/demo.png); background-repeat : repeat(默认纵横平铺) | no-repeat(常用) | repeat-x | repeat-y background-position :x y //一定按照先左右x、再上下y的顺序 设置背景图片位置 background-position : length || length //10px 10px /*background-position: 50px 10px ;*/ background-position : position || position //top | bottom | left | center | right /*background-position: right top; 右上角*/ /*background-position: 10px center;*/ //混合使用:距离左边x10px,上下y居中 /*这种写法一般是我们以后 超大背景图片的做法 背景定位*/ background-position: center top; /*背景固定的*/ background-attachment: fixed; /*background: 背景颜色 背景图片地址 背景平铺 背景滚动 背景位置;*/ background: #ccc url(images/sms.jpg) no-repeat fixed center top; /*背景透明:rgba:.2相当于0.2 表示透明度(范围是0-1)*/ background: rgba(0, 0, 0, .2);
导航栏实例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .nav { /*让里面的6个链接 居中对齐水平 这句话对 行内元素 行内块元素都有效果的*/ text-align: center; } .nav a { /*有大小的 因为a 是行内元素 不能直接设置宽度和高 必须要转换 行内块元素*/ display: inline-block; width: 120px; height: 50px; /*行高等于盒子的高度 就可以让单行文本垂直居中*/ line-height: 50px; color: #fff; /*background-color: pink;*/ text-decoration: none; /*背景简写*/ background: url(images/bg.png) no-repeat; } /*鼠标经过nav里面的链接, 背景图片更换一下就好了*/ .nav a:hover { background-image: url(images/bgc.png); } </style> </head> <body> <div class="nav"> <a href="#">网站首页</a> <a href="#">网站首页</a> <a href="#">网站首页</a> <a href="#">网站首页</a> <a href="#">网站首页</a> <a href="#">网站首页</a> </div> </body> </html>
效果展示:
4.4 CSS三大特性(层叠性、继承性、优先级)
1.层叠性:样式冲突,遵循的原则是 就近原则 。
... <style> div { color: red; font-size: 30px; } <!-- 此处会根据就近原则决定采用下方的div,颜色为粉色--> div { color: pink; } </style> </head> <body> <div> 长江后浪推前浪,前浪死在沙滩上。 </div> ...
2.继承性:子元素可以继承父元素的样式(text-,font-,line-这些元素开头的可以继承,以及color属性)
<style> div { color: red; } </style> </head> <!-- 未设置<p>的颜色,但是p继承了div的颜色,王思聪为红色 --> <body> <div> <p>王思聪</p> </div>
3.CSS优先级(重点)
值从左到右,左面的最大,一级大于一级,数位之间没有进制,级别之间不可超越(比如0,0,1,0 >0,0,0,12)。
<style> /*div { color: red; }*/ /*标签选择器 权重 0,0,0,1 小组长*/ div { color: pink!important; } /*类选择器 权重 0,0,1,0 班长*/ .one { color: blue; } /*id 选择器 权重 0,1,0,0 班主任*/ #two { color: green; } /*style= 行内样式表 权重 1,0,0,0 校长*/ /*!important 在样式属性的后面添加 权重最高 ∞ 教育局局长*/ /*最后显示为粉色*/ </style> </head> <body> <div class="one" id="two" style="color: yellow;"> 权重还有30秒到达战场 </div>
五.盒子模型(CSS重点)
1.网页布局本质:
首先利用CSS设置好盒子的大小,然后摆放盒子的位置。
最后把网页元素比如文字图片等等,放入盒子里面。
2.盒子模型(Box Model):元素的内容、边框(border)、内边距(padding)、和外边距(margin)组成。
3.盒子边框(border):
border : border-width || border-style || border-color <!-- border-collapse:collapse; 表示相邻边框合并在一起,否则边框会重叠加粗 --> <style> table { width: 500px; height: 300px; border: 1px solid red; /*复合写法 没有顺序*/ } td { border: 1px solid red; /*可以先设定总体边框,再在下面设置单独border-left的样子*/ text-align: center; } table, td { border-collapse: collapse; /*合并相邻边框*/ } </style>
4.内边距(padding):内容与盒子之间的距离。
内容和边框有了距离,添加了内边距,盒子会变大,所以设置宽高后,要减去内边距,从而维持盒子原有大小。
如果没有给一个盒子指定宽度, 此时,如果给这个盒子指定padding, 则不会撑开盒子。
padding复合写法:
新浪导航栏的核心就是因为里面的字数不一样多,所以我们不方便给宽度,还是给padding ,撑开盒子的。
<style> /*清除元素默认的内外边距*/ * { margin: 0; padding: 0; } .nav { height: 41px; background-color: #FCFCFC; /*上边框*/ border-top: 3px solid #FF8500; /*下边框*/ border-bottom: 1px solid #EDEEF0; } .nav a { /*转换为行内块*/ display: inline-block; /*行高=高度:保证字居中显示*/ height: 41px; line-height: 41px; color: #4C4C4C; /*代表 上下是 0 左右是 20 内边距*/ padding: 0 20px; text-decoration: none; font-size: 12px; } .nav a:hover { background-color: #eee; } </style> </head> <body> <div class="nav"> <a href="#">设为首页</a> ... <a href="#">关注我</a> </div> </body>
目标效果:
5.外边距(margin):盒子和盒子之间的距离。
块级盒子水平居中:①必须设置宽度,给左右外边距设置auto。
- margin-left: auto; margin-right: auto;
- margin: auto;
- margin: 0 auto;
text-align: center; /* 文字 行内元素 行内块元素水平居中 */ margin: 10px auto; /* 块级盒子水平居中 左右margin 改为 auto 上下margin都可以 */
6.插入图片和背景图片的区别
- 插入图片 比如产品展示类 移动位置只能靠盒模型 padding margin
- 背景图片 用于小图标背景 或者 超大背景图片 移动位置只能通过 background-position
img { width: 200px; /* 插入图片更改大小 width 和 height */ margin-top: 30px; /* 插入图片更改位置 可以用margin 或padding 盒模型 */ margin-left: 50px; /* 插入当图片也是一个盒子 */ } div { width: 400px; background: #fff url(images/sun.jpg) no-repeat; background-position: 30px 50px; /* 背景图片更改位置 我用 background-position */ }
7.清除元素内外边距(重要)
行内元素为了照顾兼容性, 尽量只设置左右内外边距, 不要设置上下内外边距。
* { padding:0; /* 清除内边距 */ margin:0; /* 清除外边距 */ } /*这是一个神奇的代码 以后写css 第一句话*/
8.外边距合并(使用margi定义块元素垂直外边距时)
(1)相邻块元素垂直外边距的合并
当上下相邻的两个块元素相遇时,如果上面的元素有下外边距margin-bottom,下面的元素有上外边距margin-top,则他们之间的垂直间距 ≠ margin-bottom + margin-top,而是 取两个值中的较大者 ,这种现象被称为相邻块元素垂直外边距的合并(也称外边距塌陷)。
解决方案:只给一个盒子添加margin
(2)嵌套块元素垂直外边距的合并(塌陷)
<style> .father { width: 500px; height: 500px; background-color: pink; /*嵌套关系 垂直外边距合并 解决方案 */ /*1. 可以为父元素定义上边框 transparent 透明*/ /*border-top: 1px solid transparent;*/ /*2. 可以给父级指定一个 上 padding值*/ /*padding-top: 1px; */ /*3. 可以为父元素添加overflow:hidden。*/ overflow: hidden; } .son { width: 200px; height: 200px; background-color: purple; margin-top: 100px; } </style> </head> <body> <div class="father"> <div class="son"></div> </div> </body>
9.盒子模型布局稳定性
width > padding > margin
原因:width无问题,padding会影响盒子大小,margin会有外边距合并。
10.ps基本操作
- 文件--打开 -- 可以打开 我们要测量的图片
- ctrl+r 可以打开标尺 或者 视图 -- 标尺
- 右击标尺, 把里面的单位改为 像素
- ctrl+ 加号 键 可以 放大 视图 ctrl+ 减号 缩小视图
- 按住空格键, 鼠标可以 变成小手 ,拖动 ps 视图
- 用选区 拖动 可以 测量 大小
- ctrl+ d 可以取消选区 或者旁边空白处点击一下也可以取消选区
11.去掉 列表 li 默认样式(小圆点)
li { list-style: none; }
12.圆角边框css3
border-radius: 50%; /*让一个正方形变成圆形,也可替换成半径长度20px*/
13.盒子阴影css3
div { width: 200px; height: 200px; border: 10px solid red; /* box-shadow: 5px 5px 3px 4px rgba(0, 0, 0, .4); */ /* box-shadow:水平位置 垂直位置 模糊距离 阴影尺寸(影子大小) 阴影颜色 内/外阴影; */ box-shadow: 0 15px 30px rgba(0, 0, 0, .4); /* 外阴影 (outset) 是默认的 但是不能写 想要内阴影可以写 inset */ /* 前两个属性是必须写的。其余的可以省略 */ }
效果展示:
14.css书写规范
(1)空格规范
/*选择器 与 { 之间必须包含空格*/ .selector { } /*属性名 与 : 之间不许空格, : 与 属性值 之间必须有空格*/ font-size: 12px;
(2)选择器规范
/* 并集选择器,每个选择器声明必须独占一行 */ /* good */ .post, .page, .comment { line-height: 1.5; } /* bad */ .post, .page, .comment { line-height: 1.5; } /* 选择器的嵌套层级应不大于 3 级,位置靠后的限定条件应尽可能精确 */ /* good */ #username input {} .comment .avatar {} /* bad */ .page .header .login input {} .comment div * {}
15.总结
六.浮动
1.网页布局的核心——就是用 CSS来摆放盒子。
CSS提供了3 种机制来设置盒子的摆放位置,分别是普通流(标准流)、浮动、定位。
2.浮动:让多个盒子div水平排成一行,最早用来控制图片,实现文字环绕图片效果。
口诀:浮、漏、特
<style> .one { /*不是标准流了, 漂浮起来, 相当于不占位置,浮在标准流的上面*/ float: left; width: 200px; height: 200px; background-color: pink; } .two {/*是标准流,因为浮动.one不占位置,所以.two在.one下面*/ width: 300px; height: 300px; background-color: purple; } </style>
效果:
口诀:浮、漏、特
div { width: 200px; height: 200px; background-color: pink; /* 转换为行内块元素,可以水平显示,不过 div 之间有间隙,不方便处理 */ /* display: inline-block; */ /* 设置浮动属性,可以让 div 水平排列,并且没有间隙 */ float: left; }
就是说 float 可以实现 inline-block 的效果,让元素可以一排显示,并且没有空隙。
浮动的元素互相贴靠一起的,但是如果父级宽度装不下这些浮动的盒子, 多出的盒子会另起一行对齐。
3.float应用(重要):小米案例模仿
一个完整的网页,是 标准流 + 浮动 + 定位 一起完成的。
<style> /*清除元素默认内外边距样式*/ * { margin: 0; padding: 0; } /*清除列表样式 前面的小点点*/ li { list-style: none; } .box { /*总体大盒子水平居中处理*/ width: 1226px; height: 615px; background-color: pink; margin: auto; } .left { /*左边left盒子作漂浮处理,会飘在大盒子的上方*/ float: left; width: 234px; height: 615px; background-color: purple; } .left img { /*左边盒子放的图片宽度应该跟left盒子一样宽*/ /*width: 234px;*/ width: 100%; /*百分百表示宽度占据盒子宽度的100%*/ } .right { /*右边right盒子作漂浮处理,会飘在大盒子的上方*/ float: right; width: 992px; height: 615px; background-color: skyblue; } .right li { /*对右边盒子内的块元素li作漂浮处理,不能给其他的设置*/ float: left; width: 234px; height: 300px; background-color: pink; margin-left: 14px; /*利用左边距来让盒子出现空白间隔,一定是左边距,看样图*/ margin-bottom: 14px; } </style> </head> <body> <!-- 总体架构:设置大盒子box,包括一个左边的盒子left,右边的盒子ul列表 --> <div class="box"> <div class="left"> <img src="images/mi.jpg" alt=""> </div> <ul class="right"> <li>1</li> ... <li>8</li> </ul> </div> </body>
结果展示:
4.导航栏案例:实际重要的导航栏中,不会直接用链接a 而是用 li 包含链接(li+a)的做法。
直接用a,搜索引擎容易辨别为有堆砌关键字嫌疑(故意堆砌关键字容易被搜索引擎有降权的风险),从而影响网站排名
5.浮动的扩展
1). 浮动元素与父盒子的关系
- 子盒子的浮动参照父盒子对齐
- 不会与父盒子的边框重叠,也不会超过父盒子的内边距
2). 浮动元素与兄弟盒子的关系
在一个父级盒子中,如果前一个兄弟盒子是:
- 浮动的,那么当前盒子会与前一个盒子的顶部对齐,即水平摆成一排;
- 普通流的,那么当前盒子会显示在前一个兄弟盒子的下方,因为普通流占据空间,所以不会让盒子浮上来。
- 浮动只会影响当前的或者是后面的标准流盒子,不会影响前面的标准流。
3).如果一个盒子里面有多个子盒子,如果其中一个盒子浮动了,其他兄弟也应该浮动。防止引起问题。
6.清除浮动(clear)
目的:解决父级元素因为子级浮动引起内部高度为0 的问题。清除浮动之后, 父级就会根据浮动的子盒子自动检测高度。
使用场景:①父级没高度 ②子盒子浮动了 ③影响下方布局,则清除浮动。
/*很多情况下,我们的父盒子,不方便给高度 根据内容撑开,有多少内容,我的父盒子就有多高*/ .one { width: 500px; /*background-color: pink;*/ border: 1px solid red; /*清除浮动 方法二:给父级添加 overflow 就可以清除浮动 不需要加新标签*/ overflow: hidden; } /*因为damao 二毛 浮动了,不占有位置, 而父级又没有高度, 所以two 就到底下去了*/ .damao { float: left; width: 200px; height: 200px; background-color: purple; } .ermao { float: left; width: 250px; height: 250px; background-color: skyblue; } .two { width: 700px; height: 150px; background-color: #000; } /*清除浮动 方法一:额外标签法*/ .clear { clear: both; } /*清除浮动 方法三:给父级添加after伪元素*/ /*下面是固定代码,要在父元素类名中引用.clearfix*/ .clearfix:after { content: ""; display: block; height: 0; visibility: hidden; clear: both; } .clearfix { *zoom: 1; /*ie6,7 专门清除浮动的样式*/ } /*清除浮动 方法四:给父级添加双伪元素*/ /*下面是固定代码,要在父元素类名中引用.clearfix*/ .clearfix:before, .clearfix:after { content: ""; display: table; } .clearfix:after { clear: both; } .clearfix { *zoom: 1; /*ie6,7 专门清除浮动的样式*/ } </style> </head> <body> <div class="one clearfix"> /*父级元素盒子*/ <div class="damao"></div> /*子级元素兄弟一*/ <div class="ermao"></div> /*子级元素兄弟二*/ <div class="clear"></div> /*清除浮动 方法一:额外标签法*/ </div> <div class="two"></div> /*可能会被上述浮动干扰的其他普通流盒子*/ </body>
效果展示:
7.ps切图插件( cutterman插件要求你的ps 必须是完整版)
官网: http://www.cutterman.cn/zh/cutterman
①用切片选中图片:选完之后 -- 图层菜单:新建基于图层的切片 -- 利用辅助线切图(基于参考线的切片)
②导出切片:文件菜单 -- 存储为web设备所用格式 ---- 选择 我们要的图片格式 ---- 点存储 --- 别忘了选中的切片
辅助线和切片的使用及清除:视图菜单 -- 清除 辅助线/ 清除切片
8.行高等与高度只能让单行文本垂直居中,两行不可。
9.子盒子宽度可以比父盒子大。
10.总结
七.学成在线(结构分析)
1.CSS属性书写顺序(重点)
- 布局定位属性:display / position / float / clear / visibility / overflow(建议 display 第一个写,毕竟关系到模式)
- 自身属性:width / height / margin / padding / border / background
- 文本属性:color / font / text-decoration / text-align / vertical-align / white- space / break-word
- 其他属性(CSS3):content / cursor / border-radius / box-shadow / text-shadow / background:linear-gradient …
2.布局流程:版心(可视区)、分析行模块以及每个行中的列、制作html结构、运用盒子模型divcss控制模块
3.页面制作(结构分析):这个页面的版心是 1200像素 每个版心都要水平居中对齐,所以,我们干脆把版心定义为:
.w { width: 1200px; margin: auto; }
(1)头部制作
- 1号是版心盒子header 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了。
- 版心盒子 里面包含 2号盒子 logo
- 版心盒子 里面包含 3号盒子 nav导航栏
- 版心盒子 里面包含 4号盒子 search搜索框
- 版心盒子 里面包含 5号盒子 user个人信息
- 注意,要求里面的 4个盒子 必须都浮动
(2)banner制作
- 1号盒子是通栏的大盒子banner, 不给宽度,给高度,给一个蓝色背景。
- 2号盒子是版心, 要水平居中对齐。
- 3号盒子版心内,左对齐 subnav侧导航栏。
- 4号盒子版心内,右对齐 course 课程。
(3)课程表模块
- 1号盒子 是 228 * 300 的盒子 右浮动 注意 浮动的元素 不会有外边距塌陷的问题
- 1号盒子内 分为 上下 两个 子盒子
- 2号子盒子是 上部分 我们命名为 course-hd (hd 是 head 的简写 头部的意思,我们经常用)
- 3号子盒子是 下部分 我们命名为 course-bd (bd 是 body 的简写 主体的意思,我们经常用)
(4)精品推荐小模块
- 复习点: 因为里面三个盒子都要垂直居中,利用继承性,给最大的盒子 一个垂直居中的代码就好了,哪些 样式可以继承吗? Ans: font- line- text- color
- 大盒子水平居中 goods 精品 ,注意此处有个盒子阴影
- 1号盒子是标题 H3 左侧浮动
- 2号盒子 里面放链接 左侧浮动 goods-item 距离可以控制链接的 左右外边距(注意行内元素只给左右内外边距)
- 3号盒子 右浮动 mod 修改
(5)精品推荐大模块
- 1号盒子为最大的盒子 box 版心水平居中对齐
- 2号盒子为上面部分 box-hd -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动
- 3号盒子为底下部分 box-bd --- 里面是无序列表 有 10个 小li 组成
- 小li 外边距的问题, 这里有个小技巧。 给box-hd 宽度为 1215 就可以一行装开5个 li了
- 复习点: 用到清除浮动 因为 box-hd 里面的盒子个数不一定多少,就不给高度了,但是里面的盒子浮动了, 影响下面的布局,此时需要浮动
(6)底部模块制作
- 1号盒子通栏大盒子 底部 footer 给高度 底色是白色
- 2号盒子版心水平居中
- 3号盒子版权 copyright 左对齐
- 4号盒子 链接组 links 右对齐
八.定位
1.定义:将盒子定在标准流和浮动的上面,定位 = 定位模式 +边偏移
2.边偏移:
3.定位模式(position)
3.1 静态定位(static)-了解
默认方式,相当于无定位;按照标准流摆放,没有边偏移,几乎用不到。
3.2 相对定位(relative)-重要
- 相对于自己原来在标准流中位置来移动的。
- 原来在标准流的区域继续占有,后面的盒子仍然以标准流的方式对待它。
3.3 绝对定位(absolute)-重要
①完全脱标(不占原来的位置) ②父没定位就以浏览器为定位 ③父有定位就以父(或者祖先)进行定位。
绝对定位要和父级搭配使用:父级相对定位,子级绝对定位。
原因:父级需要占有位置,相对定位可按照标准流处理父级元素,子级可以随意摆放,绝对定位完全脱标。
3.4 固定定位(fixed)-重要
特殊的绝对定位:完全脱标,只认浏览器可视窗口 + 边偏移属性,和父级是否定位没关系。
4.哈根达斯:分析浮动和定位
//一个大的居中 div 包含 3 张图片; //2 张小图片重叠在广告图片上方 —— 脱标,不占位置,需要使用绝对定位; //2 张小图片分别显示在左上角和右下角 —— 需要使用边偏移确定准确位置。 <style> .box { //父亲相对定位,这样可以让其他元素把他当标准流处理 position: relative; width: 310px; height: 190px; border: 1px solid #ccc; margin: 100px auto; padding: 10px; } .top { //子级绝对定位,位于父级上面不占用位置,且可以被准确移动定位。 position: absolute; top: 0; left: 0; } .bottom { position: absolute; bottom: 0; right: 0; } </style> </head> <body> <div class="box"> <img src="images/top_tu.gif" alt="" class="top"> <img src="images/adv.jpg" alt=""> <img src="images/br.gif" alt="" class="bottom"> </div> </body>
效果展示:
结论:
- 绝对定位:脱标,利用边偏移指定准确位置;
- 浮动:脱标,不能指定准确位置,让多个块级元素在一行显示
5.新浪头条:分析固定定位
.top { /*因为没有写宽度 默认的宽度是内容的宽度*/ /*此时我们需要给这个top 盒子 通栏的盒子*/ /*所以以后,定位的盒子,很多情况下,需要单写宽度*/ /*所以以后,定位的盒子,如果需要通栏 那我们宽度就给 100%*/ width: 100%; position: fixed; top: 0; height: 44px; /*background-color: pink;*/ text-align: center;
- 在使用固定定位时,如果盒子中没有内容,需要指定宽度
- 设置底部内容图片的顶部
margin
,可以让底部盒子初始显示在顶部图片的下方。6.绝对定位盒子居中(不可以通过 margin:auto)
<style> div { /*绝对定位 margin 左右auto 不能让盒子水平居中*/ position: absolute; /*1.left 50% 走父亲宽度的一半*/ left: 50%; /*2.margin-left 左走自己宽度的一半 一定注意是 负值*/ margin-left: -100px; width: 200px; height: 200px; background-color: pink; /*标准流 margin 左右auto 就可以让盒子水平居中*/ /*margin: auto;*/ } </style>
7.堆叠顺序(z-index)
定位盒子:默认后来者居上。
该属性只能应用于相对/绝对/固定定位,其他标准流/浮动/静态定位无效。
8.定位改变displaly属性
转换行内块方法:inline-block / float默认转换 / 绝对/固定定位。
一个行内的盒子,如果加了浮动、固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽高。
浮动元素、绝对定位(固定定位)元素的都不会触发外边距合并的问题。
9.网页布局
一个完整的网页,有标准流 、 浮动 、 定位一起完成布局的。每个都有自己的专门用法。
1). 标准流:可以让盒子上下排列 或者 左右排列
2). 浮动:可以让多个块级元素一行显示 或者 左右对齐盒子 浮动的盒子就是按照顺序左右排列
3). 定位:有层叠的概念,可以让多个盒子 前后 叠压来显示。 但每个盒子需要测量数值
10.淘宝轮播
.taobao { /*子绝父相 绝对定位不可以margin:auto 但是相对定位可以*/ position: relative; width: 520px; height: 280px; background-color: pink; margin: 100px auto; } /*并集选择器 集体声明 让代码更简洁*/ .arrow-l, .arrow-r { /*只能用定位来做,才能压住盒子*/ /*不要占有位置 随便移动位置 必须用绝对定位*/ position: absolute; /*垂直居中公式*/ /*1. 走父级高度的 50%*/ top: 50%; /*2. 往上走 自己高度 的一半*/ margin-top: -15px; /*绝对定位的盒子 无须转换,直接给大小就好了*/ width: 20px; ... } .arrow-l { left: 0; /*圆角矩形*/ /*border-radius: 15px;*/ /*右上角*/ border-top-right-radius: 15px; /*右下角*/ border-bottom-right-radius: 15px; } .arrow-r { right: 0; text-align: right; /*border-radius: 左上角 右上角 右下角 左下角;*/ border-radius: 15px 0 0 15px; } .arrow-l:hover, .arrow-r:hover { //并集表达式,鼠标移动到左右按钮上颜色改变 background: rgba(0, 0, 0, .4); } .circle { //小圆点浮在图片上面,所以绝对定位 position: absolute; //绝对定位居中方法 left: 50%; margin-left: -35px; width: 70px; background: rgba(255, 255, 255, 0.3); //白色半透明小圆点 border-radius: 7px; } .circle li { float: left; ... border-radius: 50%; //设置成圆角方法 } /*current 当前的意思 此处一定要注意 优先级的问题 当前小圆点染色*/ .circle .current { background-color: #ff5000; } </style> </head> <body> <div class="taobao"> <!-- 左按钮 --> <a href="#" class="arrow-l"> < </a> <!-- 右按钮 --> <a href="#" class="arrow-r"> > </a> <!-- 图片 --> <img src="images/taobao.jpg" alt=""> <!-- 小圆点 --> <ul class="circle"> <li></li> <li class="current"></li> ... </ul> </div>
效果展示:
九.高级技巧
1.元素的显示和隐藏
场景:类似网站广告,当点击关闭就不见了,重新刷新页面,会重新出现。
1.1 display 显示(重点)
display: none 隐藏对象 display:block 除了转换为块级元素之外 还可显示元素 //隐藏之后,不再保留原来的位置 //配合后s做特效,下拉菜单,原先没有,鼠标经过,显示下拉菜单
1.2 visibility 可见性 (了解)
visibility:visible ; 对象可视 visibility:hidden; 对象隐藏 //隐藏之后,继续保留原有位置
1.3 overflow 溢出(重点)
<style> div { /*overflow: hidden;*/ /*溢出隐藏 -- 超出盒子大小的部分 隐藏起来*/ /*overflow: scroll;*/ /*显示滚动条总是会显示 - 不会超出盒子大小 内容能显示全但是 太丑了我们不常用*/ overflow: auto; /*1.如果超出,就显示滚动条 2.如果不超出,不显示滚动条 ... } </style>
1.4 总结
1.5 土豆显示与隐藏实例
<style> .box { position: relative; margin: 100px auto; ... } /*1. 原来盒子里面装有一个 黑色半透明的盒子 刚开始是看不见的隐藏*/ .mask { display: none; position: absolute; top: 0; left: 0; //下面是给黑色小盒子添加背景图片播放按钮 background: rgba(0, 0, 0, .3) url(images/arr.png) no-repeat center; } /*2. 鼠标经过的时候,a里面的这个黑色半透明的盒子就显示出来了*/ .box a:hover .mask { display: block; } </style> </head> <body> <div class="box"> <a href="#"> <div class="mask"></div> //这个地方放一个黑色空盒子 <img src="images/3.jpg" alt=""> </a> </div> </body>
效果展示: 鼠标移动上去后:
2. CSS用户界面样式
2.1 鼠标样式 cursor
<ul> <li style="cursor:default">我是小白</li> <li style="cursor:pointer">我是小手</li> <li style="cursor:move">我是移动</li> <li style="cursor:text">我是文本</li> <li style="cursor:not-allowed">我是禁止</li> </ul>
2.2 轮廓线 outline
<input type="text" style="outline: 0;"/> <!-- 也可以设置为 outline:none; 表示取消轮廓线 -->
2.3 防止拖拽文本域 resize
<textarea style="resize: none;"></textarea>
3. vertical-align 垂直对齐
仅用于行内元素或者行内块元素,对块级无效!
默认的图片会和文字基线对齐,导致产生图片底边空白。
去除图片在div中底下的空白方法:
div img { /*因为默认的是基线对齐,所有底册有空白缝隙*/ /*1. 只要不是 基线对齐就好了*/ /*vertical-align: baseline;*/ /*vertical-align: bottom;*/ /*vertical-align: middle;*/ /*2. 块级元素来说 vertical-align: 是无效的 就不会有基线对齐的问题了*/ display: block; }
4. 溢出的文字省略号显示
<!-- white-space:用于强制一行显示内容 --> white-space:normal ; //默认处理方式 white-space:nowrap ; //强制在同一行内显示所有文本,直到文本结束或者遭遇br标签对象才换行。 <!-- text-overflow 文字溢出 --> text-overflow : clip ; //不显示省略标记(...),而是简单的裁切 text-overflow:ellipsis ; // 当对象内文本溢出时显示省略标记(...) <!-- 总结三部曲 --> /*1. 先强制一行内显示文本*/ white-space: nowrap; /*2. 超出的部分隐藏*/ overflow: hidden; /*3. 文字用省略号替代超出的部分*/ text-overflow: ellipsis;
5.CSS精灵技术(sprite)-重点
5.1 精灵技术目的:为了有效地减少服务器接受和发送请求的次数,提高页面的加载速度。
5.2 解决方法:将页面中的大小背景图片(不是插入图片)放在一张大图片上,这样只需请求一次服务器。
5.3 步骤:
- 精确测量,每个小背景图片的大小和位置。
- 给盒子指定小背景图片时, 背景定位基本都是负值。
5.4 拼出pink:
<style> div { //这里设置了四个字母背景的公共属性,就不需要在下面重复写了 float: left; background: url(images/abcd.jpg) no-repeat; } .p { //wh是背景大小 backgro-position是背景在精灵图中的位置,多为负值 width: 92px; height: 108px; background-position: -497px -278px; } ... </style> ... <body> pink <div class="p"></div> ... </body>
效果展示:
6.滑动门技术
<li> <a href="#"> <span>导航栏内容</span> //经典布局a中包含span标签 </a> </li>
6.1 核心技术:利用CSS精灵(背景位置)和盒子padding撑开宽度,,来适应不同字数的导航栏。
6.2 步骤:
<style> /*1. a 是设置左侧背景(左门)*/ a { /*因为是滑动门,左右推拉 跟文字内容多少有关系,需要用文字撑开盒子,指定高度,用到行内块*/ display: inline-block; height: 33px; background: url(images/to.png) no-repeat; margin: 100px; padding-left: 15px; color: #fff; } /*2. span 是设置 右侧 背景 (右门)*/ a span { display: inline-block; height: 33px; /*一定注意 span 需要背景图片 右对齐*/ background: url(images/to.png) no-repeat right top; padding-right: 15px; } /*3 因为整个导航栏都是链接所以 a 要包含 span */ </style>
7.margin负值之美
突出显示某个商品列表中的盒子:
<style> div { /*浮动的盒子是紧贴在一起的*/ float: left; /*想象产品列表*/ width: 200px; ... margin-left: -1px; /*此处可以让重复部分的边框没那么粗…*/ margin-top: -1px; } /*鼠标经过div 的意思 p:hover */ div:hover { /*让当前鼠标经过的这个div 升到最高处*/ border: 1px solid #f40; /*保证当前的这个盒子 是定位 就会压住标准流和浮动盒子*/ position: relative; /*只能用相对定位 它是占位置的 否则会被其他元素占据原来的位置造成无法显示*/ /*都是定位的盒子,通过z-index 来实现层级关系*/ z-index: 1; } </style>
8.CSS三角形
绘制原理及效果:
<style> div { /*我们用css 边框可以模拟三角效果*/ /*宽度高度为0*/ width: 0; height: 0; border-top: 10px solid red; border-right: 10px solid green; border-bottom: 10px solid blue; border-left: 10px solid pink; } p { width: 0; height: 0; border-style: solid; border-width: 10px; /*4个边框都要写, 只保留需要的边框颜色,其余的不能省略,都改为 transparent 透明*/ border-color: transparent transparent transparent red; /*为了照顾兼容性 低版本的浏览器,加上 font-size: 0; line-height: 0;*/ font-size: 0; line-height: 0; } </style>
模仿京东三角形:
<style> div { position: relative; width: 200px; height: 100px; background-color: pink; margin: 100px auto; } p { position: absolute; top: -40px; //下面p的粗细为40px 所以向上移动露出完整的p left: 50%; //表示块级元素居中 margin-left: -20px; width: 0; //设置三角形基本步骤 height: 0; border-style: solid; border-width: 20px; border-color: transparent transparent pink transparent; font-size: 0; //照顾兼容性低版本浏览器 line-height: 0; } </style> </head> <body> <div> <p></p> </div> </body>
十.综合案例
1.HTML结构简写:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>学成在线</title> <link rel="stylesheet" href="style.css"> </head> <body> <!-- 固定的左侧边栏 --> <div class="fixedbar"></div> <!-- header头部模块开始 --> <div class="header w"> <!-- logo --> <div class="logo"> <img src="images/logo.png" alt=""> </div> <!-- nav --> <div class="nav"> <ul> <li><a href="#">首页</a></li> <li><a href="#">课程</a></li> <li><a href="#">职业规划</a></li> </ul> </div> <!-- search --> <div class="search"> <input type="text" value="输入关键词"> <button></button> </div> <!-- user --> <div class="user"> <!--使得用户名和头像正中间对齐--> <img src="images/user.jpg" alt="" style="vertical-align: middle;"> lilei-hanmm </div> </div> <!-- header头部模块结束 --> <!-- banner 部分start --> <div class="banner"> <div class="w"> <!-- 左侧 subnav --> <div class="subnav"> <ul> <li><a href="#">前端开发 <span>></span></a></li> ... <li><a href="#">产品 <span>></span></a></li> </ul> </div> <!-- 右侧 course --> <div class="course"> <div class="course-hd">我的课程表</div> <div class="course-bd"> <ul> <li> <h4>继续学习 程序语言设计</h4> <p>正在学习-使用对象</p> </li> ... </ul> <a href="#" class="all">全部课程</a> </div> </div> </div> </div> <!-- banner 部分end --> <!-- goods START --> <div class="goods w"> <h3> 精品推荐 </h3> <div class="goods-item"> | <a href="#">jQuery</a> | <a href="#">Spark</a> | <a href="#">MySQL</a> | <a href="#">JavaWeb</a> | <a href="#">MySQL</a> | <a href="#">JavaWeb</a> </div> <div class="mod"> 修改兴趣 </div> </div> <!-- goods END --> <!-- box start --> <div class="box w"> <div class="box-hd"> <h3>精品推荐</h3> <a href="#">查看全部</a> </div> <!-- 此地方一定要清除浮动,务必务必务必,不确定高度,会影响这个模块的布局 --> <div class="box-bd clearfix"> <ul> <li> <img src="images/hot.png" alt="" class="hot"> <img src="images/pic.jpg" alt=""> <h4>Think PHP 5.0 博客系统实战项目演练</h4> <p><span>高级</span> • 1125人在学习</p> </li> ... </ul> </div> </div> <!-- box end --> <!-- box start --> <div class="box w"> <div class="box-hd"> <h3>精品推荐</h3> <a href="#">查看全部</a> </div> <!-- 此地方一定要清除浮动,务必务必务必 --> <div class="box-bd clearfix"> <!-- 重复上面的模块 --> </div> </div> <!-- box end --> <!-- footer start --> <div class="footer"> <div class="w"> <!-- 左侧 --> <div class="copyright"> <img src="images/logo.png" alt=""> <p>学成在线致力于普及中国最好的教育...</p> <a href="#" class="app"> 下载 app</a> </div> <!-- 右侧 --> <div class="links"> <dl> <dt>关于学成网</dt> ... </dl> <dl> <dt>新手指南</dt> ... </dl> <dl> <dt>合作伙伴</dt> ... </dl> </div> </div> </div> <!-- footer end --> </body> </html>
2.CSS样式简写
/*css 初始化代码 css reset*/ /*清除元素默认的内外边距*/ * { margin: 0; padding: 0; } /*清除列表样式*/ li { list-style: none; } /*取消表单的轮廓线*/ input { outline: none; } /*去掉button 默认自带的边框*/ button { border: none; } body { background-color: #f3f5f7; /*方便写代码 一会别忘了删除*/ /*height: 3000px;*/ } a { text-decoration: none; } /*清除浮动的*/ .clearfix:before, .clearfix:after { content: ""; display: table; } .clearfix:after { clear: both; } .clearfix { *zoom: 1; } /*版心 1200 水平居中*/ .w { width: 1200px; margin: auto; } /*这是左边随着窗口滚动 跟着滚动的广告部分*/ .fixedbar { position: fixed; top: 200px; left: 50%; z-index: 999; /*-600 版心的一半 + 自己的宽度 = 780 */ margin-left: -790px; width: 180px; height: 420px; background-color: pink; } /*header start*/ .header { height: 42px; /*background-color: pink;*/ margin: 30px auto; } .logo { float: left; margin-right: 60px; } .nav { float: left; } .nav ul li { float: left; } .nav ul li a { display: block; height: 40px; padding: 0 10px; margin-right: 20px; line-height: 40px; font-size: 18px; color: #050505; text-decoration: none; } /*鼠标经过链接 才有底边框*/ .nav ul li a:hover { border-bottom: 2px solid #00a4ff; } .search { float: left; margin-left: 70px; } .search input { float: left; width: 340px; height: 40px; border: 1px solid #00a4ff; border-right: 0; padding-left: 20px; color: #ccc; } .search button { float: left; width: 50px; height: 42px; background: url(images/btn.png); } .user { float: left; height: 42px; line-height: 42px; margin-left: 30px; font-size: 14px; color: #666; } /*banner start*/ .banner { height: 420px; background: #1c036c url(images/banner2.jpg) no-repeat top center; } .subnav { float: left; width: 150px; height: 420px; padding: 0 20px; /*背景半透明*/ background: rgba(0, 0, 0, .3); } .subnav li { height: 45px; line-height: 45px; } .subnav li a { color: #fff; font-size: 14px; text-decoration: none; } .subnav li a:hover { color: #00b4ff; } .subnav span { float: right; } .course { /*因为course 子盒子有了浮动,则就不会外边距塌陷的问题了*/ float: right; width: 228px; height: 300px; background-color: #fff; margin-top: 50px; } .course-hd { height: 48px; background-color: #9bceea; font-size: 18px; text-align: center; line-height: 48px; color: #fff; /*文字加粗*/ /*font-weight: bold;*/ font-weight: 700; } .course-bd { /*没有宽度的盒子 padding 不会撑开盒子*/ padding: 0 15px; } .course-bd ul { /*外边距塌陷的问题 margin-top: 10px;*/ padding-top: 10px; } .course-bd li { /*行高等与高度 只能让单行文本垂直居中*/ height: 50px; border-bottom: 1px solid #ccc; margin-top: 10px; } .course-bd li h4 { font-size: 14px; color: #4e4e4e; } .course-bd li p { font-size: 12px; color: #a5a5a5; } .all { display: block; height: 38px; border: 1px solid #00a4ff; margin-top: 10px; font-size: 16px; color: #00a4ff; text-align: center; line-height: 38px; } .all:hover { background-color: #00a4ff; color: #fff; } /*banner end*/ /*goods start*/ .goods { height: 60px; background-color: #fff; margin-top: 10px; /*利用行高可以继承的特性*/ line-height: 60px; box-shadow: 2px 2px 2px rgba(0, 0, 0, .2); } .goods h3 { float: left; margin: 0 30px; font-size: 16px; color: #00a4ff; } .goods-item { float: left; color: #bfbfbf; } .goods-item a { font-size: 16px; color: #050505; margin: 0 30px; } .mod { float: right; margin-right: 30px; font-size: 14px; color: #00a4ff; } /*goods end*/ /*box start*/ .box { margin-top: 15px; } .box-hd { height: 60px; line-height: 60px; /*background-color: pink;*/ } .box-hd h3 { float: left; font-size: 20px; color: #494949; /*让粗体不加粗 400 == normal*/ font-weight: 400; } .box-hd a { float: right; margin-right: 30px; font-size: 12px; color: #a5a5a5; } .box-bd { /*这个盒子一定不要给高度 因为我们可能放一行 也可能是2行 或者n行*/ /*box-bd 宽度 超过了 版心 1200 是可以的,就就解决了问题*/ width: 1215px; } .box-bd li { position: relative; float: left; width: 228px; height: 270px; margin-right: 15px; margin-bottom: 15px; background-color: #fff; box-shadow: 2px 2px 2px rgba(0, 0, 0, .3); } .box-bd li img { width: 100%; } .box-bd .hot { position: absolute; top: 0; right: -4px; width: 40px; } .box-bd li h4 { margin: 20px; font-size: 14px; color: #050505; font-weight: 400; } .box-bd li p { margin: 0 20px; font-size: 12px; color: #999; } .box-bd p span { color: orange; } /*box end */ /*footer*/ .footer { height: 385px; padding-top: 30px; background-color: #fff; } .copyright { float: left; } .copyright p { font-size: 12px; color: #666; margin: 20px 0 15px 0; } .app { display: block; width: 118px; height: 34px; border: 1px solid #00a4ff; text-align: center; line-height: 34px; font-size: 16px; color: #00a4ff; } .links { float: right; } .links dl { float: left; margin-left: 100px; } .links dt { height: 35px; font-size: 16px; color: #333; } .links dd a { font-size: 12px; color: #333; } .links dd a:hover { color: #004aff; }
3.效果: