HTML部分

1.html的基本结构

<!DOCTYPE html>
<html>
<head>
      <meta charset="UTF-8">
      <title>Title</title>
</head>
<body>
</body>
</html>

2.实体

在网页中编写的多个空格默认情况会自动被浏览器解析为一个空格,同时在HTML中有些时候,我们不能直接书写一些特殊符号,比如:多个连续的空格,比如字母两侧的大于和小于号。如果我们需要在网页中书写这些特殊的符号,则需要使用html中的实体(转义字符)

    实体的语法:
          &实体的名字;

一些常用的实体

            &nbsp; 空格
            &gt; 大于号
            &lt; 小于号
            &copy; 版权符号

3.meta,title标签

在html的head中我们经常看到这类标签

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<!--表示 让网页打开后重定向到另一个网页,content中3表示3s后跳转到url中的网址-->
<meta http-equiv="refresh" content="3; url=http://www.topzhang.cn">

meta主要用于设置网页中的元数据,其中有些属性和属性值含义如下:

charset 指定网页的字符集

<meta charset="UTF-8">

name 指定数据的名称, content 指定数据的内容

keywords 表示网站的关键字

<meta name="Keywords" content="网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东"/>

description 用于网站的描述,会显示在搜索引擎的搜索结果中

<meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。">
<meta name="keywords" content="Bilibili,哔哩哔哩,哔哩哔哩动画,哔哩哔哩弹幕网,弹幕视频,B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,二次元,游戏视频,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid,日本动漫,国产动漫,手机游戏,网络游戏,电子竞技,ACG燃曲,ACG神曲,追新番,新番动漫,新番吐槽,巡音,镜音双子,千本樱,初音MIKU,舞蹈MMD,MIKUMIKUDANCE,洛天依原创曲,洛天依翻唱曲,洛天依投食歌,洛天依MMD,vocaloid家族,OST,BGM,动漫歌曲,日本动漫音乐,宫崎骏动漫音乐,动漫音乐推荐,燃系mad,治愈系mad,MAD MOVIE,MAD高燃">   

title标签的内容会作为搜索结果的超链接上的文字显示(网页的标题)

<title>document</title>

其他<head>标签中常见的标签

  • <style> 定义CSS样式
  • <link> 链接外部CSS文件或脚本文件
  • <script> 定义脚本语言
  • <base> 定义页面所有链接的基础定位(用得很少)

4.语义化标签

在使用标签时,还需要关注的是标签的语义,而不只是它的样式

h1~h6 标题标签,重要性逐级减小。h1在网页中重要性仅此于title标签,h6最不重要,当然一般只会用到h1~h3
标题标签都是块元素,在页面中独占一行的元素称为块元素

    <h1>标签一</h1>
    <h2>标签二</h2>
    <h3>标签三</h3>
    <h4>标签四</h4>
    <h5>标签五</h5>
    <h6>标签六</h6>

p标签表示页面中的一个段落,p也是一个块元素

hgroup用来为标题分组,可将一组相关的标题放入当中

    <hgrpup>
        <h1>回乡偶书</h1>
        <h2>其一</h2>
    </hgrpup>

em标签用于表示语义语音的加重,在页面中不会独占一行的元素交内联元素(行内元素),em标签就是内联元素

 <p>今天<em>天气</em>不错</p>

strong表示重要的内容强调,也是内联元素

blockquote 表示一个长引用,是一个块元素

q 表示短语引用,是一个内联元素

鲁迅说:
     <blockquote>
        这句话我从来都没说过!
     </blockquote>
     鲁迅说:<q>这句话我从来都没说过!</q>

br标签表示换行,是一个自结束标签

<br>

div 无语义标签,目前页面的主要布局标签
span 行内元素,主要用于套文字

总结一些语义化标签

hr 表示水平线
cite 表示cite(引用),表现为斜体(常用来引用网站url)
sup 表示superscripted(上标)
sub 表示subscripted(下标)
del 表示删除线

H5新增的一些语义化标签
header 表示网页头部
main 表示网页的主体(一个页面只有一个)
footer 表示网站的底部
nav 表示网页中的导航
aside 和主题相关的其他内容(侧边栏)
article 表示独立的文章
section 表示一个独立的区块,如上的标签都不能用时使用section

标签元素的一些特点
块元素,在网页中一般通过块元素对页面进行布局
常见块元素:div ,p ,ul , li ,h1-h6…

行内元素,行内元素主要用来包裹文字
常见行内元素:span ,a ,strong ,em ,b ,s ,i ,font…

一般会在块元素内放行内元素,而不会在行内元素里放内联元素
注意:p标签中不能放任何的块元素

5.列表

列表(list),在html中可创建列表,有三种

  1. 有序列表
  2. 无序列表
  3. 定义列表

有序列表,使用ol标签来创建列表,使用li来表示列表项

无序列表,使用ul标签来创建列表,使用li来表示列表项

定义列表,使用dl来创建列表,使用dt来表示定义的内容,使用dd来表示对内容的说明

另外,列表之间可以互相嵌套
写法:

<ol>
        <li>结构</li>
        <li>表现</li>
        <li>行为</li>

    </ol>

    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>

    <dl>
        <dt>结构</dt>
        <dd>结构表示网页的结构,结构用来规定网页中那里是标题,那里是段落</dd>
    </dl>

6.超链接

超链接 a标签

超链接可以从一个页面跳转到其他页面,或者是当前页面的其他位置,
属性:
href:填写网址的url

target:用来指定超链接打开页面的位置
属性值:
_self 默认值,在当前页面打开超链接
_blank 在一个新的页面打开超链接
还可将a的href属性值写为#,表示回到顶部,另外想跳转到页面的指定位置可以使用id值

注意:
在a标签中可以放任何标签,除了自己

7.路径

相对路径,是指目标相对于当前文件的路径,网页结构设计中多采用这种方法来表示目标的路径。相对路径有多种表示方法,其表示的意义不尽相同。表示方法如下:

