目录
一、三大特性
1.层叠性
- 相同选择器设置相同的样式,此时一个样式就会覆盖另一个冲突的样式。
- 层叠性主要解决样式冲突的问题
- 层叠性原则:
- 样式冲突,遵循的原则是就近原则(离标签近的)
2.继承性
- CSS中的继承:子标签会继承父标签里面的某些样式
- 如文本颜色和字号等
子元素可以继承父元素的样式(text-,font-,line-这些开头的可以继承,以及color属性)
高度、盒子模型的内外边距就不会继承
***行高的继承性
body{
font:12px/1.5 Microsoft YaHei;
}
行高可以跟单位也可以不跟
如果子元素没有设置行高,则会继承父元素行高为1.5
此时子元素的行高是:当前子元素文字大小*1.5
body行高1.5这样写最大的优势就是里面子元素可以根据自己文字大小自动化调整行高
<!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>Document</title>
<style>
body {
color: pink;
font: 12px/1.5 'Microsoft YaHei'
}
div {
/*子元素继承了父元素body的行高1.5*/
/*就是当前元素文字大小font_size的1.5倍,所以当前div行高14*1.5=21*/
font-size: 14px;
}
/*li没有指定文字大小 则会继承父亲的文字大小 body12px所有li的文字大小问12px,当前li的行高就是12*1.5=18px*/
</style>
</head>
<body>
<div>粉红色的回忆</div>
<p>粉红色的回忆</p>
<ul>
<li>我没有指定文字大小</li>
</ul>
</body>
</html>
3.优先级
- 选择器相同,则执行层叠性
- 选择器不同,则按权重
div {
color:pink!important
}
注意事项
- 权重是有4子数字组成,但是不会有进位
- 等级判断是从左到右,如果某一位数值相同,则判断下一位数值
- 继承的权重是0,如果该原始没有直接选中,不管父亲元素权重多高,子元素得到的权重都是0。所以以后我们看标签到底执行哪个样式,就先看这个标签有没有直接被选出来
- a链接口浏览器默认指定了一个颜色 蓝色有下划线
4.CSS权重叠加
- 权重叠加:如果是复合选择器,则会有权重的叠加,需要计算权重
<head>
<style>
li {
color:green;
}
/* li 的权重是 0,0,0,1 */
ul li{
color :red;
}
/* 复合选择器权重叠加,ul li权重 0,0,0,1 + 0,0,0,1 =0,0,0,2 */
.nav li{
color:pink;
}
/* .nav li 权重 0,0,1,0 + 0,0,0,1 = 0,0,1,1 */
<style>
</head>
<body>
<ul class="nav">
<li>大猪蹄子</li>
<li>大肘子</li>
<li>猪尾巴</li>
</ul>
</body>
div ul li
----------> 0,0,0,3.nav ul li
-------------->0,0,1,2a:hover
---------------->0,0,1,1 /* 伪类选择器*/.nav a
-------------------->0,0,1,1
小案例
<head>
<style>
/*.nav li权重11*/
.nav li {
color: red;
}
/*需求把第一个小li颜色改为粉色加粗*/
/*pink权重是10 .nav .pink权重是20*/
.nav .pink {
color: pink;
font-weight: 700;
}
</style>
</head>
<body>
<ul class="nav">
<li class="pink">人生四大悲</li>
<li>家里没宽带</li>
<li>网速不够快</li>
<li>手机没流量</li>
</ul>
</body>
二、盒子模型
目标
能改准确阐述盒子模型4个组成部分
利用边框复合写法给元素添加边框
计算盒子实际大小
利用盒子模型布局模块案例
给盒子设置圆角边框
给盒子添加阴影
给文字添加阴影
1.盒子模型
页面布局要学习三大核心
- 盒子模型
- 浮动
- 定位
页面布局步骤
1.先准备好相关的网页元素,网页元素基本都是盒子
2.利用CSS设置好盒子样式,然后摆放到相应位置
3.往盒子里面装内容
盒子模型的组成:
border(边框)
content(内容)
padding(内边距)
margin(外边距)
(1)边框(border)
-
CSS 边框属性允许你指定一个元素边框的样式和颜色
-
边框由三部分组成:边框宽度(粗细) 边框样式 边框颜色
boder-width边框的粗细,一般情况都用px
border-style solid实线边框 dashed虚线 dotted点线
简写:无顺序,通俗如下顺序
border : borde-width || border-style || border-color
boder:5px solid pink
边框分开写法
border-top:1px solid red 只设定上边框,其余同理
border-bottom下边框
左右一样的
(2)border-collapse表格细线边框
-
border-collapse 属性控制浏览器绘制表格边框的方式,它控制相邻单元格的边框
-
border-coppapse
表格的细线边框
border-collapse : collapse;
- 表示相邻边框合并在一起
- collapse 单词是合并的意思
table,td,th{
boder:1px solid pink
}
(3)边框会影响盒子实际大小
边框会额外增加盒子的实际大小,因此我们有两种方案解决:
- 测量盒子大小的时候,不量边框
- 如果测量的时候包含了边框,则需要 width/height 减去边框宽度
(4)内边距padding
padding 属性用于设置内边距,即盒子边框与内容之间的距离
- padding属性(简写属性)可以有一到四个值
(5)padding影响盒子大小
给盒子指定padding之后,
1.内容和边框有了距离,添加了内边距
2.padding影响了盒子实际大小
也就是盒子已经有了宽度和高度,此时再指定内边框,会撑大盒子
解决方案:如果保证盒子和效果图大小保持一致,则让width、height 减去多出来的内边距大小
新浪导航栏实例:
*1a标签转为行内块元素
*2padding指的左右内边距,撑开距离
<!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>Document</title>
<style>
.nav {
height: 41px;
border-top: 3px solid #ff8500;
border-bottom: 1px solid #edeef0;
background-color: #fcfcfc;
line-height: 41px;
}
.nav a {
display: inline-block;
height: 41px;
padding: 0 20px;
font-size: 12px;
color: #4c4c4c;
text-decoration: none;
}
.nav a:hover {
background-color: #eee;
color: #ff8500;
}
</style>
</head>
<body>
<div class="nav">
<a href="#">新浪导航</a>
<a href="#">手机新浪网</a>
<a href="#">移动客户端</a>
<a href="#">微博</a>
<a href="#">三个字</a>
</div>
</body>
</html>
(7)padding不影响盒子大小情况
- 如果盒子本身没有指定width/height属性,则此时padding不会撑开盒子大小
(8)外边距margin
margin
(外边距)属性用于设置外边距,即控制盒子和盒子之间的距离
margin 简写方式代表的意义跟 padding 完全一致
(9)外边距典型应用
外边距可以让块级盒子水平居中,但是必须满足两个条件
- 盒子必须制定了宽度(width)
- 盒子左右的外边距都设置为 auto
左右的外边距都设置为 auto 有三种写法:
- margin-left:auto;margin-right:auto
- margin:auto
- margin:0 auto
注意:
以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中给其父元素添加 text-align: center 即可。
(10)外边距合并
使用 margin 定义块级元素的垂直外边距时,可能会出现外边距的合并。
主要有两种情况:
- 相邻块元素垂直外边距的合并
- 嵌套块元素垂直外边距的塌陷
①相邻块元素垂直外边距的合并
当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距 margin-bottom,下面的元素有上外边距 margin-top ,则他们之间的垂直间距不是 margin-bottom 与 margin-top 之和。取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并。
②嵌套块元素垂直外边距的塌陷
对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值
解决方案:
- 可以为父元素定义上边框
- 可以为父元素定义上内边距
- 可以为父元素添加 overflow: hidden
还有其他方法,比如浮动、固定、绝对定位的盒子不会有塌陷问题。后面会进行总结。
(11)清除内外边距
页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致。因此我们在布局前,首先要清除下网页元素的内外边距。
* { padding: 0;
margin: 0; }
注意:
行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距。但是转换为块级和行内块元素就可以了
三、PS基本操作
因为网页美工大部分效果图都是利用 PS(Photoshop)来做的,所以以后我们大部分切图工作都是在 PS 里面完成。
登录ps网页版即可
- 文件➡打开 :可以打开我们要测量的图片
- Ctrl+R:可以打开标尺,或者 视图➡标尺
- 右击标尺,把里面的单位改为像素
- ==Ctrl+ 加号(+)==可以放大视图, ==Ctrl+ 减号(-)==可以缩小视图
- 按住空格键,鼠标可以变成小手,拖动 PS 视图
- 用选区拖动 可以测量大小
- Ctrl+ D 可以取消选区,或者在旁边空白处点击一下也可以取消选区
四、综合案例
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>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
body {
background-color: #f3f6f3;
}
.box {
width: 298px;
height: 500px;
background-color: #fff;
margin: 100px auto;
}
.box img {
/*图片和盒子占满*/
width: 100%;
}
.review {
height: 50px;
font-size: 14px;
/*这个段落没有width属性 所有padding不会撑开盒子的宽度*/
padding: 0 28px;
margin-top: 30px;
}
.appraise {
font-size: 12px;
color: #babebb;
margin-top: 20px;
padding: 0 28px;
}
.info {
font-size: 14px;
margin-top: 15px;
padding: 0 28px;
}
.info h4 {
display: inline-block;
}
.info em {
font-style: normal;
color: #e5e6e3;
margin: 0 6px 0 15px;
}
a {
color: #333;
text-decoration: none;
}
</style>
</head>
<body>
<div class="box">
<img src="bg.png" alt="">
<p class="review">
快递牛,整体不错蓝牙可以说秒懂。红米给力
</p>
<div class="appraise">
来着125327738的评价
</div>
<div class="info">
<h4><a href="#">Redmi AirDots真无线蓝...</a></h4>
<em>|</em>
<span>99.9元</span>
</div>
</div>
</body>
</html>
2.快报模块
shift+alt不放,鼠标连续下滑,再松开alt,输入“#”,即可多行同时输入
新知识点
去掉 li 前面的小圆点
li { list-style: none; }
<!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>Document</title>
</head>
<style>
* {
margin: 0;
padding: 0;
}
.box {
width: 248px;
height: 163px;
border: 1px solid #ccc;
margin: 100px auto;
}
.box1 {
height: 32px;
padding-left: 15px;
border: 1px dotted #ccc;
font-size: 14px;
font-weight: 400;
line-height: 32px;
}
/*去掉小圆点*/
li {
list-style: none;
}
a {
font-size: 12px;
color: #666;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.box ul li {
height: 23px;
line-height: 23px;
padding-left: 20px;
}
ul {
margin-top: 7px;
}
</style>
<body>
<div class="box">
<h3 class="box1">品优购快报</h3>
<ul>
<li><a href="#">【特惠】爆款耳机5这秒!</a></li>
<li><a href="#">【特惠】母亲节,健康好礼低至5折!</a></li>
<li><a href="#">【特惠】爆款耳机5折秒!</a></li>
<li><a href="#">【特惠】9.9元洗100张照片!</a></li>
<li><a href="#">【特惠】长虹智能空调立省1000</a></li>
</ul>
</div>
</body>
</html>
五、圆角边框
border-radius 属性用于设置元素的外边框圆角
border-radius:length;
radius
半径(圆的半径) 原理:(椭)圆与边框的交集形成圆角效果
- 参数值可以是数值或百分比的形式 border-radius: 50px; border-radius: 50%;
- 如果是正方形,想要设置为一个圆,把数值修改为高度或者宽度的一半即可,或者直接写为50%
- 如果是一个矩形,设置为高度的一半就可以
- 该属性是一个简写属性,可以跟四个值,分别代表左上角,右上角,右下角,左下角粉开
- 分开写border-top-left-radius: border-top-right-radius: border-bottom-right-radius: border-bottom-left-radius:
六、盒子阴影
CSS3 中新增了盒子阴影,我们可以使用 box-shadow 属性为盒子添加阴影。
box-shadow: h-shadow v-shadow blur spread color inset;
- 模糊距离:影子的虚实
- 阴影尺寸:影子的大小
注意:
- 默认的是外阴影(outset),但是不可以在后面写这个单词,否则导致阴影无效
- 盒子阴影不占用空间,不会影响其他盒子排列
- 前两个必须写,后面可不写
需求:文字经过时出现阴影
.yinying:hover {
box-shadow: 10px 10px 10px -4px rgba(0, 0, 0, .3)
}
七、文字阴影
在 CSS3 中,我们可以使用 text-shadow 属性将阴影应用于文本。
text-shadow: h-shadow v-shadow blur color