此版为纯知识点无练习笔记版本
前端的三种语言:HTML(结构),CSS(表现),JavaScript(行为)
标准:W3C
基本结构
<html>
<head>
元数据,给浏览器搜索引擎看的
</head>
<body>
想要被看到的内容
</body>
</html>
标签一般成对出现但是存在自结束标签,例如<input>
,<img>
,H5不推荐写自结束的/
注释的写法<!-- 这是一个注释 -->
,注释不能嵌套
**标签的属性:**在标签的开始/自结束标签前面写,是一个名值对结构
<h1>这是我的<font color="Red">第三个</font>网页</h1>
属性之间空格隔开
网页的基本结构:
<!doctype html> html5声明
<html>
<head>
<meta charset="utf-8">
字符集应该与编辑器的一致
</head>
<body>
</body>
</html>
<doctype html>
<html lang="en">
告诉浏览器你写的是英文网站,到时候会弹出是否翻译,中文则为<html lang="zh">
在网页中,编写的多个空格会自动被浏览器解析为一个空格,目的是方便格式化代码
但是在html中有时候不能书写一些特殊符号,比如字母两侧的 ‘<’ ‘>’ 号 那么我们就需要实体(转义字符)语法是"&“开头”;"结尾,例如
是空格>
是大于<
是小于©
是版权号例如
a < b > c
a<b>c
a<b>c
meta主要用于设置网页的元数据,元数据是并不是给用户看的,其组成有两个
值得注意的是meta并不是键,name才是,例如<meta charset="UTF-8">
中charset是键,UTF-8是值。常见的键值对包括
<meta charset="UTF-8">
<meta name="keywords" content="HTML5,前端,CSS">
<meta name="description" content="LaLaLaLaLaLaLaLa">
<meta http-equiv="refresh" content="3;url=http://www.swu.edu.cn">
语义化标签在HTML中表示特定的结构,但是会在显示的时候存在样式的变化。但是注意HTML是专门负责网页结构的,所以在使用html标签时应该关注的是标签的语义而不是标签的样式
标题标签
h1
~h6
一共有6级标题,重要性递减
h1
是最重要的仅次于title
,一般只有一个h1
一般只用到h1
到h3
p
标签,表示一个段落,也是一个块元素
hgroup
标签:将h标题分组
em
是语音语调的加重,是一个行内元素
strong
表示强调
blockqueue
表示一个长引用
q
表示一个短引用
br
换行
<h1>一级标题</h1>
<h2>二级标题</h2>
<p>123</p>
<p>456</p>
<hgroup>
<h1>回乡偶书</h1>
<h2>其一</h2>
</hgroup>
<p>今天天气<em>真</em>不错</p>
<p>你今天必须要<strong>完成作业</strong></p>
鲁迅说:
<blockquote>我是从来没有说过的</blockquote>
子曰<q>学而时习之</q>
<br>
<br>
<br>
今天天气真不错
块元素:主要对元素进行布局
行内元素:用来包裹文字,一般是块内放行内
p
元素里不能放任何块元素,浏览器会对网页自动修正,例如在html外的元素,把h1
放在p
里面,浏览器不会再源码里纠正,但是会在加载的内存中纠正,在检查元素中显示纠正结果
结构化语义标签(用的不多)
结构化无意义标签
列表间可以互相嵌套
<ul>
<li>结构</li>
<li>表现</li>
<li>行为</li>
</ul>
<ol>
<li>结构</li>
<li>表现</li>
<li>行为</li>
</ol>
<dl>
<dt>结构</dt>
<dd>解释解释解释解释</dd>
<dd>解释解释解释解释</dd>
<dd>解释解释解释解释4</dd>
</dl>
<ul>
<li>
<ol>
<li>结构</li>
<li>表现</li>
<li>行为</li>
</ol>
</li>
<li>表现</li>
<li>行为</li>
</ul>
超链接让页面跳转到另一个位置或者其他页面
用a定义超链接
a是一个行内元素可以嵌套除他自身以外块的元素
a的属性:
href:目标跳转路径
target属性,可选值
注意:ID是唯一属性,不能一样,字母开头,区分大小写,靠前的元素优先生效
例如
<a href="07.列表.html" target="_blank">超链接</a>
<a href="#but">去底部</a>
<a href="javascript:;">什么也不发生</a>
img标签用于引入图片
使用img标签引入外部标签,img是一个自结束标签
img 属于替换元素,属于行内元素和替换元素之间的一种元素,即img这段代码被具体的东西给替换了
属性:
注意:如果只修改了一个,图片会被等比例缩放,如果指定了两个图片就不会等比例变化
注意:一般在PC端不建议修改图片的大小,为了节省网络资源,最好直接在做图的时候改好,但是在移动端经常会把图片缩小
图片的格式:
原则:效果一样用小的(快),效果不一样用效果好的
<img src="./img/img/1.gif" alt="" width=100px>
<img src="./img/img/5.gif" alt="松鼠">
<img src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1763336060,2397496866&fm=26&gp=0.jpg" alt="">
<img src="data:image/jpeg;base64...code...>
内联框架,用于向当前页面中引入其他页面
src 指定要引入的网页路径
frameborder 只有0/1 就是显示与不显示边框
内联框架是把一个网页做为窗口引入现在的网页,注意的是内联框架的内容不会被搜索框架所索引
<iframe src="https://www.qq.com" frameborder="0" width=800 height=400></iframe>
audio 向网页引入音频文件,音视频文件引入的时候默认情况下是不允许用户操作的
属性:
<audio src="./source/audio.mp3" controls autoplay></audio>
除了通过src实现之外,还可以通过source实现,这样可以实现对于不同浏览器提供最佳匹配文件,IE8不支持,所以要输出提示,原理是:进入audio
标签,如果匹配到source,那么浏览器会自动忽略内部其他代码,实现选择,IE8不认识source所以会自动忽略所有source
标签,于是只找到提示信息,自动不全p
标签,输出提示
<audio controls>
对不起你的浏览器不支持播放音频,请升级浏览器
<source src="./source/audio.mp3">
<source src="./source/audio.ogg">
<embed src="./source/audio.mp3" type="">
</audio>
视频标签是video
,同理
<video src="./source/flower.mp4" controls></video>
<video controls>
<source src="./source/flower.webm">
<source src="./source/flower.mp4">
<embed src="./source/flower.mp4" type="">
</video>
网页的三个部分
CSS
CSS的定义方式
注释是/*...*/
,会被浏览器自动忽略
选择器&申明块
通过选择器选定指定页面,比如p的作用就是选中所有的p元素,申明块,通过声明块来为指定的元素设置演样式声明块是一个名值对的一个样式,名值对之间以:链接,以;结尾
class是标签属性,和id类似,不同的是class可以重复使用
元素选择器
ID选择器
class
统配选择器:
交集选择器,同时选择有几个类的元素,两个选择器直接写在一起
注意:交集选择器中如果有元素选择器,必须以元素选择器开头
并集选择器,同时选择多个选择器对应的元素,用,
分割开
#b1,p,h1.red{}
选择器
子元素选择器:
div.box>span{
color:red;
}
p+span{
color:blue;
}
[属性名]
选择含有指定属性的元素[属性名=属性值]
选择含有指定属性和属性值的元素[属性名^=属性值]
以属性值开头的元素[属性名$=属性值]
以属性值结尾的元素[属性名*=属性值]
以属性值含有某值的元素p[title=abc]{
color:orange;
}
p[title^=abc]{
background-color: red;
}
伪类:不存在的元素,特殊的类
伪类用来描述一个元素的特殊形态,比如第一个子元素,被点击的元素,鼠标移入的元素
伪类一般情况下是使用:开头
加type的child
not是否定伪类
a
元素的伪类选择器a:link{...}
:正常的链接a:visited{...}
:访问过的链接,出于用户隐私考虑,visited只能改颜色a:active{...}
:鼠标点击a:hover{...}
: 鼠标移入注意的是伪类一定要按照以上顺序写:link
,visited
,active
,hover
(LoVe A Ha)
伪元素表示页面中并不真实存在的一些元素(特殊的位置),使用::
开头
我们为一个元素设置的样式也会应用到他的后代元素
继承是发生在祖先与后代之间的
继承的设计师为了开发,利用继承只需写一次就可以让所有的元素都具有该样式
注意:并不是所有的样式都可以被继承,比如背景相关的,布局相关的样式都不会被继承
当我们用不同的选择器选择相同的元素,并且为相同的样式设置不同的值,此时发生了样式的冲突
发生样式冲突的时候,显示的效果是由显示的优先级决定的
选择器的权重 | 优先级 |
---|---|
内联样式 | 1,0,0,0 |
ID选择器 | 0,1,0,0 |
类和伪类选择器 | 0,0,1,0 |
元素选择器 | 0,0,0,1 |
通配选择器 | 0,0,0,0 |
继承的样式 | 没有优先级 |
比较优先级的时候要把所有的求和计算,最后优先级高的优先显示,分组选择器单独计算
选择器累加不会超过下一级的,也就是不进位,如果优先级计算后相同优先使用考下的样式
在属性结束后加上 !important; 会获取最高优先级,慎用!!
在css中可以直接使用颜色名来配置各种颜色,但是直接使用颜色名来命名是非常不方便的
RGB值
RGBA值
16进制的RGB
HSL和HSLA值
内容区的设置,大小和高度默认设置的是内容区属性
边框属于盒子的边缘,我们需要设置至少三个样式
border-width
border-color
border-style
边框的大小会影响到盒子的大小
border-width: 10px;
border-color: red;
border-style: solid;
指定四个方向边框粗细,不写默认是3px,写四个值就是上右下左三个值的时候,默认第四个值同第二个,两个的时候上下同,左右同
写下如下在吗
border-color: red yellow green aliceblue;
可以看到边界是梯形而不是矩形,这是因为如果某部分被两个边框重合,那么中间切开,但是如果你只写了border-left-style
就不会出现这个情况
还有一个属性是border-XXX-YYY其中XXX取top,left…YYY取color,width…
border的简写属性,没有相对顺序,不能设置多项
元素在父元素的位置由以下属性决定
一个元素在他的父元素中
子元素的margin-left+border-left+padding-left+width+padding-right+border-right=父元素宽度(必须满足)
等式不成立的时候,我们称他为过度约束,这个时候我们会自动调整
盒子的高度默认的父元素高度被子元素撑开
子元素在内容区中排列
可选值:
相邻的垂直方向的外边距会发生折叠现象
相邻元素垂直外边距之间会发生重叠
兄弟元素
父子元素
重置样式表有两个
reset.css
去除了所有的css样式normalize.css
是将css样式进行了统一但不去除<link rel="stylesheet" href="./css/reset.css">
<link rel="stylesheet" href="./css/normalize.css">
默认情况下盒子的可见框大小是由内容区,内边距,边框共同确定的
box-size 可以设置盒子的计算方式,设置width,height的作用域,可选值:
outline 用来设置元素的轮廓线,用法和boarder一样,但是轮廓不影响可见框的大小
boxs-shadow用来设置元素的阴影效果,不影响页面布局
- 两个参数是阴影的右偏移量 影印的下偏移量
- 第三个是影印的模糊半径
- 第四个是影印的颜色
通过浮动可以使一个元素向其父元素的左侧或者右侧移动,使用float属性设置元素的浮动
可选值:
元素设置浮动之后元素的水平布局等式不需要强制成立
浮动可以让元素横向排列
浮动的主要作用是让元素水平排列,通过浮动可以制作水平方向上的布局
浮动不会盖住文字,文字会自动环绕在浮动元素周围
元素从文档流脱离之后会发生变换
BFC块级格式化环境
BFC是CSS中的一个隐藏的属性,可以为一个元素开启BFC,开启BFC元素会变成一个独立的布局区域
元素开启BFC之后的特点:
可以通过特殊方式开启BFC
高度塌陷问题:
在浮动布局中,父元素的高度默认被子元素撑开的子元素浮动以后会完全脱离文档流,子元素从文档流脱离将无法撑起父元素的高度,导致父元素高度丢失
父元素丢失以后,其下的元素会自动上移,导致页面布局混乱所以高度塌陷是浮动布局较常见的一个问题我们必须处理
直接引入clearfix类
.clearfix::before,
.clearfix::after{
content: "";
display: table;
clear: both;
}
<div class="box1 clearfix">
<div class="box2"></div>
</div>
原理比较简单,首先设置一个前后属性,里面填充一个空内容,但是如果是内联的话就不会显示,我们必须设置为非内联,为了解决外边距重叠问题,设置为table
,最后为了解决BFC所以设置clear:both
定位是一种更加高级的布局手段
通过定位我们可以将元素摆放到页面的任何地方
使用position设置定位
可选值
相对定位:
偏移量(off-set)
包含块:
html
是根元素,也是初始包含块
于是有了一种对于确定大小的盒子的居中方式
width: 100px;
height: 100px;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
将元素的posituin设置为fixed
包含块的宽度= Σ \Sigma Σ 7+绝对定位的left right
当发生过度约束的时候
垂直布局
对于开启了定位的元素,可以使用z-index指定元素的层级
在现实生活中,我们经常需要使用表格表示格式化数据,课程表,名单,成绩单,在网页中我们也需要设置表格,通过使用table创建表格
<table border="1">
<!-- 在table中使用tr表示一行,有几个tr就表示几行 -->
<tr>
<!-- 在tr中使用td表示一个单元格,有几个td就是有几个单元格 -->
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>1</td>
<td colspan="2">2</td>
<!-- 他会只占自己大小不合并单元格,除非指定 -->
</tr>
</table>
可以将一个表格分为三部分
border-spacing: 0px;
border-collapse: collapse;
如果不使用tbody直接使用tr,浏览器会自动创建一个tbody然后把所有tr放到里面,所以tr不是table子元素,这就导致子元素选择器无法选择
display: table-cell;
vertical-align: middle;
实例
<form action="./target.html">
<!-- 添加表单项 -->
<!-- 文本框
注意
数据要提交的服务器中必须要指定一个name
-->
文本框<input type="text" name="username">
密码框<input type="password" name="pw">
<br>
单选按钮
<!--必须有一个相同的name属性,否则不知道哪两个选项是一组的 -->
<input type="radio" name="hrll" value="a">
<input type="radio" name="hrll" value="b" checked>
<br>
<input type="checkbox" name="tt" value="1" checked>
<input type="checkbox" name="tt" value="2" checked>
<input type="checkbox" name="tt" value="3">
<br>
下拉列表
<select name="aa">
<option value="i">选项一</option>
<option selected value="ii">选项二</option>
<option value="iii">选项三</option>
</select>
<!-- 提交按钮 -->
<input type="submit" value="注册">
</form>
<!-- 关闭自动填充 -->
<form action="./target.html" autocomplete="on">
<input type="text" name="username" value="hello">
<br><br>
<input type="color">
<!-- 自动获取焦点 -->
<input type="email" autofocus>
<input type="submit">
<!-- 将表单设置为只读 数据提交 -->
<input type="text" value="fasd" readonly>
<!-- 将表单设置为禁用 数据不提交 -->
<input type="text" value="fasd" disabled>
<br>
<input type="reset">
<br>
<input type="button" value="按钮">
</form>
过渡的简写属性是transition,还有很多属性
transition-property: width;
transition-duration: 1s
速度实际上都是通过贝塞尔曲线指定的
transition-timing-function: cubic-bezier(0,0,1,1);
四个值分别是贝塞尔曲线两个点的坐标
以上可以直接用transition,唯一的顺序要求是需要同时写持续和延迟,先持续后延迟
动画与过渡类似都可以实现动态的效果,不同的是过渡需要在某个属性发生变化的时候才会触发,动画是可以自动触发的效果
设置动画效果必须先设置一个关键帧,关键帧设置了一个动画执行的每一个步骤
动画的属性设置全部是animation开头的:
以上全部使用animation一个实现,所以直接用且无顺序只要保证延时在后面写
实例
/* 动画的调用 */
.box1 .box2{
transition: all 2s;
transition-timing-function: ease-out;
animation: test 2s;
animation-iteration-count: 4;
animation-direction: alternate;
}
/* 动画的实现 */
@keyframes test {
/* 指定动画的开始位置 from也可以写作0%*/
from{
margin-left: 0px;
}
33.5%{
margin-left: 10px;
}
/* 指定动画的结束位置 to也可以写作100%*/
to{
margin-left: 7000px;
}
}
变形就是指通过CSS来改变元素的形状或者位置
平移
transform: translateX(-100px);
transform: translateX(50%);
旋转:通过旋转可以是元素围绕xyz旋转指定角度
transform: rotateZ(720deg);
transform: rotateX(.5turn);
transform: rotateY(.5turn);
transform: rotateX(.5turn) rotateY(.5turn) rotateZ(.5turn); */
transform: rotateY(45deg) rotateZ(50deg);
/* 要把transform写在一起,但是有先后优先级 */
transform: rotateY(180deg) translateZ(400px); /*Y轴是位置不变的*/
transform: translateZ(400px) rotateY(180deg); /*Y轴是变化位置的*/
缩放
特殊的Z轴平移
Z轴平移就是在调整元素在Z轴的位置,正常情况下是调整元素和人眼之间的距离,距离越大元素离人越近
Z轴的平移属于立体效果(近大远小)默认情况下我们的网页时不支持透视的如果需要看到效果,必须设置网页的视距,设置方法为在html下写下(一般800-1200均可)
perspective: 800px;
是css的另一种布局手段,主要用来代替浮动完成页面的布局
如果你不需要兼容老浏览器就用flex要是需要兼容PC就用float
伸缩盒可以使元素更有弹性,让元素可以跟随页面的大小而改变
弹性容器
弹性元素
弹性容器的属性
flex-direction 用于指定弹性元素的排列方式,可选值有
主轴
侧轴
弹性元素的属性
flex-grow 指定元素伸展的系数
flex-shrink 指定元素的收缩系数
设置弹性元素是否在弹性容器中自动换行
flex-flow wrap和direction 的简写属性
justify-content 如何分配主轴上的空白空间 主轴上的元素如何排列,可选值
**align 开头的是设置辅轴上的样式 **
alihn-items 是设置元素在辅轴上如何对齐
align-content 辅轴上的空白空间对齐方式,同justify-content
align-self 用来覆盖覆盖元素的align-items,相当于单独修改
弹性元素的增长系数flex-grow
是分配是在宽度的基础上加上按比例分配的空白的空间
弹性元素的缩减系数flex-shrink
- 缩减系数的计算方式比较复杂
- 缩减多少是根据缩减系数和元素的大小来计算的
计算元素flex-basis
在主轴上的基础长度的时候就忽略了width,
可以理解为弹簧的三种状态
order 决定弹性元素的排列顺序
像素
视口(viewport)
在不同屏幕,单位像素的大小是不同的,像素越小,屏幕会越清晰
https://material.io/resources/devices/
智能手机的像素要远远小于计算机显示器的像素点,默认情况下移动端的网页都会被设置为980px(CSS像素)以确保PC端网页可以在移动端正常访问,但是如果网页的宽度超过980,移动端浏览器会自动对网页缩放以完整显示网页
所以基本上大部分PC端网站可以在移动端正常浏览器,但往往没有好的体验,为了解决这个问题大部分网站会专门为移动端设计网页
移动端默认的视口大小是980px(css像素),默认情况下移动端的像素比是 980/移动端像素宽度,如果我们直接在网页端编写移动端代码,这样在980视口下我们的像素比是非常不友好的,导致网页中的内容非常非常小,编写移动端页面的时候必须要确保一个比较合理的像素比
1
C
S
S
=
2
物
理
p
x
1CSS=2物理px
1CSS=2物理px
我们可以改变视口的大小实现适配
可以通过meta设置视口的大小
每一款移动设备都会有最佳的像素比
记住:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
不同的设备完美视口的大小是不一样的
由于不同设备的视口和像素比不同,所以同样的375px在不同设备意义下是不一样的,例如在iPhone6中375是全屏的,但是在plus中375就会缺一个角,所以在移动端开发的时候就不能使用px来布局了,当然转而使用%就可以了,但是不能这样,应为网页复杂之后没法写了
vw是一个css的新单位,表示视口单位(viewport width)
vw这个单位永远是相对于视口宽度进行计算,但是他在PC端适配并不好(移动端可以的)
当设计图的宽度为750px创建一个 48*35 的元素
但是这样实现涉及到计算,十分麻烦,可以使用rm进行适配
@media all {
body{
background-color: #bfa;
}
}
@media print{
body{
background-color: orange;
}
}
/* 可以使用,表示并*/
@media speech,media {
body{
background-color: blue;
}
}
在媒体类型前添加only 表示只有,only的使用时为了兼容老浏览器
width 视口的宽度
height 视口的高度
min-width 视口的最小宽度 只要大于500就生效
max-width 视口的最大宽度
样式切换的分界点我们也称为断点,也就是网页在这个时候发生变化
字体相关的样式
@font-face
可以将服务器中的字体直接提供给用户去使用,但是存在问题问题:
在网页中经常使用到一些图标可以通过图片引入图标但是图片本身比较大,但是非常不灵活
fontawsome 使用规范
使用示例
<!-- 1. -->
li::before{
content: "\f1b0";
font-family: 'Font Awesome 5 Free';
font-weight: 900; /*fab需要单独设置*/
color: blue;
margin-right: 10px;
}
<!-- 2. -->
<span class="fas"></span>
<!-- 3. -->
<i class="fas fa-cat"></i>
font: 可以设置字体相关的所有属性
写法一:先写字号在写字体
font: 50px Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;
写法二:字号/行高在写字体
font: 50px/5 Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;
省略不是不写是用了默认值
font-weight: 字重
text-align 文本水平对齐
vertical-align 垂直 对齐
text-decoration 设置文本修饰
background-color 设置背景颜色
background-image 设置背景图片
background-repeat
background-position 用来这只背景图片的位置
background-clip
background-origin 背景图片偏移量计算原点
background-size 设置背景图片的大小
background-attachment 背景图片是否跟随元素滚动
background 所有上述相关属性都可以设置 没顺序 但是origin在clip前面,background-size和background-positiom顺序为size/position 没有size不能写position
通过设置渐变可以实现很多复杂的背景颜色可以从一个颜色向另一个颜色变化
渐变是图片,通过background-image设置
线性渐变,颜色沿着直线变化
background-image: linear-gradient(red,yellow);
红色在开头,黄色在结尾
background-image: linear-gradient(to right,red,yellow);
前面加to指定渐变的方向
background-image: linear-gradient(45deg,red,yellow);
直接指定旋转度数 例如 25deg 0.2turn(0.25圈)
渐变可以指定多种颜色,每种颜色默认情况下平均分配
background-image: linear-gradient(45deg,red 50px,yellow,#bfa,orange);
表示红色是c从50px开始,之前的就是纯红色
径向渐变: radial-gradient
默认情况下径向渐变的形状是根据元素形状变化的
background-image: radial-gradient(100px 100px,red,yellow);
background-image: radial-gradient(100px 100px at 0 0,red,yellow);
background-image: repeating-radial-gradient(100px 100px,red,yellow);