./表示当前文件所在目录(可省略)
../表示当前文件的上一级目录
../../ 代表文件所在的父级目录的父级目录
/ 代表文件所在的根目录(可以理解成项目内部的绝对路径)

绝对路径,完整的地址

8.图片标签

img标签,属于替换元素,基于块元素和行内元素之间
属性:
1.src指的是图片的路径
2.alt是对图片的描述,用于图片加载不出来对图片的描述,搜索引擎会根据alt中的内容来识别图片
3.width图片的高度
4.height图片的宽度,单位px,宽度和高度只改一个,那么图片会等比例变化,但是一般不建议都修改图片宽高

图片的格式:
jpg 支持的颜色比较丰富,不支持透明效果和动态,一般用于照片
gif 支持颜色不丰富,支持动态,支持简单透明,动态图片
png 支持颜色丰富,支持复杂透明,不支持动图,转为网页
webp 集齐了其他格式的所有优点,专为网页设计的格式

格式原则:
效果一样用小的,效果不一样用好的,缺点兼容性不太好

base64编码,将图片使用base64进行编码,一般都是需要和网页一起加载的图片才进行编码

9.内联框架

内联框架 iframe标签

用于像当前页面引入一个外部页面,就相当于网页里嵌套另一个网页
1.src 引入图片的路径
2.width ,height 用于指定窗口的大小
3.frameborder 指定内联框架的边框,0表示关闭边框,1表示开启边框
4.scrolling设置框架的滚动条,yes表示显示,no表示关闭,auto表示自适应设置滚动条

10.音视频标签

audio 标签 用来向页面中引入一个外部音频文件,音视频文件引入时,默认不让用户自己控制播放停止
属性:
1.controls 是否允许用户控制播放,这个属性没有值,加上就有用户控制界面
2.autoplay 设置自动播放,也没属性值,页面会在打开时播放,但是现在页面大部会不会自动播放,相当于这个属性有时会被忽略
3.loop 音乐是否循环播放,也没属性值

写法:

    <audio src="xxx" controls autoplay></audio>
    <!--
        除了src来指定外部文件,还可以用source来指定,可以处理有些浏览器对不同的音频文件格式不兼容的问题
    -->
    <audio controls>
        <source src="xxx.mp3">
        <source src="xxx.ogg">
    </audio>
    <!--
        ie8不兼容audio标签,可以使用embed标签,这个标签是自动播放音乐,好像还不知道怎末禁用这个功能
    -->
     <embed src="xxx" type="audio/mp3" width="" height="">
    <!--
        可以把embed标签放入audio中来解决兼容问题
    -->
    <audio controls>
        <source src="xxx.mp3">
        <source src="xxx.ogg">
        <embed src="xxx" type="audio/mp3" width="" height="">
    </audio>

使用video标签来引入一个视频文件,使用方式基本和audio一样,当然ie8也是不兼容这个标签,就可以用embed
写法:

    <video controls>
        <source src="xxx">
       <embed src="xxx" type="video/mp4">
    </video>

CSS部分

1.CSS语法

css 层叠样式表

第一种修改样式方式:
在标签内部通过style属性来修改,这样只能对一个标签修改,当要修改也不方便,所以开发不能用内联样式

第二种,在head中的style标签中来修改
通过css选择器来选择标签进行样式修改,这种方式不能跨页面使用

第三种,外部样式表
可以将css样式编写到外部的css文件中,通过link标签来引入外部的css标签,这个方式更加高效

css语法:

选择器 声明块

通过选择器可以选中页面中的指定元素
通过声明块来指定要为元素设置的样式

2.CSS常用选择器

1.元素选择器
根据标签名来选择指定的元素
语法:标签名{}
例如:p{},div{}

2.id选择器
根据元素的id属性值选中一个元素
语法#id属性值{}
例如:#one{}

3.类选择器
根据元素的class值选中一组元素
语法: .class属性值{}
例如:.two{}
class是一个标签的属性,它和id类似,不同的是class可以重复使用
可通过class属性来为元素分组,可同时为一个元素指定多个class元素,多个class之间用空格隔开

4.通配选择器
选择页面中的所有元素
语法:*{}

5.复合选择器
交集选择器
选择同时符合多个条件的元素
语法:选择器1选择器2选择器3{}
注意:交集选择器中要把元素选择器放在最前面
如:div.red表示给class为red的div元素设置样式

并集选择器
可同时选择多个选择器对应的元素
语法:选择器1,选择器2,选择器3{}
例如:#one,.red{}

6.关系选择器
首先明确以下关系:
父元素--直接包含子元素的元素
子元素--直接被父元素包含的元素
祖先元素--直接或间接包含后代的元素
后代元素--直接或间接被祖先元素包含的元素
兄弟元素--拥有相同父元素的元素是兄弟元素

子元素选择器
选中指定父元素的指定子元素
语法:父元素>子元素{}
例如:.one > .span{}

后代选择器
选择指定元素内中指定的后代元素
语法:祖先 后代{}

兄弟选择器
选择下一个兄弟元素
语法:前一个 + 后一个{}
选择下边所有的兄弟元素
语法:前一个 ~ 后一个

7.属性选择器
属性选择器
语法:[xxx]{}
也可以在前面加上标签
例如:p[title]{}
其他写法:
[属性名] 选择含有指定属性的元素
[属性名=属性值] 选择含有指定属性和属性值的元素(有且仅有)
[属性名^=属性值] 选择属性值以指定开头开始的元素
[属性名$=属性值] 选择属性值以指定结尾结束的元素
[属性名*=属性值] 选择属性值含有某值的元素(含有)

8.伪类选择器
伪类,描述一个元素的特殊状态
比如:第一个元素,被点击的元素...

:first-child
例如ul>li:first-child{}表示为第一个子元素设置样式

:last-child就是为最后一个子元素设置样式

:nth-child()选中第n个子元素,括号中填写数字
特殊值:
若值为n,则选中所有(0~正无穷)元素
2n 或者 even ,则选中偶数位置的元素
2n+1 或者 odd,则选中为奇数位的元素
注意:以上的伪类是根据所有的子元素来排位置的,而不是标签种类

