目录
1.语法风格&代码规范:
(1)语法规范
(2)注释
(3)代码风格
(4)注意事项
2.选择器分类
(1)基础选择器
1)标签选择器
2)类选择器
3)id选择器
4)通配符选择器
(2)复合选择器
1)后代选择器 (重要)
2)子选择器
3)并集选择器(重要)
(3)伪类选择器
1)链接伪类选择器(重要)
2):focus伪类选择器
3.CSS字体属性
(1)font-family:设置文字字体
(2)font-size:设置字体大小
(3)font-weight:调整字体粗细
(4)font-style:设置文字样式
(5)字体复合属性
4.CSS文本属性
(1)text-align:文本水平对齐方式
(2)color:文本颜色
(3)text-indent:文本缩进
(4)text-decoration:文本装饰
(5)line-height:行间距(行高)
5.CSS引入方式
(1)内部样式表:
(2)行内样式表:
(3)外部样式表:
6.Chrome调试工具
7.Emmet语法
(1)快速生成html结构
(2)快速生成css样式
(3)vscode中好用的功能
8.CSS元素显示模式
1.块元素:
2.行内元素(内联元素)
3.行内块元素
4.元素显示模式转换
9.文字垂直方向居中显示
10.CSS的背景属性
(1)background-color 背景颜色
(2)background-image 背景图片
(3)background-repeat 背景平铺
(4)background-position: x y; 背景图片的位置
(5)background-attachment 背景图像是否固定
(6)background: 背景样式的 复合性写法
(7)背景属性总结
11.CSS三大特性
1.层叠性
2.继承性
3.优先级
12.CSS盒子模型
(1)边框(border)
(2)内边距(padding)
(3)外边距(margin)
1)外边距典型应用:
2)外边距的合并:
3)嵌套块元素垂直外边距的塌陷
13.清除内外边距
14.PS
1.测量网页元素大小
2.PS切图:
15.案例总结:
16.圆角边框(重点)
17.盒子阴影(重点)
18.文字阴影
19.CSS浮动-float
1.float 属性:
2.浮动特性(重难点!)
(1)浮动元素会脱离标准流(脱标)
(2)浮动元素会一行内显示且沿着元素顶端对齐
(3)浮动的元素--都具有行内块元素的特性
(4)浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流。
(5)一浮全浮: 有一个孩子浮动了,其余的兄弟元素都要浮动才行,要不然没用。
3.清除浮动
清除浮动方法:
(1)额外标签法(隔墙法)
(2)父级元素添加 overflow属性(重点)
(3)父级元素添加 after伪元素(重点)(百度,网易,淘宝用此法)
(4)父级元素添加 双伪元素(重点)(小米,腾讯 用此法)
20.学习开发流程&遵循规则/思路/注意事项
21.CSS定位
1.相关知识:
1.1.定位模式:
1.2.边偏移:
2.定位
1.静态定位static
2.相对定位relative(重要)
3.绝对定位absolute(重要)
4.固定定位 fixed(重要)
5.粘性定位sticky
6.定位的总结:
7.定位叠放次序 z-index
8.定位知识拓展
9.案例--淘宝轮播图
22.元素的显示与隐藏
1.display属性(重点!!!!最常用)
2.visibility属性
3.overflow属性
4.案例:
CSS高级技巧:
1.精灵图 sprites
2.字体图标 iconfont
1.字体图标的下载
2.字体图标的引用:
3.CSS三角形
4.CSS用户界面样式
5.vertical-align属性&应用
6.常见布局技巧
属性手册网址:http://css.doyoe.com/
概念:CSS是层叠样式表(Cascading Style Sheets)/CSS样式表/级联样式表
1.语法风格&代码规范:
(1)语法规范:
选择器 {
属性名: 属性值;
属性名: 属性值;
}
(2)注释:
/* ctrl+/ */
(3)代码风格:
i.选择器后面带空格,属性名的冒号后面也带空格,这样比较舒服
ii.每个属性和属性值最好独占一行,属性值结尾别忘了分号;
iii.选择器,属性名,属性值 全部用小写字母,特殊情况除外
(4)注意事项:
px不可省略
<style> /* 语法规范: 选择器{属性名:属性值; 属性名:属性值;} */ p { color: blueviolet; font-size: 20px; /*这里必须加px */ } </style>
复制
2.选择器分类
(1)基础选择器
1)标签选择器
语法:HTML标签名称{…} , 按照标签名分类。
作用:为某一类标签设置统一的CSS样式。
特点:不能差异化选择
优点:能快速为页面中 同类型的标签 设置统一样式。
缺点:不能设计差异化样式,只能选择全部的同类标签,太局限了。
使用频率:较多
<style> /* 标签选择器: 标签名 {……} */ p { color: blueviolet; font-size: 20px; /*这里必须加px */ } div { color: blue; font-size: 30px; } </style> </head> <body> <h2>********************标签选择器************************</h2> <p>所有p标签内文字,统一改变样式</p> <p>所有p标签内文字,统一改变样式</p> <p>所有p标签内文字,统一改变样式</p> <div>所有div标签统一样式</div> <div>所有div标签统一样式</div> <div>所有div标签统一样式</div> </body> </html>
复制
2)类选择器
语法:类名{ } ,类名不同于标签名
调用:class属性="类名 类名 类名"
一个标签中是可以有多类名的,这些类名之间要用空格隔开。
口诀:样式“点”定义,结构“类class”调用,一个或多个,开发最常用
作用:为一个或者某几个标签(class属性同的)设置样式。
特点:可以根据需求选择
使用频率:非常多
<style> /* 类选择器: .类名{……} 调用:class属性=“类名” 口诀:样式“点”定义,结构“类class”调用,一个或多个,开发最常用 */ .red { color: red; } .div-red { background-color: red; } .div-green { background-color: green; } .div-size { width: 100px; height: 100px; } </style> </head> <body> <h2>********************类选择器************************</h2> <ul> <li class="red">风风风</li> <li>花花花</li> <li>雪雪雪</li> </ul> <h3>案例1:</h3> <!-- 多个类名之间,空格隔开 --> <div class="div-red div-size"></div> <div class="div-green div-size" ></div> <div class="div-red div-size"></div> </body> </html>
复制
3)id选择器
语法: #id名{ } ,作为选择器,id名 不同于 标签名
调用:id属性="名"
口诀:样式“#”定义,结构“id”调用,只能调用一次,别人切勿使用
作用:为唯一一个标签设置样式
特点:id属性只能在HTML文档中出现一次
使用情况:一般配合javascript使用(id主要是针对js使用的,js中有个getElementById,在css和html中调用相同的id并不会报错)
/*id选择器: #id名 {……} 调用:属性id=“” 口诀:样式“#”定义,结构“id”调用,只能调用一次,别人切勿使用*/ #name { color: pink; }
复制
4)通配符选择器
调用:无需调用
作用:把页面中<html>,<body>和其内的所有标签都改为相同的样式,不需要调用。
特点:选择的太多,有部分不需要
使用情况:特殊情况下使用,属性:margin或padding 用的比较多
* { margin: 0px; padding: 0px; }
复制
(2)复合选择器(两个/多个基础选择器,通过不同方式组合而成的)
1)后代选择器 (又称:包含选择器) (重要)
语法:父元素 子元素 {……} (空格隔开)
作用:
可选“父元素里面的所有(某标签)子元素”
子元素:所有在父元素内的标签都算在内
特点:可选 “所有子孙后代”
使用频率:较多
<style> /* 如果只把ol中的li变成紫色 ,ul中的li不变色*/ ol li { color: rgb(129, 13, 239); } /* 如果有两个ul,想给其中一个里面的a标签变色,怎么搞?很简单,ul加个类名 */ .a-haha li a { text-decoration: none; color: yellow; } </style> </head> <body> <h2>**********复合选择器--后代选择器****************</h2> <ul> <li>嘻嘻</li> <li>嘻嘻</li> <li><a href="#">嘻嘻</a></li> </ul> <ul class="a-haha"> <li>haha</li> <li>haha</li> <li><a href="#">haha</a></li> </ul> <ol> <li>pppp</li> <li>pppp</li> <li><a href="#">pppp</a></li> </ol> </body>
复制
2)子选择器
语法: 父元素 > 第一层子元素 {……}
作用:可选“父元素里面的第一层子元素”
使用频率:较少
<style> /* div中 所有的a标签 均换颜色 */ .son-a a { color: rgb(175, 63, 11); } /* div的只第一层孩子中的a 字体放大 */ .son-a>a { font-size: 30px; } </style> <body> <h2>**********复合选择器--子选择器****************</h2> <div class="son-a"> <a href="#">第一层孩子</a> <p> <a href="#">第二层孩子</a> </p> </div> </body>
复制
3)并集选择器(重要)
语法:元素1,元素2,元素3 {…} (规范:各元素竖着写)(注:最后一个元素后无逗号)
作用:可以同时选择多组标签,同时为他们定义相同的样式
特点:可以用于集体声明
使用频率:较多
<style> /* 同时给div,p,span,pig-family一家 添加同样的样式 */ div, p, span, .pig-family { color: aquamarine; } </style> <body> <div>第一</div> <p>第二</p> <span>第三</span> <ul class="pig-family"> <li>pig son</li> <li>pig dad</li> <li>pig mum</li> </ul> </body>
复制
(3)伪类选择器
1)链接伪类选择器(重要)
语法:
a:link /*选择所有"未被访问的链接"*/
a:hover /*…"鼠标放上去不点击的链接"*/
a:visited /*鼠标点击后的链接样式*/
a:active /*鼠标点击不抬起时链接样式*/
(按照以上顺序书写,即LVHA的顺序,否则不生效)(实际开发中 a{},a:hover{} 常用)
作用:为链接添加特殊效果
特点:选择不同状态的链接
使用频率:最常用
注意:
- 实际开发中,需要单独给a指定样式才能生效,如果只是对a的上级body,p,div指定样式,对a没用的。
- 实际开发中,只用link和hover就足够了。
/****按顺序写LVHA!!!!****/ /* 未访问的链接a:link */ a:link { color: #333; text-decoration: none; font-size: 30px; } /* 已访问过的链接:a:visited */ a:visited { color: orange; } /* 鼠标经过时,不点击链接:a:hover */ a:hover { color: skyblue; } /* 鼠标点击后,未松开时链接样式:a:active */ a:active { color: green; }
复制
2):focus伪类选择器
作用:选取 获得焦点的表单元素
特点:与form表单相关
使用频率:较少
<style> /* 获得光标的input表单元素选取出来 */ input:focus { background-color: pink; color: red; } </style> <body> <h2>**********复合选择器--focus伪类选择器****************</h2> <input type="text"> <input type="text"> <input type="text"> </body>
复制
3.CSS字体属性
(1)font-family:设置文字字体
多种字体时,用逗号隔开;从第一种字体开始检测,没有,再检测下一种字体,以此类推。
如果某字体是由多个单词加空格组成,那么要加单引号。
body{ /*微软雅黑字体*/ font-family: 'microsoft yahei', 'Times New Roman', Times, serif; }
复制
(2)font-size:设置字体大小
记得加px;不同浏览器默认大小不同;如果定义body,注意对标题标签是无效的。
body { font-size: 30px; } h2{ /*body设置的字体大小,对h1~h6无效*/ font-size: 30px; }
复制
(3)font-weight:调整字体粗细
实际开发中更提倡用数字表示加粗或者变细,范围:100~900 整百
属性值:normal=400(默认) / bold=700 / bolder / lighter / 数字(不加px);
.bold { /*下面两种一样的效果,数字后面不用加px*/ font-weight: 700; /* 等价于:font-weight: bold; */ }
复制
(4)font-style:设置文字样式
属性值:normal--默认值;italic--斜体
p { font-style: normal; /* 让倾斜的字体不倾斜; */ }
复制
(5)字体复合属性
注意:一定要按照font:font-style font-weight font-size/(line-height) font-family;这个顺序,少一个font不起效果,而且font-size和font-family绝对不可以省略,其他的都可以省略;空格隔开。
.font-sum{ /*font-style: normal; font-weight: 700; font-size: 30px; font-family: '宋体';*/ /* 上方“四合一”: */ /* 复合写法:font:font-style font-weight font-size/line-height font-family; */ font: normal 700 20px/24px 'microsoft yahei'; /* 复合写法:font:(省略font-style font-weight) font-size/line-height font-family; */ font: 20px Times; }
复制
4.CSS文本属性
(1)text-align:文本水平对齐方式
属性值: | left(默认) | center | right |
应用:行内元素/行内块元素--水平居中方法:给父盒子添加text-align:center;即可
(2)color:文本颜色
属性值: | 颜色英文 | #十六进制(最常用) | rgb(255 ,255 ,0 )或rgb(100%,20%,0%) |
(3)text-indent:文本缩进
通常用em作单位,(em是相对单位(变化),1em=当前一个文字的大小(font-size),若当前元素没设置大小,则按照父元素一个字大小,如1em=16px)
也可以用px做单位,但是一般来说是2em,首行缩进2个字符。
属性值: | 数字em(常用) | 数字px |
(4)text-decoration:文本装饰
属性值: | none (默认) 无装饰线(取消下划线) | underline 下划线 | overline 上划线 | line-through 删除线 |
(5)line-height:行间距(行高)
属性值: | 数字px | 数字(小数也可) (常用) (如:行高1.5--行高为font-size的1.5倍) |
技巧:行高=盒子的高度(height=line-height),使文字垂直居中显示
行高=font-size+2*间距
- 测量行高的方法:
(工具app:Faststone capture 用它去量)
<style> .font-text{ /* 字体颜色 */ /* color: pink; color: #ff0000; */ color: rgb(39, 199, 232); /* 水平对齐方式 */ text-align: left; /* 装饰文本---下划线 */ text-decoration: underline; /* 文本缩进 */ text-indent: 2em; /* 行高 */ line-height: 25px; } .indent1{ /* 文本缩进 */ text-indent: -20px; } .indent2{ /* 文本缩进 */ text-indent: 20px; } </style> <body> <p class="font-text">位置,颜色,装饰文本,缩进,行高</p> <p class="indent1">文本缩进</p> <p class="indent2">文本缩进</p> </body>
复制
5.CSS引入方式
(1)内部样式表:
位置:写在head里的<style>标签中,实际上<style>写在哪里都可以,通常写在head里。
作用区域:控制“当前整个html页面”
特点:没有实现 结构与样式完全分离
/* 在css文件中只有样式,没有标签 */ <style> div{ color: aqua; } </style>
复制
(2)行内样式表:
位置:写在标签属性里:<p style=“属性名:属性值;属性名:属性值…(css规范)”>少用,定义简单样式
作用区域:控制 “当前标签”
权重高
<p style="color: red; font-size: 25px; font-family: 'microsoft yahei';">行内样式</p>
复制
(3)外部样式表:
位置:外部.css文件中,比较重要,常用!
作用区域:控制使用link引入的所有html文件
引入的步骤:
1.新建css文件,把所有的css代码放进去(在css文件中只有样式没有标签)
2.在html文件中使用link来引入:rel意思是引用的是什么,stylesheet意思是引用的是一个表。
<!-- 引入外部样式表---CSS文件 --> <head> <link rel="stylesheet" href="css/style.css"> </head>
复制
6.Chrome调试工具
打开调试工具:F12 或 右击->检查
7.Emmet语法
这一部分内容实际上就是vscode中的一些快捷键
引号内多行编辑的快捷键:shift + alt+鼠标点选
(1)快速生成html结构
(2)快速生成css样式
.emmet{ text-align: center; /* tac →tab*/ text-indent: 2em; /* ti2em →tab */ width: 30px; /* w30 →tab*/ height: 100px; /* h100 →tab*/ line-height: 26px; /* lh26px →tab*/ }
复制
(3)vscode中好用的功能:
保存时自动改为标准格式,设置→搜索format→找到format on save勾选
8.CSS元素显示模式
1.块元素:
常见块元素:<h1>~<h6>,<p>,<div>,<ul>,<ol>,<li>等,<div>最典型的块元素
块元素的特点:
1.比较霸道,自己独占一行
2.高度,宽度,外边距,内边距 都可以控制
3.默认宽度是容器(父级宽度)的100%
4.是一个容器及盒子,里面可以放 “行内元素 或 块元素”
注意:"文字类元素"内不能放"块级元素",如<p>,<h1>标签 里面都不能放块元素<div>
2.行内元素(内联元素):
常见的行内元素:<a>,<del>,<s>,<ins>,<u>,<span>等,<span>最典型的行内元素
行内元素的特点:
1.相邻行内元素在一行上,一行可以显示多个。
2.高,宽 直接设置是无效的 (可放入块中)
3.默认宽度就是它本身内容的宽度
4.行内元素只能容纳文本或其他行内元素
注意: <a>里不能再放<a>
特殊情况下,<a>里可以放块级元素,例如:
这一大块都是链接,在这一大块里再放商品图片,介绍,价格等,这种情况下“把a转换成块级元素”比较好
3.行内块元素:
同时具有块元素和行内元素的特点:<img/>,<input/>,<td>
特点:
1.和相邻行内元素(行内块元素)在一行上,但是它们之间会有空白缝隙,一行可以显示多个(行内元素特点)
2.默认宽度就是本身内容宽度(行内元素特点)
3.宽度,高度,行高,外边距,内边距都是可以控制的(块元素特点)
4.元素显示模式转换:
- 在css中使用:display: block; ----行内元素 改为 块元素。
- 在css中使用:display: inline; ----块元素 改为 行内元素。
- 在css中使用:display: inline-block;- ---行内元素 改为 行内块元素。
把行内元素a转换为块级元素(为了增加a标签链接的点击范围),拥有块级元素的特点,如:独占一行,而且修改它的宽度和高度是有效的。
<style> /* a,img转化为 块元素 */ .block { font-size: 30px; width: 200px; height: 100px; background-color: blueviolet; color: yellow; display: block; padding: 1%; } /* p转化为行内元素 */ .p-inline { background-color: #333; display: inline; } /* div-块元素 */ .div-block { width: 300px; height: 300px; background-color: #666; } /* input-行内块元素 */ .input-inline-block { width: 200px; height: 40px; background: pink; } </style> <body> <h2>******************行内元素/块元素/行内块元素*********************</h2> <a href="#" class="block">行内元素</a> <br> <img src="images/baidu.png" alt="wrong" class="block">img行内元素->block <p class="p-inline">块元素->inline</p> <div class="div-block">块元素</div> <input type="text" class="input-inline-block">行内块元素 <input type="text" class="input-inline-block">行内块元素 </body>
复制
运行结果:
9.文字垂直方向居中显示
- 技巧:行高=盒子的高度(height=line-height),使文字垂直居中显示
- line-height>height,文字垂直偏下
- line-height<height,文字垂直偏上
p { width: 230px; /* 技巧:行高=盒子的高度,使文字垂直居中显示*/ /*height=line-height */ height: 40px; font: 14px/40px 'microsoft yahei'; background-color: rgb(85, 88, 89); } a:hover { background-color: orange; }
复制
10.CSS的背景属性
(1)background-color 背景颜色:
属性值 | transparent 透明(默认) | color 颜色 | rgba(r,g,b,a); 背景色半透明 (CSS3新增属性,IE9+浏览器才支持) |
注:rgba(r,g,b,a):里面的四个参数中,a是alpha透明度,是控制透明程度的,取值在0~1之间(0:100%透明,1:不透明),如0.3的0可以省略,写.3也是可以的
(2)background-image 背景图片:
开发中常见于:logo,装饰性图片,超大背景图片,精灵图
优点:便于控制位置
属性值 | none (默认) | url ( url地址 ) |
(3)background-repeat 背景平铺:
属性值 | repeat 平铺 (默认) | no-repeat 不平铺 | repeat-x 水平方向平铺 | repeat-y 垂直方向平铺 |
(4)background-position: x y; 背景图片的位置:
属性值:方位词 (x,y顺序无关) | 属性值:精确单位(x,y顺序固定,先x后y) | |
x坐标 | left / center / right | % / 由浮点数字和单位标识符组成的长度值 |
y坐标 | top / center / bottom | % / 由浮点数字和单位标识符组成的长度值 |
注意事项:
1.如果x,y都是方位名词,则两个值前后顺序无影响,如: right center 和 center right一样
2.如果x,y都是方位名词,只写其中一个,则另一个默认是center
3.如果x,y都是精确单位,则第一个一定x,第二个一定是y
4.如果x,y都是精确单位,只写其中一个(这个一定是x),y默认center
5.如果x,y都是混合两种情况,只写其中一个(这个一定是x),y默认center
(5)background-attachment 背景图像是否固定(网页滚动时,图片是否随之滚动):
后期可以制作视差滚动的效果
属性值 | scroll 滚动(默认) | fixed 固定 |
(6)background: 背景样式的 复合性写法:
惯用顺序:background: 背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置;
提示:背景图片 在 背景颜色 上方显示
/* 背景颜色/图片,背景图片在背景颜色上方显示 */ .div-bgcolor { width: 200px; height: 200px; background-color: red; background-image: url(images/baidu.png); /*不平铺*/ background-repeat: no-repeat; /*水平方向平铺*/ background-repeat: repeat-x; /*垂直方向平铺*/ background-repeat: repeat-y; /*背景图片的位置-水平居中垂直top*/ background-position: center top; /*与上一行效果一样!!!*/ background-position: top center; /*背景图片的位置-水平靠左垂直居中---x轴left,y轴默认center*/ background-position: left; /* xy为精确单位 */ background-position: 20px 50px; background-position: 20px ; /*同:20px center*/ /*混xy为合单位*/ /*上下二者--效果相同!!*/ background-position: 20px center; background-position: 20px top; } body { /* 惯用顺序:background: 背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置; */ background: purple url(images/temperature.png) no-repeat fixed center top; } .half { /*半透明*/ background: rgba(0, 0, 0, .3); }
复制
技巧:
- 小的装饰性图片:不用img标签,用背景图片-不平铺-定位置
- 超大图片插入:不用img标签,用背景图片-不平铺-定位置crnter top;
(7)背景属性总结:
11.CSS三大特性
1.层叠性
“后设置的样式”会覆盖“前设置的样式”
- 样式冲突时,层叠覆盖
- 样式不冲突,不层叠
div { color: black; font-size: 15px; } div { /* 颜色黑会被红色覆盖掉,但是字体大小却不会有变化 */ color: red; }
复制
2.继承性
“子标签”继承“父标签”的某些样式(主要是text-、font-、line-等开头的,以及color属性)
<style> /* 继承性 */ /*如下面这样设置的话,p标签中的文字也会变成黑色20px,继承了div中的属性 */ div { color: rgb(228, 61, 61); font: 20px/1.5 'microsoft yahei'; } </style> </head> <div> <p>并不是所有的属性都继承,只继承文字相关的属性</p> </div>
复制
3.优先级
3.1.当一个元素指定多个选择器,就会有优先级的产生
- 选择器相同,则执行层叠性
- 选择器不同,则根据选择器权重执行
3.2.子元素继承的权重是0,如果该元素没有直接选中,那么不管父元素权重有多高,子元素得到的权重都是0。
3.3.<a>默认指定了样式(蓝色,有下划线)(即:a{color: blue},优先级大于0),所以不继承父标签的样式
3.4.优先级中权重的叠加问题:
复合选择器会有权重叠加的问题,元素会选择权重高的去使用。
权重会叠加,不会进位,如:(0,0,0,11)
权重:元素选择器<类选择器<id选择器<标签内style样式<!important
<style> /* 优先级 :元素选择器<类选择器<id选择器<标签内style样式< !important */ /* 优先级: div < .test < #test < style="color: ;" < color: red!important */ div { color: red!important; } .test { color: yellow; } #test { color: blue; } /*继承的权重是0 */ /*所以,以后看标签到底执行哪个样式,就先看这个标签有没有直接被选出来 */ .power { color: pink; } p { color: orange; } /* 复合选择器 有 权重叠加 的问题 */ /* li权重:0,0,0,1 1*/ li { color: red; } /* *************权重会叠加,不会进位:0,0,0,11. ************** */ /* ul+li的权重:0,0,0,1 + 0,0,0,1=0,0,0,2 2*/ ul li { color: blue; } /* .wanan+li的权重:0,0,1,0 + 0,0,0,1=0,0,1,1 11*/ .wanan li { color: yellow; } /* .first 权重 10<11 ,无法更改上方11的颜色*/ .first { color: aqua; } /* .wanan .first权重20>11,可以更改颜色 */ .wanan .first { color: aqua; } </style> <body> <div class="test" id="test" style="color: purple">倔强</div> <span class="power"> <p>继承power的权重是0 < p{} 的权重</p> </span> <ul class="wanan"> <li class="first">几人份的畅谈</li> <li>道三两句晚安</li> <li>惹多情的遐想</li> <li>却轻易地走散</li> </ul> </body>
复制
12.CSS盒子模型
CSS盒子模型本质上是一个盒子,封装周围的HTML元素
主要包括:border边框、外边距margin、内边距padding,内容content
(1)边框(border)
边框会影响盒子的实际大小,解决方案:(1.测量时不测边框;2.测量边框,width/height减去边框宽度)
属性 | 属性值 |
border-width 边框的宽度(粗细) | px |
border-style 边框的样式 | none 无|solid 实线|dashed 虚线|dotted 点线| hidden|double|groove|ridge|inset|outset |
border-color 边框的颜色 | color|rgb|#十六进制 |
- 边框属性的复合写法:
属性 | border:1px solid red; (没有顺序) | border-top | border-bottom | border-left | border-right |
❗️注意:「 层叠性 」:border 和 四边分别设置 的前后顺序,后者会覆盖前者
- 合并相邻边框 的属性:
border-collapse: collapse;
/* CSS盒子模型---边框-宽度|样式|颜色*/ .box { border-width: 3px; border-style: dashed; border-color: rgb(172, 232, 181); /* 三合一--复合写法 */ border: 3px dashed greenyellow; /* 边框的四边---可以分别设置 */ /* 边框(四边可分别设置) */ border-bottom: 3px dashed rgb(157, 247, 23); border-top: 3px solid rgb(7, 142, 27); border-left: 3px dotted rgb(67, 184, 67); border-right: 3px dashed rgb(4, 103, 4); }
复制
(2)内边距(padding)
padding会影响盒子的实际大小,调整width/height减去padding
- padding不会撑开盒子的大小:盒子本身 没有指定 width/height属性;
- padding不会撑开盒子的大小:如果父元素指定了width,那么在子元素中没有指定width,给子元素添加padding不会撑开盒子。
- padding会撑开盒子的大小:盒子本身 指定了 width/height属性
技巧:padding会撑开盒子,在字数不一的导航栏,不设置width,而设置padding,使得间距一致
属性 | padding (复合写法) | padding-left | padding-right | padding-top | padding-bottom |
(3)外边距(margin)
复合写法中,值的个数-表达意思 同padding上表。
属性 | margin (复合写法) | margin-left | margin-right | margin-top | margin-bottom |
1)外边距典型应用:
- 块盒子水平居中,必须满足两个条件:
1.盒子必须指定宽度width
2.左右外边距设为auto,即:margin:0 auto;(上下0,左右居中)
- 行内元素 / 行内块元素水平居中:
给其父元素添加属性 text-align:center;
2)外边距的合并:
注:浮动的盒子--不会有外边距合并的问题
- 上下相邻块元素,垂直外边距的合并
上边有:margin-bottom
下边有:margin-top
则:垂直距离为:不是二者之和,而是:取两个值中较大者
解决方案:只给一个盒子设置margin值
3)嵌套块元素垂直外边距的塌陷
对于两个嵌套关系(父子关系)的块元素,父元素有上外边距,同时子元素也有上外边距,此时父元素会塌陷较大(父元素和子元素的margin-top比较)的外边距值
解决方案:
1.为父元素定义上边框 border-top: 1px solid transparent;
2.为父元素定义上内边距 padding-top:1px;
3.为父元素添加 overflow:hidden;
(其他方法:浮动/固定/绝对定位的盒子不会有塌陷问题,这三个方法都是脱标的,也就是说脱标的元素是不会出现外边距合并和塌陷的问题的。)
13.清除内外边距
网页元素自带边距-F12查看,不同浏览器默认值不同;所以布局前清除网页元素默认的内外边距
* { margin: 0; padding: 0; }
复制
注: 行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距(很多时候不起效果)。
块元素和行内块元素,可以设置上下左右的内外边距。
14.PS
1.测量网页元素大小
2.PS切图:
1.选图层(多图层组合时可以合并)-右击-导出png
2.cutterman---ps插件
3.像素大师 pc软件--放入图片,鼠标悬浮上方,自动显示大小
15.案例总结:
(1)小米商品模块
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Redmi shop</title> <style> * { margin: 0px; padding: 0px; } body { background-color: #f5f5f5; } .box { width: 420px; height: 600px; border: 1px solid rgb(198, 193, 193); margin: 0 auto; } a { color: black; text-decoration: none; } img { /* 图片宽度和父亲一样宽 */ width: 100%; } .box>p { height: 140px; font: 23px 'microsoft yahei'; /* 因为没有width属性,所以padding不会撑开盒子的宽度 */ padding: 0 20px; margin-top: 20px; } .appraise { width: 400px; padding-left: 20px; margin-top: 10px; font: 14px 'microsoft yahei'; color: #b0b0b0; } .info { margin-top: 20px; padding: 0 20px; background-color: pink; } .info h4 { /* width: 260px; */ /* 块元素->转化为行内块元素后,可以实现同一行显示,!!!但是他们之间会有大的空白缝隙!!!很难控制!!! */ display: inline-block; font: 18px 'microsofe yahei'; font-weight: 400; } .info p { /* width: 30px; */ display: inline-block; color: rgb(174, 171, 171); margin: 0 25px 0 35px; /* background-color: green; */ } .info span { /* width: 50px; */ display: inline-block; color: orange; /* background-color: purple; */ } </style> </head> <body> <div class="box"> <img src="../images/produce.png" alt="无线蓝牙耳机img" /> <p><a href="#">快递牛,整体不错蓝牙可以秒连,红米给力</a></p> <div class="appraise">来自于117384232的评价</div> <div class="info"> <!-- 商品名称 属于标题,恰当地使用标签!!!! --> <h4><a href="#">Redmmi AirDots真无线蓝…</a></h4> <p>|</p> <span>99.9元</span> </div> </div> </body> </html>
复制
❗️注:块元素->转化为行内块元素后,可以实现同一行显示,!!!但是他们之间会有大的空白缝隙!!!很难控制!!!
(2)快报模块
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>快报模块</title> <style> * { margin: 0px; padding: 0px; } .box { width: 248px; height: 163px; border: 1px solid grey; color: #797676; font-family: 'microsoft yahei'; margin: 0 auto; } .title { height: 32px; font-size: 14px; line-height: 32px; /* 字体粗细,值-无单位 */ font-weight: 400; border-bottom: 1px dotted grey; padding: 0 15px; } li { list-style: none; } .box ul { margin-top: 7px; } .box ul li { /*垂直居中 */ height: 23px; line-height: 23px; padding-left: 20px; } .box ul li a { font-size: 12px; text-decoration: none; color: #666; } .box ul li a:hover { text-decoration: underline; } </style> </head> <body> <div class="box"> <h3 class="title">优品购快报</h3> <ul> <li><a href="#">【特惠】爆款耳机5折秒!</a></li> <li><a href="#">【特惠】爆款耳机5折秒!母亲节</a></li> <li><a href="#">【特惠】爆款耳机5折秒!</a></li> <li><a href="#">【特惠】爆款耳机5折秒!</a></li> <li><a href="#">【特惠】爆款耳机5折秒!立省1000</a></li> </ul> </div> </body> </html>
复制
16.圆角边框(重点)
在CSS3中新增了圆角边框的样式,这样盒子就可以变成圆角。
属性语法:border-radius:数字px|数字% ---(圆角半径); (%:半径是盒子宽度和高度的占比)
border-radius: 100px; /*效果同上100px ,宽高200px*/ border-radius: 50%; /*四个值:四个角的弧度分别设置*/ border-radius: 10px 45px 30px 15px; /*两个值:左斜对角,右斜对角*/ border-radius: 40px 10px; /*四个角分开设置*/ border-top-left-radius: 10px; border-top-right-radius: 20px; border-bottom-left-radius: 30px; border-bottom-right-radius: 40px;
复制
17.盒子阴影(重点)
盒子阴影部分不占空间
属性语法:box-shadow: h-shadow v-shadow blur spread color inset;
前两个,第四个-均可负值
前两个必写,其他可省略
模糊距离:影子的实虚,边界是否清晰
阴影尺寸:影子的大小
颜色常用:rgba(0,0,0,.3);
默认outset,(❗️但不可写明写outset,这样影子效果消失)
box-shadow: 10px 10px 10px -4px rgba(0, 0, 0, .3);
复制
- 鼠标经过时,盒子出现阴影效果:
div:hover{ box-shadow: 10px 10px 10px -4px rgba(0, 0, 0, .3); }
复制
18.文字阴影
属性语法:text-shadow:h-shadow v-shadow blur color;
text-shadow: 5px 5px 5px rgba(0, 0, 0, .3);
复制
19.CSS浮动-float
传统网页的布局:标准流、浮动、定位。通常一个网页是由这三种布局共同构成的
浮动-最典型应用:多个块元素一行排列显示
❗️why need float:块元素->转化为行内块元素后,可以实现同一行显示,!!!但是他们之间会有大的空白缝隙!!!很难控制!!!
- 网页布局第一准则:
多个块元素纵向排列---标准流,横向排列---浮动。
先用标准流的父元素排列上下位置,然后内部子元素使用浮动来排列左右(开发中采用策略--浮动子集与标准流父级 搭配使用)
- 网页布局第二准则:
先设置盒子大小,再设置盒子位置。
1.float 属性:
作用:创建浮动框,将其移动到一边,直到左/右边缘/包含块/另一个浮动框边缘
属性值:float:none 不浮动(默认)|left 元素向左浮动|right 元素向右浮动
2.浮动特性(重难点!)
(1)浮动元素会脱离标准流(脱标)
1.浮动元素会脱离标准流的控制(浮),移动到指定位置(动)---(俗称:脱标)
2.脱标的盒子不再保留原来的位置。
(2)浮动元素会一行内显示且沿着元素顶端对齐
注:
1.浮动的元素是相互贴在一起的没有缝隙
2.如果父级宽度装不下这些盒子,那么多出的盒子会另起一行对齐。
(3)浮动的元素--都具有行内块元素的特性
任何元素(行内元素/块级元素)都可以添加浮动,添加浮动后,都具有行内块元素的特性。
所以:
1.如果给行内元素加了浮动,不需要再转换为块级/行内元素,就可以直接给宽度和高度;
2.如果块级元素没有设置宽度,默认和父级一样宽,但是设置了浮动之后,宽度大小根据内容来决定(行内快元素的特点)
(4)浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流。
例:son1不浮动,son2浮动,son3部浮动,结果:
上图:son1与son2紧贴,son3位于son2下方,son2-float,son3占据son2原来位置
(5)一浮全浮: 有一个孩子浮动了,其余的兄弟元素都要浮动才行,要不然没用。
3.清除浮动
为什么要清除浮动?因为父级盒子在很多情况下不方便给高度(如产品很多,要不断往里加,或者左右栏内容不一样多),但是子盒子浮动又不占有位置,最后父级盒子高度变成0,会影响后面的布局。
- 清除浮动的本质:
清除浮动元素造成的影响。
如果父盒子本身有高度,那么不需要清除浮动
清除浮动之后,父级盒子会根据浮动的子盒子自动检测高度,父级有了高度就不会影响后面的标准流了。
- 清除浮动的属性: clear:left|right|both (开发中只用both)
- 清除浮动的策略:闭合浮动(浮动只在父盒子内部影响,不影响外部其他盒子)
清除浮动方法:
(1)额外标签法(隔墙法)
- 在浮动的元素后面添加一个新的标签(必须是块级元素),然后新的标签使用clear:both设置浮动
/* 父盒子未设置高度,子盒子浮动后,不占父盒子空间,父元素height=0 */ .q-box { border: 1px solid red; } .q-damao, .q-ermao { float: left; width: 200px; height: 200px; margin-left: 100px; background-color: orange; } /* 清除浮动---并且子元素多高,父元素就多高*/ .clear { clear: both; } .q-footer { height: 100px; background-color: green; }
复制
<div class="q-box"> <div class="q-damao">大猫</div> <div class="q-ermao">二毛</div> <div class="clear"></div> </div> <div class="q-footer"></div>
复制
(2)父级元素添加 overflow属性(重点)
- 给父级添加属性:overflow:hidden (最常用)|auto|scroll;
优点:代码简洁;缺点:是无法显示溢出的部分,溢出的部分直接就被切掉看不见了。
.box { /* 清除浮动 */ overflow: hidden; }
复制
(3)父级元素添加 after伪元素(重点)(百度,网易,淘宝用此法)
额外标签法的升级版(利用CSS添加一个新盒子),相当于往后面加了个块堵住,添加下面css代码:
/* 清除浮动--css在大盒子 最后方 生成一个空盒子*/ 单 :after 为了兼容低版本浏览器;意思同---双::after .clearfix:after { content: ""; display: block; height: 0; clear: both; visibility: hidden; } .clearfix { /* IE6,7专有 */ *zoom: 1; }
复制
<!--父元素调用一下clearfix类--> <div class="q-box clearfix">
复制
(4)父级元素添加 双伪元素(重点)(小米,腾讯 用此法)
在after的基础上再加一个,也就是头上和尾巴都堵住,添加下面的css代码:
/* 清除浮动--css在大盒子的 最前方,最后方 生成一个空盒子*/ .clearfix:after, .clearfix:before { content: ""; display: table; } .clearfix:after { clear: both; } .clearfix { /* IE6、7专有 */ *zoom: 1; }
复制
<!--父元素调用一下clearfix类--> <div class="q-box clearfix">
复制
20.学习开发流程&遵循规则/思路/注意事项
工具:ps-vscode-chrome
·CSS 属性书写顺序(重点)建议遵循以下顺序:
1.布局定位属性:display / position/ float / clear / visibility / overflow(建议 display第一个写,毕竟关系到模式)
2.自身属性:width / height / margin/ padding / border/ background
3. 文本属性:color/ font / text-decoration / text-align/ vertical-align / white- space / break-word
4. 其他属性(CSS3) : content / cursor / border-radius / box-shadow / text-shadow / background:linear-gradient...
·页面布局整体思路
(为了提高网页制作的效率,布局时通常有以下的整体思路)
1.必须确定页面的版心(可视区),我们测量可得知。
2. 分析页面中的行模块,以及每个行模块中的列模块。(页面布局第一准则)
3.一行中的列模块经常浮动布局,先确定每个列的大小,之后确定列的位置。(页面布局第二准则)
4 制作HTML结构。我们还是遵循,先有结构,后有样式的原则。结构永远最重要
5. 所以,先理清楚布局结构,再写代码尤为重要。这需要我们多写多积累
·注意:
1.导航栏---实际开发中 ,我们不会直接用链接a,而是用li包含链接(li+a)的做法。
原因:1.lit+a 语义更清晰,一看这就是有条理的列表型内容。 2.如果直接用a,搜索引擎容易辨别为有堆砌关键字媒疑(故意堆砌关键字容易被搜索,引擎有降权的风险),从而影响网站排名。
2.让导航栏一行显示,给li加浮动,因为li是块级元素,需要一行显示。
3.技巧:nav导航栏可以不给宽度,将来可以继续添加其余文字。
4.技巧:因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度。
5.按钮button默认有边框。需要我们手动去掉。
21.CSS定位
1.相关知识:
为什么需要定位?浮动和标准流都无法实现的效果,需要定位来是实现。
定位:是让盒子自由的在某个盒子内移动位置,或者固定在屏幕中的某个位置,并且可以压住其他盒子。
定位=定位模式+边偏移
1.1.定位模式:
决定元素的定位方式
属性:position
属性值:static 静态定位|relative 相对定位|absolute绝对定位|fixed 固定定位
1.2.边偏移:
定位的盒子移动的最终位置
四个属性:top|bottom|left|right
2.定位
1.静态定位static(了解,很少用)
特点:
元素的默认定位,无定位的意思
按标准流特性摆放位置,没有边偏移
语法: 选择器{ position:static;}
2.相对定位relative(重要)
特点:
相对于-它原来的位置而言的
标准流中继续占有原来位置(不脱标)
语法: 选择器{ position:relative;}
/* 相对定位--以自身为参照 */ position: relative; top: 100px; left: 100px;
复制
3.绝对定位absolute(重要)
特点:
相对于-祖先级元素而言的
随滚动条滚动
祖先级元素-没有定位!!!,相对于浏览器文档定位
祖先级元素-有定位!!!(绝对,相对,固定定位),son相对于-最近一级有定位的祖父级元素为参考
标准流中不再占有原来的位置(脱标)
语法: 选择器{ position:absolute;}
- “子绝父相”
(如果子集用绝对定位的话,父级要用相对定位)
子绝父相也不是绝对的,如果遇到父元素不需要占有位置,子绝父绝也是存在的。
1.子集绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子。
2.父盒子需要加定位,限制子盒子在父盒子里的显示
3.父盒子布局时,需要占有位置,要不然页面结构就乱了,所以父亲只能是相对定位
总的来说,父级需要占有位置,用相对定位,子盒子不需要占有位置,用绝对定位。
<style> /* 父亲未定位,son以浏览器为参照 */ .father1 { width: 200px; height: 200px; background-color: lightskyblue; } .son1 { width: 150px; height: 150px; background-color: lightcoral; position: absolute; /* 浏览器左上角 */ /* top: 0; left: 0; */ /* 浏览器左下角 */ /* bottom: 0; left: 0; */ /* 浏览器右上角 */ top: 0; right: 0; /* 浏览器右下角 */ /* bottom: 0; right: 0; */ } /* 父亲定位了,son以父级元素为参照 */ .father2 { width: 200px; height: 200px; background-color: lightskyblue; position: relative; left: 300px; } .son2 { width: 150px; height: 150px; background-color: lightcoral; position: absolute; top: 40px; right: 20px; } /* 爷爷定位了,父亲未定位,son以爷爷为参照 */ .grandfather3 { width: 200px; height: 200px; background-color: lightskyblue; position: relative; left: 50px; } .father3 { width: 150px; height: 150px; background-color: rgb(63, 164, 227); } .son3 { width: 100px; height: 100px; background-color: lightcoral; position: absolute; bottom: 0px; right: 0px; } .grandfather4 { width: 200px; height: 200px; background-color: lightskyblue; position: relative; left: 500px; } /* 绝对定位--不占据原来位置,被下一个占有 */ .grandfather4 .brother1 { width: 60px; height: 70px; background-color: lightcoral; position: absolute; left: 5px; top: 80px; } .grandfather4 .brother2 { width: 200px; height: 200px; background-color: rgb(207, 160, 160); } </style> </head> <body> <h3>***************相对定位***************</h3> <div class="box1">borther1</div> <div class="box2">brother2</div> <h3>***************绝对定位***************</h3> <div class="father1">father1未定位 <div class="son1">son1</div> </div> <div class="father2">father2已定位 <div class="son2">son2</div> </div> <div class="grandfather3">grandfather3已定位 <div class="father3">father3未定位 <div class="son3">son3</div> </div> </div> <div class="grandfather4">grandfather4已定位 <div class="brother1">brother1绝对定位</div> <div class="brother2">brother2占据brother1的位置</div> </div> </body>
复制
4.固定定位 fixed(重要)(特殊的绝对定位)
固定于浏览器可视区的位置。
特点:
以浏览器的可视窗口为参照点移动元素。
跟父元素没有任何关系
不随滚动条滚动
不占有原先位置(脱标)
主要使用场景:
浏览器页面滚动时,元素位置固定不变。
语法: 选择器{ position:fixed;}
- 固定在版心右侧位置:
1.先让固定定位的盒子 left:50%,走到整个页面的一半位置
2.再让该盒子 margin-left:正的(版心宽度的一半)
- 固定到版心左侧位置:
1.left:50%; 移动到浏览器的一半(中轴线)
2.margin-left:负的(版心宽度的一半+广告盒子自身的宽度) (左移--负数)
/* 网页两侧广告 */ /* 版心左侧广告位置 */ .ad1 { width: 200px; height: 500px; position: fixed; top: 300px; /* 固定到---版心左侧--方法: 1.left:50%; 移动到浏览器的一半(中轴线) 2.margin-left:(版心宽度的一半+广告盒子自身的宽度) */ left: 50%; margin-left: -830px; } .ad1 img { width: 100%; height: 500px; } /* 版心右侧广告位置 */ .ad2 { width: 200px; height: 500px; /* 固定定位 */ position: fixed; top: 300px; /* 固定到---版心右侧--方法: 1.left:50%; 移动到浏览器的一半(中轴线) 2.margin-left:(版心宽度的一半) */ left: 50%; margin-left: 630px; } .ad2 img { width: 100%; height: 500px; }
复制
效果如下:(两侧的广告)
5.粘性定位sticky(了解,不常用,IE浏览器不支持)(网上大多是通过javascript实现的效果)
相对定位 和 固定定位 的混合
语法: 选择器{ position:sticky;top:10px;}
特点:
以浏览器的可视窗口为参照点移动元素。(固定定位的特点)
占有原来位置。(相对定位的特点)
必须添加top,left,right,bottom其中一个才有效
.stick { width: 50px; height: 300px; background-color: pink; /* 粘性定位: */ position: sticky; /* 此盒子移动到距离浏览器上边缘100px时,不再随浏览器滑动 */ top: 100px; }
复制
6.定位的总结:
- 注:既有left,又有right时,优先执行left
- 注:既有top,又有bottom时,优先执行top
7.定位叠放次序 z-index
使用定位布局时,用于控制盒子重叠的先后顺序(谁在上,谁在下)
语法:选择器{ z-index:1;}
属性值:auto 默认|0|正整数|负整数 (负<auto=0<正)
- 规则:
1.数值越大,盒子越靠上
2.数值相同,按书写顺序,右者在前者上方
3.数值无单位!!!
4.只有定位的盒子,才有此属性
/* 定位的重叠现象 z-index -1 < auto = 0 */ .box-x { position: absolute; left: 0px; } .box-one { width: 500px; height: 500px; background-color: pink; z-index: -1; } .box-two { width: 400px; height: 400px; background-color: rgb(162, 51, 70); z-index: auto; } .box-three { width: 450px; height: 300px; background-color: rgb(192, 13, 43); z-index: 0; }
复制
8.定位知识拓展
1.绝对定位盒子--居中效果的实现
由于:加了“绝对定位”的盒子,给属性margin:0 auto;---不会实现水平居中
- “绝对定位的盒子”实现水平居中的算法:
1.left=父容器宽度的50%;
2.margin-left:负的自身盒子宽的一半
- “绝对定位的盒子”实现垂直居中的算法:
1.top=父容器高度的50%;
2.margin-top:负的自身盒子高的一半
.r-middle { /* “绝对定位的盒子”实现水平居中的算法: 1.left=父容器宽度的50%;2.margin-left:负的自身盒子宽的一半 */ position: absolute; left: 50%; margin-left: -50px; } .c-middle { /* “绝对定位的盒子”实现垂直居中的算法: 1.top=父容器高度的50%;2.margin-top:负的自身盒子高的一半 */ position: absolute; top: 50%; margin-top: -50px; }
复制
2.定位特殊特性:
- “绝对定位”,“固定定位” 与浮动,类似特性:
1)行内元素添加-“绝对定位”“固定定位”(相对定位不行),可以直接设置宽度和高度(不需display:block)
/* 绝对定位 */ position: absolute; /* 相对定位 */ position:fixed; top: 0; width: 100px; height: 100px; background-color: #622b2b;
复制
2).块级元素添加-“绝对”或“固定定位”,如果不给宽高,默认大小是内容大小(width和文字一样宽)。(不定位的div不设宽度,默认100%)
3.脱标(标准流中不占位置)的盒子-不会触发“外边距塌陷”
4.“绝对定位”“固定定位”----会完全压住盒子
为啥浮动压不住文字呢?因为浮动的发明最开始是做文字环绕效果的。(如:word中,文字中插入图片,文字环绕在四周,不遮挡文字)
- 浮动----只会挡住它下面标准流的盒子,但不会挡住标准流盒子里面的文字或者图片
- 绝对定位(固定定位)----会压住下面标准流的所有内容(图+文字)
9.案例--淘宝轮播图
轮播图中小圆点-- ul > li(背景图,圆角边框)
/* 案例-轮播图*/ .tb-promo { /* 子绝父相 */ position: relative; left: 10px; width: 840px; height: 628px; background-color: pink; } /* 轮播图片 */ .tb-promo img { width: 100%; } /* 轮播图-左右箭头 */ .tb-promo .prev, .tb-promo .next { position: absolute; /* 垂直居中 */ top: 50%; margin-top: -25px; width: 30px; height: 50px; background-color: rgba(0, 0, 0, .3); font-size: 30px; line-height: 50px; text-align: center; text-decoration: none; color: #fff; } .tb-promo .prev { left: 0px; border-radius: 0 20px 20px 0; } .tb-promo .next { right: 0px; border-radius: 20px 0 0 20px; } /*****!!!!!!!!轮播图小圆点!!!!!!!******/ .point ul { position: absolute; bottom: 20px; /* 水平居中 */ left: 50%; margin-left: -50px; width: 90px; height: 20px; background-color: rgba(255, 255, 255, .3); border-radius: 20px; } .point ul li { float: left; margin: 4px; width: 10px; height: 10px; background-color: #fff; border-radius: 50%; list-style: none; } .point ul .selected { background-color: #ff5000; }
复制
<h3>***************定位--案例--淘宝轮播图***************</h3> <div class="tb-promo"> <img src="images/produce.png" alt=""> <a href="#" class="prev"><</a> <a href="#" class="next">></a> <div class="point"> <ul> <li class="selected"></li> <li></li> <li></li> <li></li> <li></li> </ul> </div> </div>
复制
22.元素的显示与隐藏
类似网站广告,点击叉号就不见了,但是刷新页面又会重新出现。
本质:让一个元素在页面隐藏或显示。
1.display属性(重点!!!!最常用)
用来设置一个元素如何显示,后面应用非常广泛,搭配JS可以做很多网页特效。
属性:
display: none; (隐藏对象)(用得最多)
display:block;(显示对象)(作用:“转换成块级元素”,“显示对象”)。
注意:display隐藏元素后,不再占有原来的位置。
2.visibility属性
visibility: visible; (元素可见)(常用)
visibility: hidden; (元素隐藏)(常用)
visibility: inherit; (继承父对象的可见性)
visibility: collapse; (隐藏表格的行/列,很少使用)
注意,visibility隐藏元素后,会占有原来的位置。
3.overflow属性
指定了:一个元素的框中内容(超出其指定宽度及高度),会发生溢出,溢出内容是否显示。
overflow: visible;(默认)不剪切,也不加滚动条,内容超出盒子显示。
overflow: hidden;超出部分直接隐藏,也没有滚动条。
overflow: auto;(根据文字长度而定)超出-自动添加滚动条;未超出-不添加滚动条。
overflow: scroll;总显示滚动条,不管内容是否超出。
注:如果有定位的盒子,慎用overflow: hidden;
(因为可能定位的盒子会有一小部分在父盒子外边,那这样就会直接把多余的切掉了,这可不行。比如学成在线那个hot小标签)
4.案例:
/* 案例-显示/隐藏 */ .pic { /* 子绝父相 */ position: relative; left: 10px; width: 840px; height: 628px; background-color: pink; } /* 轮播图片 */ .pic img { width: 100%; } .hid { position: absolute; top: 0; left: 0; /* 隐藏 */ display: none; width: 840px; height: 628px; 背景图颜色+图片(不重复+定位) background: rgba(0, 0, 0, .3) url(images/radio.png) no-repeat center; } /* 当鼠标经过图片,内部遮罩层显示出来 */ .pic:hover .hid{ /* 显示 */ display: block; }
复制
<div class="pic"> <img src="images/produce.png" alt=""> <div class="hid"></div> </div>
复制
效果图:
CSS高级技巧:
1.精灵图 sprites
目的:为了有效的减少服务器接受合发送请求的次数,提高页面的加载速度
使用精灵图核心:主要针对:背景图片 (把多个小的背景图片整合到一张大图片上)(大图片称为 sprites 精灵图 或者 雪碧图)
移动背景图片的位置-属性:background-position: -182px -10px;
简写: background: url() no-repeat -182px 0px;
注意:
移动的距离就是这个目标图片的x和 y坐标。
注意网页中的坐标有所不同:x轴右边是正值,左边是负值,y轴下边是正值,上边是负值。因为网页中,一般情况下都是往上往左移动,所以数值是负值。
使用精灵图的时候需要精确测量 ,每个小背景图片的大小和位置。
.bg2 { width: 26px; height: 25px; margin: 50px; background: url(images/bg-sum.png) no-repeat -156px -106px; /* 或者可以分开写 background: url(./images/spirit.png); background-position: -156px -106px; */ }
复制
- 精灵图也是有很多缺点的,比如:
1.图片文件比较大
2.图片本身放大缩小会失真
3.图片制作完毕后,想要更换,会非常麻烦(因此出现字体图标)
2.字体图标 iconfont
展示效果:图标;
本质:字体(具有字体的属性)
字体图标的优点:
1.字体图标的下载
阿里iconfont字库: http://www.iconfont.cn/,推荐指数:★★★★★
2.字体图标的引用:
(1)unicode引用方式
(2)✅font-class引用方式
<!-- 插入图标 链接--> <link rel="stylesheet" href="http://at.alicdn.com/t/c/font_3982245_uuj9arcfwa.css">
复制
.icon-star { font-size: 100px; color: rgb(254, 219, 63); }
复制
<!-- 引入图标 --> <span class="iconfont icon-star"></span>
复制
(3)(symbol引用方式
…………移动端等引用方式,见iconfont官网
3.CSS三角形
网页中常见的三角形,使用CSS直接画出来,不必做成图片/字体图标
效果图如上,对应代码如下:
/* CSS直接画三角 */ .sanjiao { /* 不给宽度,高度,给边框(四边颜色不同 */ width: 0; height: 0; border-top: 1px solid pink; border-right: 1px solid rgb(21, 213, 174); border-bottom: 1px solid rgb(127, 74, 220); border-left: 1px solid rgb(244, 11, 93); }
复制
<div class="sanjiao"></div>
复制
效果图如上,对应代码如下:(1.宽高为0;2.border四边复合设置粗细,透明;3.根据需求单独设一条边为有色)(三步)
border的粗细,决定三角的大小
/* CSS直接画三角 */ .sanjiao { width: 0; height: 0; /*为了照顾兼容性:兼容低级浏览器,还需写: */ line-height: 0 ; font-size: 0; /* 下三角▼ --- 边框(四边颜色不同,三个透明),出现三角形 */ /*border-top: 1px solid pink; border-right: 1px solid transparent; border-bottom: 1px solid transparent; border-left: 1px solid transparent;*/ /* 效果同上 */ /* border的粗细,决定三角的大小 */ border: 50px solid transparent; border-top-color: pink; }
复制
效果图如上,对应代码如下:
.jd { position: relative; width: 100px; height: 100px; background-color: orange; } .jd span { position: absolute; top: -20px; right: 15px; width: 0; height: 0; line-height: 0px; font-size: 0px; border: 10px solid transparent; border-bottom-color: pink; }
复制
4.CSS用户界面样式
1.鼠标样式 cursor
语法:li { cursor: pointer; }
作用:鼠标放到对象上显示的效果
2.轮廓线 outline
多用于:表单input框
语法:取消表单轮廓:input { outline:none;(或outline: 0 ; )}(去掉默认的蓝色边框)
3.防止拖拽文本域 resize
语法:textarea{ resize: none; }(文本域不可调整大小)
注意:文本域内部自动有padding,所以标签<textarea></textarea>挨着,不要空开(效果如下)
写法一:光标左侧/上侧---没有空隙
写法二:光标左侧/上侧---有空隙
5.vertical-align属性&应用
1.属性:
用于:设置 图片或表单(行内块元素) 和文字的垂直对齐
设置一个元素的垂直对齐方式,只对行内元素/行内块元素有效
与行内块元素display: inline-block;搭配更合适
语法:vertical-align: baseline|top|middle|bottom
2.应用----解决图片底端 默认空白缝隙的问题
原因:行内块元素与文字默认-基线对齐
解决方案:
1.给图片添加:
vertical-align: bottom|top|middle等(提倡)
2.图片转换为块级元素:
display: block; (因为块无vertical-align属性) (不推荐--影响布局:右侧不能放文字)
.img { vertical-align: top/ middle/ bottom }
复制
3.应用---溢出文字省略号显示
3.1.单行-溢出文字省略号显示
- 必须满足三个条件:
1.强制一行内显示文本:white-space:nowrap;(默认 normal --自动换行)
2.超出的部分隐藏:overflow:hidden;
3.省略号代替超出部分:text-overflow:ellipsis;
.wordsome{ white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
复制
3.2.多行-溢出文字省略号显示(更推荐后台人员实现此效果,前端兼容性差)
有较大的兼容性问题,适合于webKit浏览器、移动端(大多都是webKit内核)
- 必须满足的条件:
超出的部分隐藏:overflow:hidden;
省略号代替超出部分:text-overflow:ellipsis;
弹性伸缩盒子模型显示:display:-webkit-box;
限制在一个块元素显示的文本的行数:-webkit-line-clamp:2;
设置或检索伸缩盒子对象的子元素的排列方式:-webkit-box-orient:vertical;
6.常见布局技巧
1.margin负值的运用
在布局盒子的时候,可能会出现两个盒子叠加到一起导致边框变宽的情况,像这样:
那么我们就可以在这个时候设置margin-left: -1px; (浮动紧挨着基础上,盒子向左移动1px)
margin-left: -1px;
复制
这个时候,如果想实现鼠标放上去就有选中整个边框的样子怎么做?如果只改变边框颜色,就会出现这种情况:
解决思路的核心---鼠标经过盒子时,提高当前盒子的层级
- 解决思路1:如果盒子没有定位,使用相对定位(占有原位置,有定位的会压住标准流,在上方显示)
.mar ul li:hover { position: relative; border-color: blue; }
复制
- 解决思路2:如果盒子有定位,加z-index;
.mar ul li { position: relative; float: left; margin-left: -1px; border: 1px solid red; } .mar ul li:hover { /* 2.如果盒子有定位,加z-index; */ z-index: 1; border-color: blue; }
复制
2.文字环绕浮动元素
巧妙运用--浮动元素不会压住文字的特性(只需给图片添加浮动,不会挡住标准流中的文字)
.box0 img { float: left; }
复制
3.行内块元素的巧妙运用
行内元素/行内块元素--想“水平居中”:给其父盒子添加text-align:center;即可
效果如上,代码如下:
/* 行内元素/行内块元素--想水平居中:给其父盒子添加text-align:center;即可 */ .box1 { text-align: center; } .box1 a { display: inline-block; text-decoration: none; width: 36px; height: 36px; line-height: 36px; text-align: center; background-color: #f7f7f7; border: 1px solid #ccc; color: #333; font-size: 14px; } .box1 .prev, .box1 .next { width: 100px; } .box1 .current, .box1 .elp { background-color: #fff; border: 0px; } .box1 input { width: 45px; height: 36px; border: 1px solid #ccc; /* 取消蓝色边框效果 */ outline: none; } .box1 button { width: 60px; height: 36px; background-color: #f7f7f7; border: 1px solid #ccc; }
复制
<div class="box1"> <a href="#" class="prev"><<上一页</a> <a href="#" class="current">2</a> <a href="#">3</a> <a href="#">4</a> <a href="#">5</a> <a href="#">6</a> <a href="#" class="elp">…</a> <a href="#" class="next">下一页>></a> 到第 <input type="text"> 页 <button>确定</button> </div>
复制
4.CSS三角强化
<i></i>多用于三角形
效果如上,代码如下:
/* CSS画---直角三角形 */ .zjsj { /* 不给宽度,高度,给边框(四边颜色不同,三个透明),出现三角形 */ width: 0; height: 0; /*为了照顾兼容性:兼容低级浏览器,还需写: */ line-height: 0; font-size: 0; /* 直角三角形 */ /*写法一: */ border-top: 200px solid pink; border-right: 100px solid blue; /*写法二:分开写: */ border-color: transparent red transparent transparent; border-style: solid; border-width: 200px 100px 0 0; }
复制
效果如上,代码如下:
.jdprice { width: 201px; height: 25px; border: 1px solid red; line-height: 25px; } .jdprice .red { position: relative; float: left; margin-right: 10px; width: 100px; height: 100%; background-color: red; text-align: center; color: #fff; } .jdprice .red i { position: absolute; right: 0px; /*直角三角形 */ width: 0; height: 0; border-top: 25px solid transparent; border-right: 13px solid #fff; } .jdprice .content { font-size: 14px; color: #666; text-decoration: line-through; }
复制
<div class="jdprice"> <span class="red">¥1749.00 <i></i> </span> <span class="content">¥229900</span> </div>
复制
5.CSS初始化
注:字体:不要用中文,用其对应的unicode编码代替,有效避免浏览器解释css代码时的乱码问题。(如:黑体:\9ED1\4F53 ; 宋体:\5B8B\4F53;)
/* 把我们所有标签的内外边距清零 */ * { margin: 0; padding: 0; } /* em 和 i 斜体的文字不倾斜 */ em, i { font-style: normal; } /* 去掉li 的小圆点 */ li { list-style: none; } img { /* border 0 照顾低版本浏览器 如果 图片外面包含了链接会有边框的问题 */ border: 0; /* 取消图片底侧有空白缝隙的问题 */ vertical-align: middle; } button { /* 当我们鼠标经过button 按钮的时候,鼠标变成小手 */ cursor: pointer; } a { color: #666; text-decoration: none; } a:hover { color: #c81623; } button, input { /* "\5B8B\4F53" 就是宋体的意思 这样浏览器兼容性比较好 */ font-family: Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "\5B8B\4F53", sans-serif; } body { /* CSS3 抗锯齿形 让文字显示的更加清晰 */ -webkit-font-smoothing: antialiased; background-color: #fff; font: 12px/1.5 Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "\5B8B\4F53", sans-serif; color: #666; } .hide, .none { /* 元素隐藏 */ display: none; } /* 清除浮动 */ .clearfix:after { visibility: hidden; clear: both; display: block; content: "."; height: 0; } .clearfix { *zoom: 1; }
复制