选择器的作用:选择页面对应的标签,方便后续设置样式
标签选择器:通过标签名,找到页面中所有这类标签,设置样式
类选择器:标签上的class属性,class的属性值叫类名
语法:“.”+类名
注意点:
类名可以由数字、字母、下划线和中划线组成,但不能以数字或中划线开头
一个标签可以有多个类名,类名之间以空格隔开
类名可以重复,一个类选择器可以同时选择多个标签
id选择器:#id属性值
注意点:
后代选择器:根据html标签的嵌套关系,选择父元素后代中满足条件的元素
选择器语法:父选择器 父选择器的后代标签 { css属性:属性值;}
后代包括:儿子、孙子、重孙子等等
子代选择器:>
父元素子代中满足条件的元素
语法:选择器1>选择器2{ css}
在选择器1所找到标签的子代(儿子)中,找到满足选择器2的标签,设置标签
子代只包括:儿子
选择器之间用>隔开
并集选择器:选择器1,选择器2,… ,选择器n
每组选择器可以是基础选择器也可以是复合选择器
并集选择器一般一行写一个
交集选择器:选择器1选择器2{css}
选中页面中 同时满足 多个选择器的同一个标签
选择器之间是紧挨着的
标签选择器必须写在最前面
例:
p.head.title{}
伪类选择器:设置鼠标悬停效果
选择器语法:选择器:hover {css}
伪类选择器选中的是元素的某种状态
伪元素的伪类选择器用法:
a:hover::after{}
通配符选择器:*{}
找到页面所有的标签
开发中使用极少,只会在特殊情况下才会用到
小页面用于去除标签默认的margin和padding
作用:根据元素在html中的结构关系查找元素
优势:减少对于HTML中类的依赖,有利于保持代码整洁
场景:常用于查找某父级选择器中的子元素
选择器 | 意义 |
---|---|
E:first-child{} | 匹配父元素中第一个子元素,并且是E元素 |
E:last-child{} | 匹配父元素中最后一个子元素,并且是E元素 |
E:nth-child{} | 匹配父元素中第n个子元素,并且是E元素 |
E:nth-last-child{} | 匹配父元素中倒数第n个子元素,并且是E元素 |
E:nth-child{}
n的注意点:
n为整数0,1,2,3…
通过n可以组成常见公式
功能 | 公式 |
---|---|
偶数 | 2n,even |
奇数 | 2n+1,2n-1,odd |
找到前5个 | -n+5 |
找到第5个之后的 | n+5 |
E:nth-of-type(n){ }
只在父元素的同类型(E)子元素范围中,匹配第n个
:nth-child->直接在所有还在中数个数
:nth-of-type->先通过该类型找到符合条件的一堆子元素,然后在这一堆子元素中数个数
实际开发中:
场景:常用于选中超链接的不同状态
选择器语法:
语法 | 功能 |
---|---|
a:link{} | 选中a链接 未访问过 的状态 |
a:visited{} | 选中a链接 访问之后 的状态 |
a:hover{} | 选中 鼠标悬停 的状态 |
a:active{} | 选中 鼠标按下 的状态 |
注意点:
如果需要同时实现以上4种伪类状态效果,需要按照LVHA顺序书写
场景:用于选中元素获取焦点时状态,常用于表单控件
选择器语法:
input:focus {
background-co`在这里插入代码片`lor: ;
}
效果:表单控件获取焦点时默认会显示外部轮廓线
场景:通过元素上的HTML属性来选择元素,常用于选择input标签
选择器 | 功能 |
---|---|
E:[attr] | 选择具有attr属性的E元素 |
E[attr=“val”] | 选择具有attr属性并且属性值等于val的E元素 |
取值:
效果 | 元素 | 元素 |
---|---|---|
正常 | normal | 400px |
加粗 | bold | 700px |
取值:
效果 | 元素 |
---|---|
正常(默认) | normal |
倾斜 | italic |
高与宽相等的字体
常见取值:具体字体1,具体字体2,具体字体3,,,,字体系列
渲染规则:从左往右按照顺序查找,如果电脑中未安装该字体,则会显示下一个字体
连写font:style weight size family;
SWSF
若写在前面,会被后面连写中的默认样式覆盖
如果给同一个标签设置了相同样式,此时样式会层叠(覆盖),写在最下面的会生效
文本缩进text-indent
单位px,em
1em = 1个font-size
水平方向对齐:
text-align:center
text-decoration
元素 | 效果 |
---|---|
underline | 下划线(常用) |
line-through | 删除线 |
overline | 上划线(几乎不用) |
none | 无线(常用) |
能让哪些元素水平居中
可以通过margin:0 auto;实现
注意点:
控制行间距
line-height
取值:数字+px或倍数(当前标签font-size的倍数)
如果同时设置了行高和font连写,注意覆盖问题
swsf
font:style weight size/line-height family
emmet语法
通过简写语法,快速生成代码
语法:
类型 | 代码 |
---|---|
标签名 | div Tab |
类选择器 | .red tab |
id选择器 | #one tab |
交集选择器 | p.red#one tab |
子代选择器 | ul>li tab |
内部文本 | ul>li{我是内容} tab |
创建多个 | ul>li*3 tab |
background-color(bgc)
关键字、rgb表示法、rgba表示法、十六进制
背景色默认是透明色:rgba(0,0,0,0) transparent;
backgound-image(bgi)
backgound-image:url("图片路径");
backgoun-repeat(bgr)
repeat (默认)
no-repeat
repeat-x
repeat-y
backgound-position(bgp):水平方向的位置x 垂直方向的位置y;
属性值
水平方向 left,center,right
垂直方向 top center bottom
坐标系,原点(0,0),(x,y)
将图片左上角的坐标与坐标点重合
backgound:color image repeat position
img是一个标签,不设置宽高会默认以原尺寸显示
div+backgound-image 需要设置div的宽高,因为背景图片只是一个装饰,不能撑开div标签
属性:dispaly:block
显示特点:独占一行(一行只能显示一个)
宽度默认是父元素的宽度,高度默认由内容撑开
可以设置宽高
代表标签DIV、P、H系列、ul、li、di、dt、dd、form、header、nav、footer。。。
display:inline
一行可以显示多个
宽度和高度由内容撑开
不可以设置宽高
代表:a、span、b、u、i、s、strong、ins、em、del
display:inline-block
一行可以显示多个
可以设置宽高
代表:Input、textarea、button、select
特殊情况:img标签有行内块元素特点,但是chrome调试工具中显示结果是inline
改变元素默认的显示特点,让元素符合布局要求
但是:p标签中不要嵌套div、p、h等块级元素
a标签不能嵌套a标签
伪元素:一般页面中的非主体内容可以使用伪元素
区别:
元素:HTML设置的标签
伪元素:CSS模拟出来的标签效果
::before | 在父元素内容的最前添加一个伪元素 |
---|---|
::after | 在父元素内容的最后添加一个伪元素 |
注意点:
标准流:又称文档流,是浏览器在渲染显示网页内容时采用的一套排版规则,规定了应该以何种方式排列元素
块级元素:从上往下,垂直布局,独占一行
行内元素或行内块元素:从左往右,水平布局,空间不够自动拆行
特性:子元素有默认继承父元素样式的特点(子承父业)
可以继承的常见属性:
可以通过调试工具判断样式是否继承
可以直接给ul设置list-style:none属性,从而去除列表默认的小圆点样式
直接给body设置统一的font-size,从而统一不同浏览器的默认字大小
如果元素有浏览器默认样式,此时继承性依然存在,但是优先显示浏览器的默认样式
当样式冲突时,只有当选择器优先级相同时,才能通过层叠性判断结果
目的:能够计算css权重,分析并解决css冲突问题
特性:不同选择器具有不同的优先级,优先级高的选择器样式会覆盖优先级低的样式
优先级公式:
继承<通配符选择器<标签选择<类选择器
注意:
!important写在属性值后面,分号在前面
!important不能提升继承的优先级,只要是继承就优先级最低
实际开发中不建议用important
场景:如果是复合选择器,此时需要通过权重叠加计算方法,判断最终那个选择器优先级最高会生效
权重叠加计算公式:(每一级之间不存在进位)
(第一级,第二级,第三级,第四级)
(0,0,0,0)
第一级 | 第二级 | 第三级 | 第四级 |
---|---|---|---|
0 | 0 | 0 | 0 |
复合选择器中:行内样式的个数,id选择器的个数,类选择器的个数,标签选择器的个数
比较规则:
1、先比较第一级数字,如果比较出来了,之后的通通不看
2、如果第一级数字相同,此时再去比较第二级数字,如果比较出来了,之后的通通不看
3、。。。。
4、如果最终所有数字都相同,表示优先级相同,则比较层叠性(谁写在下面,谁说算)
注意:如果!important不是继承,权重最高
遇到样式出不来,通过调试工具找错
查错步骤 :
常见原因1:选择器单词拼错
常见原因2:选择器结构写错
常见原因1:样式被注释
常见原因2:样式被覆盖
常见原因1:属性值后没有分享
常见原因2:出现中文标点
常见原因3:属性名或属性值单词拼错
css中规定每个盒子分别由:内容区域(content)、内边距区域(padding),边框区域(border)、外边距区域(margin)构成,这就是盒子模型
border-width:边框宽
border-style:实线solid,虚线dashed,点线dotted
border-color:边框颜色
border:width style color
快捷键:bd+tab
border+方位名词
盒子实际大小=左(上)边框+右(下)边框+内容
padding:
取值:上下左右;上下,左右;上,左右,下;上,右,下,左
从上开始,顺时针数
padding单方向取值
padding+方位名词
盒子实际大小=左外边距+左边框+左内边距+内容+右内边距+右边框+右外边距
取值:上下左右;上下,左右;上,左右,下;上,右,下,左
从上开始,顺时针数
margin的单方向设置
margin-方位名词
方向 | 属性 | 效果 |
---|---|---|
水平方向 | margin-left | 让当前盒子往右移动 |
水平方向 | margin-right | 让右边的盒子往右移动 |
垂直方向 | margin-top | 让当前盒子往下移动 |
垂直方向 | margin-bottom | 让下面的盒子往下移动 |
body标签默认有margin:8px
p标签默认有上下的margin
ul标签默认由上下的margin和padding-left
水平布局的盒子,左右的margin都是正常的,互不影响
最终两者距离为左右margin的和
垂直布局的块级元素,上下的margin会合并
最终两者距离为margin的最大值
解决:避免就好,只给其中一个盒子设置margin即可
互相嵌套的块级元素,子元素的margin-top会合并作用在父元素上
会导致父元素一起往下塌陷
解决:
给父元素设置border-top或者padding-top(分割父子元素的margin-top)
给父元素设置overflow:hidden
转成行内块元素 display:inline-block
设置浮动float:left
水平方向的margin和padding布局中有效
垂直方向的margin和padding布局中无效
如果子盒子没有设置宽度,此时默认是父盒子的宽度
此时给子盒子设置左右的padding或者左右的border,此时不会撑大子盒子
手动将多余的部分在内容中减去
box-sizing:border-box;
浏览器自动调整
格式化上下文(Block formatting Context)
是web页面的可是css渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域
创建BFC方法:
html标签是BFC盒子
浮动元素是BFC元素
行内块元素是BFC元素
overflow属性的取值不为visible。如auto、hidden
。。。。
BFC盒子常见特点:
BFC盒子会默认包裹住内部子元素(标准流、浮动)->应用:清除浮动
BFC盒子本身与子元素之间不存在margin的塌陷现象->应用:解决margin的塌陷
。。。。
浮动作用:早期:图文环绕
现在:网页布局:让垂直布局的盒子变成水平布局
浮动的代码
float:right/left
浮动元素会脱离标准流(脱标),在标准流中不占位置,相当于从地面飘到了空中,在地面不占位置,后面的元素自动补位
浮动元素比标准流高半个级别,可以覆盖标准流中的元素
浮动找浮动,下一个浮动元素会在上一个浮动元素后面左右浮动
浮动元素会受到上面元素边界的影响
浮动元素有特殊显示效果
一行可以设置多个,可以设置宽高
浮动的元素不能通过text-align:center或者margin:0 auto;让浮动元素本身水平居中
含义:清除浮动带来的影响
影响:如果子元素浮动了,此时子元素不能撑开标准流的块级父元素
原因:子元素浮动后脱标->不占位置
目的:需要父元素有高度,从而不影响其他网页元素的布局
优点:简单、粗暴
缺点:有些布局中不能固定父元素高度:新闻,京东推荐模块
1、在父元素内容的最后添加一个块级元素
2、给添加的块级元素设置:clear:both;
缺点:会在页面中添加额外的标签,会让页面的HTML结构变得复杂。
用伪元素代替额外标签
1、基本写法
.clearfix::after{
content:'';
display:block;
clear:both;
}
2、补充写法
.clearfix::after{
content:'内容';
dispaly:block;
clear:both;
/*在网页中看不到伪元素内容*/
height:0;
visibllity:hidden;
}
优点:在项目中使用,直接给标签加类即可清除浮动
.clearfix::before,.clearfix::after {
content:' ';
display:table;(类似于块)
}
clearfix::after{
clear:both;
}
优点:在项目中使用,直接给标签加类即可清除浮动
实际开发中,伪元素清除法用的多
网页常见布局方式
定位之后的元素层级最高,可以层叠在其他盒子上面
属性名:position
常见属性值:
定位方式 | 属性值 |
---|---|
静态定位 | static |
相对定位 | relative |
绝对定位 | absolute |
固定定位 | fixed |
偏移值设置分为两个方向,水平和垂直方向各选一个使用
选取的原则一般是就近原则(哪边近选那个)
常见偏移值:
方向 | 属性名 | 属性值 | 含义 |
---|---|---|---|
水平 | left(权重比right大) | 数字+px | 距离左边的距离 |
水平 | right | 数字+px | 距离右边的距离 |
垂直 | top(权重比bottom大) | 数字+px | 距离上边的距离 |
垂直 | bottom | 数字+px | 距离下边的距离 |
静态定位是默认值,就是之前认识的标准流
position:static
注意点:
自恋型定位,每次定位,相对于自己之前的位置进行移动
position:relative;
特点:
应用场景:
拼爹型定位,相对于非静态定位的父元素来进行移动
position:absolute;
特点:
应用场景:子绝父相
绝对定位到底相对于谁进行移动?
分两种情况:
1、先祖元素中没有定位-----默认相对于浏览器进行移动
2、祖先元素中有定位-------相对于最近的有定位的祖先元素进行移动
子绝父相的介绍
让子元素相对于父元素进行自由移动
含义:
子元素:绝对定位
父元素:相对定位
好处:父元素是相对定位,则对网页布局影响最小
子绝父绝的特殊场景
在使用子绝父相的时候,发现父元素已经有绝对定位了,此时直接子绝即可
原因:父元素已经有定位已经满足要求,如果盲目修改父元素定位方式,可能会影响之前写好的布局
死心眼型定位,相对于浏览器可视区域进行定位移动
position:fixed;
特点:
应用场景:让盒子固定在屏幕中的某个位置
例如,侧边导航栏
不同布局方式元素的层级关系
标准流<浮动<定位
不同定位方式元素的层级关系
默认层级相同
根据html结构来看,写在下面的元素层级更高,会覆盖上面的元素
改变定位元素的层级
z-index:1;
数字越大层级越高
浏览器文字类型元素排版中存在用于对齐的基线(baseline)
场景:解决行内/行内块元素垂直对齐问题
问题:当图片和文字在一行中显示时,其底部不是对齐的
属性名:vertical-align
属性值:
属性值 | 效果 |
---|---|
baseline | 默认,基线对齐 |
top | 顶部对齐 |
middle | 中部对齐 |
bottom | 底部对齐 |
场景:设置鼠标光标在元素上时显示的样式
属性名:cursor
常见属性值
属性值 | 效果 |
---|---|
default | 默认值,通常是箭头 |
pointer | 小手效果,提示用户可以点击 |
text | 工字型,提示用户可以选择文字 |
move | 十字光标,提示用户可以移动 |
not-allowed | 禁止显示光标 |
border-radius
常见取值:数字+px 、百分比
赋值规则:从左上角开始赋值,然后顺时针赋值,没有赋值的看对角
应用:圆形 正方形盒子border-radius:50,胶囊 长方形盒子border-radius:高度的一半
溢出部分:指的是盒子内容部分所超出盒子范围的区域
场景:控制内容溢出部分的显示效果,如:显示、隐藏、滚动条
属性名:overflow
常见属性值:
属性值 | 效果 |
---|---|
visible | 默认值,溢出部分可见 |
hidden | 溢出部分隐藏 |
scroll | 无论是否溢出,都显示滚动条 |
auto | 根据是否溢出,自动显示或隐藏滚动条 |
场景:让某元素本身在屏幕中不可见。如:鼠标:hover之后元素隐藏
常见属性:
visibility:hidden
display:none
区别:
visibility:hidden隐藏元素本身,并且在网页中占位置
display:none隐藏元素本身,并且在网页中不占位置
注意点:
开发中经常会通过display属性完成元素的显示隐藏切换
display:none;(隐藏)、display:block(显示)
场景:让某元素整体(包括内容)一起变透明
属性名:opacity
属性值:0~1之间的数字
1表示完全不透明
0表示完全透明
注意点:
opacity会让元素整体透明,包括里面的内容,如:文字、子元素等
场景:让相邻表格边框进行合并,得到细线边框效果
border-collspan:collspan
步骤:
设置一个盒子
设置四周不同颜色的边框
将盒子宽高设置为0,仅保留边框
得到一个三角形后,将其他三个三角形设为透明色
改变三角形形状
通过调整不同边框的宽度,可以调整三角形的形态
text-shadow
参数 | 作用 |
---|---|
h-shadow | 必须,水平偏移量,允许负值 |
v-shadow | 必须,垂直偏移量,允许负值 |
blur | 可选,模糊度 |
color | 可选,阴影颜色 |
box-shadow
参数 | 作用 |
---|---|
h-shadow | 必须,水平偏移量,允许负值 |
v-shadow | 必须,垂直偏移量,允许负值 |
blur | 可选,模糊度 |
spread | 可选,阴影扩大 |
color | 可选,阴影颜色 |
inset | 可选,将阴影改为内部阴影 |
transition:width 3s;
待续
精灵图:项目中将多张小图片,合并成一个大图片,这张大图片称之为精灵图
优点:减少服务器发送次数,减轻服务器的压力,提高页面加载速度
精灵图的使用步骤:
网页:书页
网站:书
网页与网站的概念
网站:提供特定服务的一组网页集合
网页:网站中的每一页
search engine optimization:搜索引擎优化
作用:让网站在搜索引擎上的排行靠前
提升引擎的常见方法:
竞价排名
将网页制作成html后缀
标签语义化(在合适的地方使用合适的标签)
SEO三大标签
title:网页标题标签
description:网页描述标签
keywords:网页关键字标签
有语义的布局标签:
标签名 | 语义 |
---|---|
header | 网页头部 |
nav | 网页导航 |
footer | 网页底部 |
aside | 网页侧边栏 |
section | 网页区块 |
article | 网页文章 |
以上标签显示特点和div一致,但是比div多了些语义
场景:把页面的主体内容约束在网页中间
作用:让不同大小的屏幕都能看到页面的主体内容
.container {
width:1240px;
margin:0 auto;
}
版心常用类名:container、wrapper、w等
css的书写顺序
不同的css书写顺序会影响浏览器的渲染性能
顺序 | 类别 | 属性 |
---|---|---|
1 | 布局属性 | display、position、float、clear、visibility、overflow |
2 | 盒子模型+背景 | width、height、margin、padding、border、background |
3 | 文本内容属性 | color、font、text-decoration、text-align、line-height |
4 | 点缀属性 | cursor、border-radius、text-shadow、box-shadow |
开发中推荐 多用类+后代,一个选择器中的类选择器的个数推荐不超过3个
项目结构搭建
在实际开发中,项目文件夹不建议使用中文
所有项目相关文件都保存在 xtx-pc-client目录
一般习惯将ico图标放在项目根目录
images:存放网站固定使用的图片素材,如:logo、样式装饰图片等
uploads:存放网站非固定使用的图片素材,如:商品图片、宣传图片等
新建index.html在根目录
新建css文件保存网站的样式,并新建以下css文件:
基础公共样式
场景:一般项目开始前,首先会去掉浏览器默认样式,设置为 当前项目需要的初始化样式
作用:防止不同浏览器中标签默认样式不同的影响,统一不同浏览器的默认显示效果,方便后续项目开发
要求:已经准备好base.css代码,同学们需要认识,项目中可以直接引用
index页面骨架设置
网页语言:lang=“zh-cw”
网页标题
网页描述
网页关键词
ico图标
相关外联样式