:first-of-type
:last-of-type
:nth-last-of-type()
上述三个伪类是根据类型不同来选择的
例如:ul>li:first-of-type{}表示在ul子元素li中的第一个元素
而 ul>li:first-child{}表示ul子元素的第一位元素

:not() 否定伪类
--将符合条件的元素从选择器中剔除,就是剔除的元素不设置样式
括号里面还可嵌套伪类选择器例如: ul>li:not(:nth-of-type(2)){}

9.a的伪类
为超链接在鼠标移入,点击等方式设置样式
:link 用来表示没访问过的链接(正常的链接)
:visited 用来表示访问过的链接,由于隐私的原因,所以visited这个伪类只能修改链接的颜色
:hover 用来表示鼠标移入的状态
:active 用来表示鼠标点击

10.伪元素
伪元素,表示页面中一些特殊的并不真实的存在的元素(特殊的位置)
伪元素使用 :: 开头

::first-letter 表示第一个字母
::first-line 表示第一行
::selection 表示选中的内容(比如复制时给选中部分的样式)
::before 元素的开始
::after 元素的最后
注意:before 和 after 必须结合content属性来使用。

3.样式的继承和选择器的权重

样式的继承,为一个元素设置的样式会被其后代元素继承,这样是方便开发。
注意:并不是所有的样式都会被继承,背景颜色,布局相关等的这些样式都不会被继承。

选择器的权重,会影响样式的冲突
--通过不同的选择器,选中相同的元素,并且为相同的样式设置不同的值
此时就需要选择器的优先级来决定,选择器权重由高到低

             内联样式        1000
             id选择器        100
             类和伪类选择器   10
             元素选择器       1
             通配选择器       0
             继承的样式      没有
  1. 比较优先级要将多个选择器权重进行相加再比较(注意:分组选择器是单独计算的不会相加)
  2. 另外如果元素有多个类选择器,进行优先级累加时也不会超过其最大的数量级
    比如十个类累加的权重也不会超过id选择器的权重
  3. 另外同级选择器则按照就近原则进行生效,(优先使用靠下的样式)
  4. 可在某个样式的后边加上!important 使其样式优先级最高
    当然你写的选择器越详细权重越高

4.CSS中的单位

长度单位:
像素

  • 屏幕(显示器)实际上是由一个一个的小点点构成的
  • 不同屏幕的像素大小是不同的,像素越小的屏幕显示的效果越清晰
  • 所以同样的200px在不同的设备下显示效果不一样

百分比

  • 也可以将属性值设置为相对于其父元素属性的百分比
  • 设置百分比可以使子元素跟随父元素的改变而改变

em

  • em是相对于元素的字体大小来计算的
  • 1em = 1font-size
  • em会根据字体大小的改变而改变

rem

  • rem是相对于根元素的字体大小来计算

颜色单位:
RGB值

  • RGB通过三种颜色的不同浓度来调配出不同的颜色
  • R red,G green ,B blue
  • 每一种颜色的范围在 0 - 255 (0% - 100%) 之间
  • 语法:RGB(红色,绿色,蓝色)

RGBA

  • 就是在rgb的基础上增加了一个a表示不透明度
  • 需要四个值,前三个和rgb一样,第四个表示不透明度 ,1表示完全不透明 0表示完全透明 .5半透明

十六进制的RGB值

  • 语法:#红色绿色蓝色
  • 颜色浓度通过 00-ff
  • 如果颜色两位两位重复可以进行简写
    如:#aabbcc --> #abc

HSL值 HSLA值

  • H 色相(0 - 360)
  • S 饱和度,颜色的浓度 0% - 100%
  • L 亮度,颜色的亮度 0% - 100%

5.盒子模型

每个盒子有以下部分构成:

  • 内容区(content)
  • 内边距(padding)
  • 边框(border)
  • 外边距(margin)

边框(border),一般至少设置三个样式:
宽度(border-width)

  • border-width可以用来指定四个方向的值
    例如:border-width:10px 20px 30px 40px;是依次为上右下左边框设置宽度(顺时针)

其他写法:
四个值:上 右 下 左
三个值:上 左右 下
两个值:上下 左右
一个值:上下左右
除了border-width还有border-xxx-width,xxx为top,right,left,bottom就是特指某个方向边框的值

  • 颜色(border-color)
    规则与上述类似,另外若不设置border-color则边框颜色按照color的值来设置
  • 样式(border-style),
    规则同上

有关样式:
solid 实线
dotted 点状虚线
dashed 虚线
double 双线
none 默认值,表示没有边框

  • border简写属性方式
    写法:border:solid 10px blue;

当然还有border-xxx top,left,right,bottom

内边距(padding),内容区于边框之间的距离就是内边距
内边距也有四个方向
padding-top
padding-left
padding-right
padding-bottom
内边距会影响到盒子大小,内容区的背景颜色会延伸到内边距上

盒子的可见框的大小,就是内容区,边框,内边距
简写:规则和border一样

外边距(margin)
外边距不会影响盒子可见框的大小,但是外边距会影响盒子的位置,影响到盒子实际占用空间的大小
外边距也有四个方向
margin-top
margin-left
margin-right
margin-bottom
默认情况下我们设置的左和上外边距元素会移动自己,设置下右外边距则是改变其他相邻元素的位置
简写:margin:x x ... 写法同border

这里说下外边距的折叠问题
外边距的折叠,只有垂直方向才会发生

  • 相邻的的垂直方向外边距会发生重叠现象
  • 兄弟元素间相邻的垂直外边距会取两者之间较大值(两者都是正值)
    特殊情况:

若相邻的外边距一正一负,则取两者之和
若两个都是负数,则取绝对值较大的

父子元素之间的相邻外边距,子元素会传递给父元素(上外边距),所以需要进行处理
1.可通过加内边距减高度来实现
2.或者通过某种方式使两个元素隔开,比如加上一个边框
3.也是基于第二点的方式使用before伪类在父元素前面加上内容(但这个内容要不存在)

注意:行内元素的盒模型比较特殊

  • 行内元素不支持设置宽高度
  • 行内元素可以设置padding,但垂直方向的padding不会影响布局
  • 行内元素可以设置border,垂直方向的border不会影响布局
  • 行内元素可以设置margin,垂直方向的margin不会影响布局

但有时又需要给行内元素设置宽高,这里介绍两个属性
display用来设置元素的显示类型
属性值:

  • inline 将元素转换为行内元素
  • block 将元素转换成块元素
  • inline-block 将元素设置为行内块元素,即可设置宽高又不独占一行(例如:可以看作一个字)
  • table 将元素设置为表格
  • none 元素不在页面显示,且释放占据位置

visibility 用来设置元素的显示状态
属性值:

  • visible 默认值,元素在页面正常显示
  • hidden 元素在页面中隐藏,但仍然占据位置

6.盒子模型的布局

一,元素的水平方向的布局:

  • 元素在其父元素中水平方向的位置由以下几个属性共同决定

margin-left
border-left
padding-left
width
padding-right
border-right
margin-right

  • 一个元素在其父元素中,水平布局必须要满足以下的等式
    margin-left+border-left+padding-left+width+padding-right+border-right+margin-right = 其父元素内容区的宽度 (必须满足)

比如:
0 + 0 + 0 + 200 + 0 + 0 + 0 = 800
0 + 0 + 0 + 200 + 0 + 0 + 600 = 800
100 + 0 + 0 + 200 + 0 + 0 + 400 = 800
100 + 0 + 0 + 200 + 0 + 0 + 500 = 800

  • 以上等式必须满足,如果相加结果使等式不成立,则称为过度约束,则等式会自动调整

调整的情况:

  • 如果这七个值中没有为 auto 的情况,则浏览器会自动调整margin-right值以使等式满足
  • 这七个值中有三个值可设置为auto

width
margin-left
maring-right

  • 如果某个值为auto,则会自动调整为auto的那个值以使等式成立

0 + 0 + 0 + auto + 0 + 0 + 0 = 800 auto = 800
0 + 0 + 0 + auto + 0 + 0 + 200 = 800 auto = 600
200 + 0 + 0 + auto + 0 + 0 + 200 = 800 auto = 400
auto + 0 + 0 + 200 + 0 + 0 + 200 = 800 auto = 400
auto + 0 + 0 + 200 + 0 + 0 + auto = 800 auto = 300

  • 如果将一个宽度和一个外边距设置为auto,则宽度会调整到最大,设置为auto的外边距会自动为0
  • 如果将三个值都设置为auto,则外边距都是0,宽度最大
  • 如果将两个外边距设置为auto,宽度固定值,则会将外边距设置为相同的值,所以我们经常利用这个特点来使一个元素在其父元素中水平居中

示例:
width:xxxpx;
margin:0 auto;

二,元素的垂直方向布局
若子元素超过父元素的大小,则会溢出,可使用overflow来处理溢出部分
overflow属性值:

  • hidden 裁剪掉溢出内容
  • visible 默认值,子元素会显示在父元素外
  • scroll 生成两个滚动条,通过滚动来查看完整内容
  • auto 根据需要生成滚动条,比如一个方向溢出就生成一个方向的
  • overflow-x 处理水平方向上的
  • overflow-y 处理垂直方向的

7.盒子尺寸,轮廓,圆角和阴影

默认情况下,盒子的可见框大小由内容区,内边距和边框决定
box-sizing 用来设置盒子尺寸的计算方式(设置width和height的作用)
可选值:

  • content-box 默认值,宽高用来设置内容区大小
  • border-box 宽高设置整个盒子可见框的大小(这时width和height指的是内容区和内边距和边框的总大小)

outline 用来设置元素的轮廓线,用法和border一样,不同的是轮廓不影响可见框的大小,就不会影响页面布局

box-shadow 用来设置元素的阴影效果,阴影不会影响到页面布局
用法:
第一个值:左侧偏移量,正值向右,负值向左
第二个值:垂直偏移量,正值向下,负值向上
第三个值:阴影的模糊半径
第四个值:阴影的颜色,一般用rgba来设置

border-radius 用来设置元素的圆角
可指定四个值分别是:左上 右上 右下 左下
若为三个值 :左上 右上左下 右下
两个值 :左上右下 右上左下
一个值 :四个方向的
另外在指定一个值时要把圆角设置成椭圆可以这样写,例如:border-radius : 20px / 40px;这样圆角就是一个椭圆
将元素变为圆形 border-radius:50%;

8.浮动

这里先认识一个概念
1.对于元素有两种状态

  • 在文档流中,脱离文档流

2.元素在文档流的特点
块元素

  • 块元素独占一行
  • 宽度默认为父元素的全部
  • 默认高度是被内容撑开

行内元素

  • 不会独占一行,只占自身大小
  • 在页面中自左向右水平排列
  • 若一行中容不下就会换行

元素的浮动
通过浮动可以将一个元素向其父元素左侧或者右侧移动

  • 使用float 属性来设置元素的浮动
    可选值:
  1. none 默认值,元素不一动
  2. left 向左浮动
  3. right 向右浮动
  • 元素设置浮动后水平布局的等式就不必成立
  • 元素设置浮动后就会脱离文档流,不再占据文档流中位置
  • 浮动的元素向左或右移动时,不会超过其他浮动的元素
  • 如果浮动元素的上边是个没有浮动的块元素,则浮动元素无法上移
  • 浮动元素不会超过它上面的兄弟元素,最多就是一样高
  • 浮动元不会盖住文字,文字会环绕在图片周围,这样可设置文字环绕图片的效果
  • 浮动元素脱离文档流后元素特点:
  1. 块元素不再独占一行
  2. 块元素宽高就会被默认内容撑开
  3. 行内元素会变为块元素,特点和块元素一样

9.高度塌陷和BFC

BFC 块级格式化环境
bfc是一个css中隐含的属性,可为一个元素开启bfc,开启bfc以后,元素会变成一个独立的布局区域
开启特点:

  • 开启bfc的元素不会被浮动元素所覆盖
  • 开启bfc的元素子元素的外边距和父元素不会重叠,即不会传递给父元素
  • 开启bfc的元素可以包含浮动的子元素

可通过特殊的方式开启bfc:

  • 设置元素的浮动(不推荐)
  • 将元素设置为行内块元素(不推荐)
  • 将元素的overflow属性值设置为一个非visible值,一般设置为hidden(副作用小)

高度塌陷问题
在浮动布局中,父元素的高度是默认被子元素撑开的,当子元素浮动后,其会完全脱离文档流,将会无法撑起父元素的高度,导致父元素高度丢失,父元素以下的元素会上移导致页面布局混乱

clear属性
当两个块元素垂直方向摆放,上面的块元素开启浮动会导致自身脱离文档流,然后下面的元素会移上来,这时候clear就可以解决这个问题
可选值:

  • left 清除左侧浮动元素对当前元素的影响
  • right 清除右侧元素对当前元素的影响
  • both 清除两侧浮动元素影响最大的对当前元素的影响
    原理:设置clear后浏览器会自动为元素加一个上外边距,使位置不受浮动元素影响

    解决高度塌陷的最终方案

  1. 使用after伪类
  2. 再受影响的元素最后面加一个空标签,但是该空标签是行内元素,所以还要改成块元素
  3. 最后加上clear:both;就可完美解决高度塌陷问题

所以这里就可总结一个样式

            .clearfix::before,
            .clearfix::after{
                content:'';
                display:table;
                clear:both;
            }

该样式可完美解决高度塌陷和子元素与父元素外边距传递重叠问题

10.定位

定位(position)
使用position属性来设置定位
可选值:

  • static 默认值,元素未开启定位
  • relative 开启元素的相对定位
  • absolute 开启元素的绝对定位
  • fixed 开启元素的固定定位
  • sticky 开启元素的粘滞定位

相对定位(relative)

  1. 开启相对定位后,若不设置偏移量则 元素 不会发生任何的变化
  2. 相对定位是参照元素在文档流位置所定位的,就是相对于元素最原来的位置
  3. 相对定位会提高元素的层级
  4. 相对定位不会使元素脱离文档流
  5. 相对定位不会改变元素的性质,行内还是行内,块还是块,同时元素原来的位置还会保留

偏移量(offset),通过偏移量来设置元素的位置,可通过以下四个属性来设置偏移量

  • top--定位元素和定位位置上边的距离
  • left--定位元素和定位位置左边的距离
  • right--定位元素和定位位置右边的距离
  • bottom--定位元素和定位位置下边的距离

绝对定位(absolute)

  1. 开启绝对定位,若不设置偏移量元素的位置不会发生变化
  2. 开启绝对定位,元素会从文档流脱离
  3. 绝对定位会改变元素性质,行内变成块,块的宽高被内容撑开
  4. 绝对定位会提升元素的层级
  5. 绝对定位是相对于其包含块进行定位的

包含块(containing block)
一般情况:包含块就是离当前元素最近的祖先块元素
绝对定位的包含块:离它 最近 的开启了 定位 的祖先元素,若所有的祖先元素都没开启定位,则根元素就是它的包含如html(根元素,初始包含块)

固定定位(fixed)

  1. 固定定位也是一种绝对定位,大部分特点和绝对定位一样
  2. 唯一不同的是固定定位永远参照浏览器的视口定位

粘滞定位(sticky)

  1. 粘滞定位可以在元素达到某个值时才将其固定
  2. 特点和相对定位基本一致

绝对定位元素的位置
这时水平布局等式又加了几个属性水平布局
left + margin-left + border-left + padding-left + width + padding-right + border-right + margin-right + right = 包含块的内容区的宽度

  • 当我们开启了绝对定位后:
    水平方向的布局等式就需要添加left 和 right 两个值,此时规则和之前一样只是多添加了两个值
  • 当发生过度约束:
    如果9个值中没有 auto 则自动调整right值以使等式满足

如果有auto,则自动调整auto的值以使等式满足
可设置auto的值 :margin width left right
因为left 和 right的值默认是auto,所以如果不指定left和right,则等式不满足时,会自动调整这两个值
另外,垂直方向布局的等式的也必须要满足等式top + margin-top/bottom + padding-top/bottom + border-top/bottom + height = 包含块的高度
例如:

   
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>

    <style>
        .box1{
            width: 500px;
            height: 500px;
            background-color: #bfa;

            position: relative;
        }

        .box2{
            width: 100px;
            height: 100px;
            background-color: orange;
            position: absolute;
            margin: auto;
             left: 0;
             right: 0;

             top: 0;
             bottom: 0;
        }
    </style>
</head>
<body>

<div class="box1">
    <div class="box2"></div>
</div>
    
</body>
</html>

这样可实现中央居中

元素的层级
对于开启了定位元素,可以通过z-index属性来指定元素的层级

z-index需要一个整数作为参数,值越大元素的层级越高

  • 元素的层级越高越优先显示
  • 如果元素的层级一样,则优先显示靠下的元素
  • 祖先的元素的层级再高也不会盖住后代元素

11.字体及其样式

字体样式

  • font-face可以将服务器中的字体直接提供给用户去使用
    问题:
  1. 加载速度
  2. 版权
  3. 字体格式

        @font-face {
                /* 指定字体的名字 */
            font-family:'myfont' ;
            /* 服务器中字体的路径 */
            src: url('./font/ZCOOLKuaiLe-Regular.ttf') format("truetype");
        }
  • color 用来设置字体颜色
  • font-size 字体的大小
  • font-family 字体族(字体的格式),指定字体的类别,浏览器会自动使用该类别下的字体
    可选值:

serif 衬线字体
sans-serif 非衬线字体
monospace 等宽字体

  • font-family 可以同时指定多个字体,多个字体间使用 , 隔开,字体生效时优先使用第一个,第一个无法使用则使用第二个 以此类推 写法:Microsoft YaHei,Heiti SC,tahoma,arial,Hiragino Sans GB,"5B8B4F53",sans-serif
            color: blue;
            font-size: 40px;
            /* font-family: 'Courier New', Courier, monospace; */
            font-family: myfont;
  • font-weight 字重 字体的加粗
    可选值:

normal 默认值 不加粗
bold 加粗 ,100-900 九个级别(没什么用)

  • font-style 字体的风格
    可选值:

normal 正常的
italic 斜体

图标字体(iconfont)

  • 在网页中经常需要使用一些图标,可以通过图片来引入图标,但是图片大小本身比较大,并且非常的不灵活
  • 所以在使用图标时,我们还可以将图标直接设置为字体,然后通过font-face的形式来对字体进行引入,这样我们就可以通过使用字体的形式来使用图标
  1. 使用步骤
  2. 下载 传送门
  3. 解压
  4. 将css和webfonts移动到项目中
  5. 将all.css引入到网页中
    一般写法:

class="fas fa-bell"
class="fab fa-accessible-icon"
另外还可通过伪元素的方法,在content中设置字体的编码来使用

字体的行高 line-height
行高指的是文字占有的实际高度,可以通过line-height来设置行高,行高可以直接指定一个大小(px em),也可以直接为行高设置一个整数,如果是一个整数的话,行高将会是字体的指定的倍数,行高经常还用来设置文字的行间距,行间距 = 行高 - 字体大小。

字体框
字体框就是字体存在的格子,设置font-size实际上就是在设置字体框的高度,行高会在字体框的上下平均分配

字体的简写样式
font 可以设置字体相关的所有属性
语法:
font: 字体大小/行高 字体族
行高 可以省略不写 如果不写使用默认值

其他的字体样式

  • text-decoration 设置文本修饰
    可选值:

none 什么都没有
underline 下划线
line-through 删除线
overline 上划线

  • white-space 设置网页如何处理空白
    可选值:

normal 正常
nowrap 不换行
pre 保留空白(就是保留文本在标签中的格式,标签里怎么显示的,网页就怎么显示)

文字的布局

  • text-align 文本的水平对齐
    可选值:

left 左侧对齐
right 右对齐
center 居中对齐
justify 两端对齐

  • vertical-align 设置元素垂直对齐的方式
    可选值:

baseline 默认值 基线对齐
top 顶部对齐
bottom 底部对齐
middle 居中对齐
图片若设置的是基线对齐则默认会与边框有个缝,可通过vertical来设置图片不基线对齐来消除这个缝

12.背景

  • background-color 设置背景颜色
  • background-image 设置背景图片
    可以同时设置背景图片和背景颜色,这样背景颜色将会成为图片的背景色,如果背景的图片小于元素,则背景图片会自动在元素中平铺将元素铺满,如果背景的图片大于元素,将会一个部分背景无法完全显示,如果背景图片和元素一样大,则会直接正常显示
  • background-repeat 用来设置背景的重复方式
    可选值:

repeat 默认值 , 背景会沿着x轴 y轴双方向重复
repeat-x 沿着x轴方向重复
repeat-y 沿着y轴方向重复
no-repeat 背景图片不重复

  • background-position 用来设置背景图片的位置
    设置方式:

通过 top left right bottom center 几个表示方位的词来设置背景图片的位置,使用方位词时必须要同时指定两个值,如果只写一个则第二个默认就是center,通过偏移量来指定背景图片的位置:水平方向的偏移量 垂直方向变量

  • background-clip 设置背景的范围
    可选值:

border-box 默认值,背景会出现在边框的下边
padding-box 背景不会出现在边框,只出现在内容区和内边距
content-box 背景只会出现在内容区

  • background-origin 背景图片的偏移量计算的原点
    可选值:

padding-box 默认值,background-position从内边距处开始计算
content-box 背景图片的偏移量从内容区处计算
border-box 背景图片的偏移量量从边框处开始计算

  • background-size 设置背景图片的大小

第一个值表示宽度
第二个值表示高度
如果只写一个,则第二个值默认是 auto
还可写值:
cover 图片的比例不变,将元素铺满
contain 图片比例不变,将图片在元素中完整显示

  • background-attachment 背景图片是否跟随元素移动
    可选值:

scroll 默认值 背景图片会跟随元素移动
fixed 背景会固定在页面中,不会随元素移动

backgound 背景相关的简写属性,所有背景相关的样式都可以通过该样式来设置,并且该样式没有顺序要求,也没有哪个属性是必须写的。
但是注意:background-size必须写在background-position的后边,并且使用/隔开,background-position/background-size,background-origin background-clip 两个样式 ,orgin要在clip的前边

13.表格和表单

在网页中我们也需要使用表格,我们通过table标签来创建一个表格

写法:

        <table border="1" width='50%' align="center">
        <!-- 在table中使用tr表示表格中的一行,有几个tr就有几行 -->
        <tr>
            <!-- 在tr中使用td表示一个单元格,有几个td就有几个单元格 -->
            <td>A1</td>
            <td>B1</td>
            <td>C1</td>
            <td>D1</td>
        </tr>
        <tr>
            <td>A2</td>
            <td>B2</td>
            <td>C2</td>
            <!-- rowspan 纵向的合并单元格 -->
            <td rowspan="2">D2</td>
        </tr>
        <tr>
            <td>A3</td>
            <td>B3</td>
            <td>C3</td>
        </tr>
        <tr>
            <td>A4</td>
            <td>B4</td>
            <!-- 
                colspan 横向的合并单元格
             -->
            <td colspan="2">C4</td>
        </tr>
    </table>

长表格:
可以将一个表格分成三个部分:
1.头部 thead
2.主体 tbody
3.底部 tfoot
th 表示头部的单元格

  <table border="1" width='50%' align="center">
        
        <thead>
            <tr>
                <th>日期</th>
                <th>收入</th>
                <th>支出</th>
                <th>合计</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>2000.1.1</td>
                <td>500</td>
                <td>200</td>
                <td>300</td>
            </tr>
            <tr>
                <td>2000.1.1</td>
                <td>500</td>
                <td>200</td>
                <td>300</td>
            </tr>
            <tr>
                <td>2000.1.1</td>
                <td>500</td>
                <td>200</td>
                <td>300</td>
            </tr>
            <tr>
                <td>2000.1.1</td>
                <td>500</td>
                <td>200</td>
                <td>300</td>
            </tr>
        </tbody>
        <tfoot>
            <tr>
                <td></td>
                <td></td>
                <td>合计</td>
                <td>300</td>
            </tr>
        </tfoot>

    </table>

表格的样式

  • border-spacing: 指定边框之间的距离
  • border-collapse: collapse; 设置边框的合并

注意:默认情况下元素在td中是垂直居中的 可以通过 vertical-align 来修改,如果表格中没有使用tbody而是直接使用tr,那么浏览器会自动创建一个tbody,并且将tr全都放到tbody中,tr不是table的子元素

将元素设置为单元格 td ,可通这个方式来让子元素居中

            display: table-cell;
            vertical-align: middle;

表单
在现实生活中表单用于提交数据,在网页中也可以使用表单,网页中的表单用于将本地的数据提交给远程的服务器,使用form标签来创建一个表单,form的属性,action 表示要提交的服务器的地址

  • 文本框
<input type="text" name="username">

要设置提示文字的话就在input标签里添加: placeholder="请输入用户名" 。
注意:数据要提交到服务器中,必须要为元素指定一个name属性值

  • 密码框
<input type="password" name="password">
  • 单选按钮
    像这种选择框,必须要指定一个value属性,value属性最终会作为用户的填写的值传递给服务器,checked 可以将单选按钮设置为默认选中
<input type="radio" name="hello" value="a">
<input type="radio" name="hello" value="b" checked>
  • 多选框
        <input type="checkbox" name="test" value="1">
        <input type="checkbox" name="test" value="2">
        <input type="checkbox" name="test" value="3" checked>
  • 下拉列表
        <select name="haha">
            <option value="i">选项一</option>
            <option selected value="ii">选项二</option>
            <option value="iii">选项三</option>
        </select>
  • 提交按钮
 <input type="submit" value="注册">
  • 其他的表单设置

autocomplete="off" 关闭自动补全
readonly 将表单项设置为只读,数据会提交
disabled 将表单项设置为禁用,数据不会提交
autofocus 设置表单项自动获取焦点

    <form action="target.html">
      
                <input type="text" name="username" value="hello" readonly>
                <br><br>
                <input type="text" name="username" autofocus>
                <br><br>
                <input type="text" name="b">
        
                <br><br>
        
                <!-- <input type="color"> -->
                <br><br>
                <!-- <input type="email"> -->
                <br><br>
        
                <input type="submit">
                <!-- 重置按钮 -->
                <input type="reset">
                <!-- 普通的按钮 -->
                <input type="button" value="按钮">
        
                <br><br>
                
        
                <button type="submit">提交</button>
                <button type="reset">重置</button>
                <button type="button">按钮</button>
            </form>

14.过渡和动画

过渡(transition)
通过过渡可以指定一个属性发生变化时的切换方式
通过过渡可以创建一些非常好的效果,提升用户的体验

  • transition-property: 指定要执行过渡的属性
    多个属性间使用,隔开 ,如果所有属性都需要过渡,则使用all关键字,大部分属性都支持过渡效果,注意过渡时必须是从一个有效数值向另外一个有效数值进行过渡。
  • transition-duration: 指定过渡效果的持续时间
    时间单位:s 和 ms 1s = 1000ms
  • transition-timing-function: 过渡的时序函数
    指定过渡的执行的方式

可选值:
1.ease 默认值,慢速开始,先加速,再减速
2.linear 匀速运动
3.ease-in 加速运动
4.ease-out 减速运动
5.ease-in-out 先加速 后减速
6.cubic-bezier() 来指定时序函数,获取函数网址传送门
7.steps() 分步执行过渡效果
第一个值表示步骤分几步执行
可以设置一个第二个值:
end , 在时间结束时执行过渡(默认值)
start , 在时间开始时执行过渡(就是指的是比如1s开始执行,还是1s结束执行)

  • transition-delay: 过渡效果的延迟,等待一段时间后在执行过渡
  • transition 简写属性,可以同时设置过渡相关的所有属性,只有一个要求,如果要写延迟,则两个时间中第一个是持续时间,第二个是延迟
transition:2s margin-left 1s cubic-bezier(.24,.95,.82,-0.88);

动画
动画和过渡类似,都是可以实现一些动态的效果,不同的是过渡需要在某个属性发生变化时才会触发,动画可以自动触发动态效果

设置动画效果,必须先要设置一个关键帧,关键帧设置了动画执行每一个步骤
基本写法:

@keyframes test {
            /* from表示动画的开始位置 也可以使用 0% */
            from{
                margin-left: 0;
                background-color: orange;
            } 

            /* to动画的结束位置 也可以使用100%*/
            to{
                background-color: red;
                margin-left: 700px;
            }
        }

动画的相关样式

  • animation-name: 要对当前元素生效的关键帧的名字
    比如:animation-name: test;
  • animation-duration: 动画的执行时间
  • animation-delay:动画的延时
  • animation-timing-function:动画的执行方式
  • animation-iteration-count 动画执行的次数
    可选值:

次数(一个整数)
infinite 无限执行

  • animation-direction 指定动画运行的方向
    可选值:

normal 默认值 从 from 向 to运行 每次都是这样
reverse 从 to 向 from 运行 每次都是这样
alternate 从 from 向 to运行 重复执行动画时反向执行
alternate-reverse 从 to 向 from运行 重复执行动画时反向执行

  • animation-play-state: 设置动画的执行状态
    可选值:

running 默认值 动画执行
paused 动画暂停

  • animation-fill-mode: 动画的填充模式
    可选值:

none 默认值 动画执行完毕元素回到原来位置
forwards 动画执行完毕元素会停止在动画结束的位置
backwards 动画延时等待时,元素就会处于开始位置
both 结合了forwards 和 backwards

15.变形

变形就是指通过CSS来改变元素的形状或位置
变形不会影响到页面的布局

transform 用来设置元素的变形效果
平移:用以下方式来设置方向
translateX() 沿着x轴方向平移
translateY() 沿着y轴方向平移
translateZ() 沿着z轴方向平移
也可填写百分比,百分比是相对于自身计算的
介绍一种居中方式:

     .box3{
            background-color: orange;
            position: absolute;
            /* 
                这种居中方式,只适用于元素的大小确定,不然会把整个元素撑开
            top: 0;
            left: 0;
            bottom: 0;
            right: 0;
            margin: auto; */
            /*这样也可设置居中,且不需要固定元素的大小,只要有内容撑开就行了*/
            left: 50%;
            top: 50%;
            transform: translateX(-50%) translateY(-50%);
          
         }
  • Z轴平移

z轴平移,调整元素在z轴的位置,正常情况就是调整元素和人眼之间的距离,距离越大,元素离人越近。
z轴平移属于立体效果(近大远小),默认情况下网页是不支持透视,如果需要看见效果,就必须要设置网页的视距。
可通过perspective来设置视距,例如:perspective:800px;表示设置当前网页的视距为800px,人眼距离网页的距离。

  • 旋转

通过旋转可以使元素沿着x y 或 z旋转指定的角度
rotateX()
rotateY()
rotateZ()
示例写法:

             transform: rotateZ(.25turn); /*表示转1/4个圆*/
             transform: rotateY(180deg) translateZ(400px); 
             transform: translateZ(400px) rotateY(180deg) ; 
             transform: rotateY(180deg);

因为旋转就涉及到了元素的正反面这里再介绍一个属性backface-visibility: hidden; 表示是否显示元素的背面。

  • 缩放

对元素进行缩放的函数:
scaleX() 水平方向缩放
scaleY() 垂直方向缩放
scale() 双方向的缩放
scaleZ()在轴方向的缩放要设置3d效果 ,设置3d效果:transform-style:preserve-3d;

最后再说一个属性,transform-origin,变形的原点
想到旋转就好理解了,比如旋转式以什么为参考点旋转的呢
这个属性默认值 center
可以为其设置两个值,例如transform-origin:20px 20px;表示变形的原点相对于默认值的偏移量。

16.flex弹性盒子

flex(弹性盒、伸缩盒)
是CSS中的又一种布局手段,它主要用来代替浮动来完成页面的布局,flex可以使元素具有弹性,让元素可以跟随页面的大小的改变而改变。

弹性容器
要使用弹性盒,必须先将一个元素设置为弹性容器
我们通过 display 来设置弹性容器
display:flex 设置为块级弹性容器
display:inline-flex 设置为行内的弹性容器

弹性元素
弹性容器的子元素是弹性元素(弹性项)
弹性元素可以同时是弹性容器

弹性容器相关属性:

  • flex-direction 指定容器中弹性元素的排列方式
    可选值:

row 默认值,弹性元素在容器中水平排列(左向右)主轴方向 自左向右
row-reverse 弹性元素在容器中反向水平排列(右向左)主轴方向 自右向左
column 弹性元素纵向排列(自上向下)
column-reverse 弹性元素方向反向纵向排列(自下向上)
主轴:弹性元素的排列方向称为主轴
侧轴:与主轴垂直方向的称为侧轴

  • flex-wrap 设置弹性元素是否在弹性容器中自动换行
    可选值:

nowrap 默认值,元素不会自动换行
wrap 元素沿着辅轴方向自动换行
wrap-reverse 元素沿着辅轴反方向换行
另外:flex-flow: 是wrap 和 direction 的简写属性 ,例如:flex-flow: row wrap;就是设置弹性元素水平排列自动换行。

  • justify-content 如何分配主轴上的空白空间(主轴上的元素如何排列)
    可选值:

flex-start 元素沿着主轴起边排列
flex-end 元素沿着主轴终边排列
center 元素居中排列
space-around 空白分布到元素两侧
space-between 空白均匀分布到元素间
space-evenly 空白分布到元素的单侧 (兼容性不好)
与其对应的align-content: 就是辅轴空白空间的分布,用法一样

  • align-items: 元素在辅轴方向上如何对齐,元素间的关系
    可选值:

stretch 默认值,将元素的长度设置为相同的值
flex-start 元素不会拉伸,沿着辅轴起边对齐
flex-end 沿着辅轴的终边对齐
center 居中对齐
baseline 基线对齐
介绍一个属性align-self: 用来覆盖当前弹性元素上的align-items,例如align-self:stretch;就是消除align-items:strecth; 的效果。

弹性元素相关样式:

  • flex-grow 指定弹性元素的伸展的系数
    当父元素有多余空间的时,子元素如何伸展,父元素的剩余空间,会按照比例进行分配。
  • flex-shrink 指定弹性元素的收缩系数,当父元素中的空间不足以容纳所有的子元素时,可对子元素进行收缩,缩减多少是根据 缩减系数和元素大小来计算。

元素基础长度

  • flex-basis 指定的是元素在主轴上的基础长度
    如果主轴是 横向的 则 该值指定的就是元素的宽度

如果主轴是 纵向的 则 该值指定的是就是元素的高度
默认值是 auto,表示参考元素自身的高度或宽度
如果传递了一个具体的数值,则以该值为准

简写

  • flex 可以设置弹性元素所有的三个样式(可设置一个值,也可分开详细设置三个值)

flex :增长 缩减 基础;
三个基本值:
initial等于 "flex: 0 1 auto".
auto 等于"flex: 1 1 auto"
none 等于"flex: 0 0 auto" 弹性元素没有弹性

  • order 决定弹性元素的排列顺序,属性值就是一个整数。

Last modification:May 21st, 2020 at 05:30 pm
如果觉得我的文章对你有用,请随意赞赏