W3School
根据个人爱好,不过更推荐用 VS Code
Microsoft出品,轻量但强大,针对于编写现代Web和云应用的跨平台源代码编辑器。可以在Mac OS X、Windows和 Linux等操作平台使用。
具有对JavaScript、TypeScript和Node.js的内置支持,并具有丰富的其他语言(例如C++,C#,Java,Python,PHP,Go)和运行时(例如.NET和Unity)扩展的生态系统。
优点:免费开源,轻量流畅,功能丰富,支持插件,界面简洁,智能代码补全,运行速度很快
为VSCode安装以下插件,便于我们进行更好的开发工作:
Live Server
:A Quick Development Live Server with live browser reload,即提供一个live服务器,并且支持代码与浏览器之间的实时同步刷新(PS:这样我们在写前端代码时就能实时看到效果了)
doctype html>
<html>
<head>
<meta charset="utf-8">
<title>网页的标题title>
head>
<body>
<h1>网页的大标题h1>
body>
html>
有些时候,在HTML中不能直接书写一些特殊符号,如:
如果我们需要在网页中书写这些特殊的符号,则需要使用html中的实体(转义字符)实体的语法:&实体的名字;,如:
实体名称 | 显示结果 | 名称 |
---|---|---|
空格 | ||
> | > | 大于号 |
< | < | 小于号 |
& | & | 与 |
© | © | 版权 |
® | ® | 注册商标 |
™ | ™ | 商标 |
× | × | 乘号 |
÷ | ÷ | 除号 |
¿ | ¿ | 倒问号 |
更多的字符实体,可参考:HTML 字符实体、HTML ISO-8859-1 参考手册
<meta charset="utf8" version='1'/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=yes"/>
<meta name="description" content="京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务,为您提供愉悦的网上购物体验!"/>
<meta name="Keywords" content="网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东"/>
charset
:指定网页的字符集name
:指定的数据的名称
keywords
:表示网站的关键字,可以同时指定多个关键字,关键字间使用,隔开description
:表示网站的描述信息content
:指定的数据的内容,会作为搜索结果的超链接上的文字显示http-equiv
如果设置了http-equiv
属性,元素就是一个pragma指令,提供的信息相当于一个类似名称的HTTP头所能提供的信息。
在网页中HTML专门用来负责网页的结构所以在使用html标签时,应该关注的是标签的语义,而不是它的样式
元素类型 | 标签 | 作用 | 描述 |
---|---|---|---|
块元素 Block Element |
标题 | 一共有六级标题 从h1 ~ h6重要性递减,h1最重要,h6最不重要 h1在网页中的重要性仅次于title标签 一般情况下一个页面中只会有一个h1 一般情况下标题标签只会使用到h1 ~ h3,h4 ~ h6很少用 |
|
标题组 | 多层次的标题。它将一组 ~ |
||
段落 | 页面中的一个段落。由空行或第一行缩进将相邻的文本块分开 | ||
短引文 | 用缩进表示所包含文本。 可以用cite属性表示引文来源,用元素表示来源的文本表述 |
||
行内元素 Inline Element |
长引文 | 用一个简短的内联引号包围文本。 大多数浏览器通过在文本周围加上引号来实现。 该元素用于不需要段落分隔的短引文; |
|
换行 | |||
强调 | 表示强调作用。 元素可以嵌套,每一级嵌套表示更高的强调程度 元素效果与它相同,不过不属于语义标签 |
||
重要 | 表示重要性、严肃性或紧迫性。浏览器通常以粗体字呈现内容 元素效果与它相同,不过不属于语义标签 |
HTML5 提供的新语义元素有
标签 | 作用 | 描述 |
---|---|---|
页眉 | 介绍性的内容 | |
页脚 | 通常包含有关作者的信息、版权或文件链接 | |
导航链接 | 可以是当前文档内的,也可以是到其他文档的。常见例子是菜单、目录和索引 | |
文档主内容 | 中心主题直接相关或扩展的内容 | |
文章 | 自成一体,独立分发,可重复使用 | |
文档中的节 | 没有一个更具体的语义元素来代表 | |
页面内容以外的内容 | 其内容与文档的主要内容只有间接的关系。经常以边栏或呼出框的形式出现 | |
重要或强调的文本 | 为参考或记事目的而被标记或突出的文本,表明其相关性和重要性 | |
标题 |
为 指定一个摘要、标题或图例。点击 可以切换 |
|
用户能够查看或隐藏的额外细节 | 其中的信息只有被切换到 "打开 "状态时才可见。必须使用 |
|
自包含内容 | 独立的内容,用 |
|
描述其父元素 其余内容的标题或图例 |
||
定义日期/时间 | 可能包括datetime属性,将日期翻译成机器可读的格式,以便获得更好的搜索引擎结果或自定义功能。如提醒 |
以上这些新语义标签在视觉效果上基本上没有什么区别
结构化语义标签
header表示网页的头部(页眉)
main表示网页的主体部分(一个页面中只会有一个main)
footer表示网页的底部(页脚)
nav表示网页中的导航
aside和主体相关的其他内容(侧边栏)
article表示一个独立的文章
div 块元素,没有任何的语义,就用来表示一个区块。目前来讲,div还是主要的布局元素
span 行内元素,没有任何的语义,一般用于在网页中选中文字
在html中可以创建列表,html列表一共有三种:
ol
标签来创建有序列表,使用li表示列表项<ol>
<li>Mix flour, baking powder, sugar, and salt.li>
<li>In another bowl, mix eggs, milk, and oil.li>
<li>Stir both mixtures together.li>
<li>Fill muffin tray 3/4 full.li>
<li>Bake for 20 minutes.li>
ol>
ul
标签来创建无序列表,使用li表示列表项<ul>
<li>Milkli>
<li>Cheese
<ul>
<li>Blue cheese
<ul>
<li>Sweet blue cheeseli>
<li>Sour blue cheeseli>
ul>
li>
<li>Fetali>
ul>
li>
ul>
3. 定义列表,使用dl
标签来创建定义列表,使用dt
表示定义的内容,使用dd
来对内容进行解释说明
<dl>
<dt>Beast of Bodmindt>
<dd>A large feline inhabiting Bodmin Moor.dd>
<dt>Morgawrdt>
<dd>A sea serpent.dd>
<dt>Owlmandt>
<dd>A giant owl-like creature.dd>
dl>
超链接可以让我们从一个页面跳转到其他页面,或者是当前页面的其他的位置
使用a
标签来定义超链接,href
属性指定跳转的目标路径,值可以是一个外部网站的地址,也可以写一个内部页面的地址
超链接是也是一个行内元素,在a
标签中可以嵌套除它自身外的任何元素
<ul>
<li><a href="https://www.baidu.com">Websitea>li>
<li><a href="mailto:[email protected]">Emaila>li>
<li><a href="tel:+123456789">Phonea>li>
ul>
当我们需要跳转一个服务器内部的页面时,一般我们都会使用相对路径,会以./或…/开头
<a href="./test1.html">超链接1a><br>
<a href="../test2.html">超链接2a><br>
<a href="./test3/test3.html">超链接3a><br>
<a href="../test4/test4.html">超链接4a>
target
属性,用来指定超链接打开的位置可选值:
_self
在当前页面中打开超链接,默认值_blank
在新建页面中打开超链接<a href="./test1.html">超链接1——默认a><br>
<a href="./test1.html" target="_self">超链接1——当前页面a><br>
<a href="./test1.html" target="_blank">超链接1——新建页面a><br>
可以使用javascript:void(0);
来作为href的属性,此时点击这个超链接什么也不会发生
可以将#
作为超链接的路径的占位符使用。
可以直接将超链接的href
属性设置为#
,这样点击超链接以后页面不会发生跳转,而是转到当前页面的顶部的位置
可以跳转到页面的指定位置(锚点),只需将href
属性设置#目标元素的id
属性值(唯一不重复)
<p> 汉皇重色思倾国,御宇多年求不得。p>
<p> 杨家有女初长成,养在深闺人未识。 p>
<p> 天生丽质难自弃,一朝选在君王侧。 p>
<p><a id="Anchor1" href="#Anchor2"> 回眸一笑百媚生,六宫粉黛无颜色。a>p>
<p> 春寒赐浴华清池,温泉水滑洗凝脂。 p>
<p> 承欢侍宴无闲暇,春从春游夜专夜。 p>
<p><a id="Anchor2" href="#Anchor3"> 后宫佳丽三千人,三千宠爱在一身。a>p>
<p> 金屋妆成娇侍夜,玉楼宴罢醉和春。 p>
<p> 君王掩面救不得,回看血泪相和流。 p>
<p> 夕殿萤飞思悄然,孤灯挑尽未成眠。 p>
<p><a id="Anchor3" href="#Anchor4"> 迟迟钟鼓初长夜,耿耿星河欲曙天。 a>p>
<p> 鸳鸯瓦冷霜华重,翡翠衾寒谁与共。 p>
<p> 悠悠生死别经年,魂魄不曾来入梦。 p>
<p><a id="Anchor4" href="#Anchor5"> 风吹仙袂飘飖举,犹似霓裳羽衣舞。 a>p>
<p> 玉容寂寞泪阑干,梨花一枝春带雨。 p>
<p> 临别殷勤重寄词,词中有誓两心知。 p>
<p> 七月七日长生殿,夜半无人私语时。 p>
<p><a id="Anchor5" href="#Anchor6"> 在天愿作比翼鸟,在地愿为连理枝。 a>p>
<p> 天长地久有时尽,此恨绵绵无绝期。 p>
<a href="#">回到顶部a>
图片标签用于向当前页面中引入一个外部图片
img标签是一个自结束标签,这种元素属于替换元素(块和行内元素之间,具有两种元素的特点)
属性:
注意:
<img src="https://gitee.com/vectorx/ImageCloud/raw/master/img/20210513002416.png" alt="蒂姆·伯纳斯·李爵士,万维网的发明人">
<img src="https://gitee.com/vectorx/ImageCloud/raw/master/html5/20210514233853.gif" alt="结构、表现、行为">
内联框架iframe
,用于向当前页面中引入一个其他页面,
<iframe src="https://www.qq.com" width="800" height="600" frameborder="0">iframe>
音频
audio
标签用来向页面中引入一个外部的音频文件
音视频文件引入时,默认情况下不允许用户自己控制播放停止
属性:
<audio src="./source/audio.mp3" controls autoplay loop>audio>
视频
使用video
标签来向网页中引入一个视频,使用方式和audio
基本上是一样的
<video controls>
<source src="https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm" type="video/webm">
<source src="https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4" type="video/mp4">
<embed src="https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4" type="video/mp4">
video>
其他
通过iframe
和embed
的方式引入视频。以某艺为例,提供了视频链接的HTML代码和通用代码
<iframe
src="http://open.iqiyi.com/developer/player_js/coopPlayerIndex.html?vid=0c53ddd55f262c6d416afa9d1f49dc55&tvId=1008748400&accessToken=2.ef9c39d6c7f1d5b44768e38e5243157d&appKey=8c634248790d4343bcae1f66129c1010&appId=1368&height=100%&width=100%"
frameborder="0" allowfullscreen="true" width="100%" height="100%">iframe>
不过,embed
需要flash
的支持
<embed
src="//player.video.iqiyi.com/0c53ddd55f262c6d416afa9d1f49dc55/0/0/v_19rrcuh1jw.swf-albumId=1008748400-tvId=1008748400-isPurchase=0-cnId=undefined"
allowFullScreen="true" quality="high" width="480" height="350" align="middle" allowScriptAccess="always"
type="application/x-shockwave-flash">embed>
网页实际上是一个多层的结构,通过CSS可以分别为网页的每一个层来设置样式,而最终我们能看到只是网页的最上边一层
总之一句话,CSS用来设置网页中元素的样式
使用CSS来修改元素样式的方式大致可以分为3种
在标签内部通过style
属性来设置元素的样式
问题:使用内联样式,样式只能对一个标签生效。如果希望影响到多个元素,必须在每一个元素中都复制一遍;并且当样式发生变化时,我们必须要一个一个的修改,非常的不方便。(注意:开发时绝对不要使用内联样式)
<p style="color:red;font-size:60px;">内联样式(行内样式)p>
将样式编写到head
中的style
标签里然后通过css
的选择器来选中元素并为其设置各种样式可以同时为多个标签设置样式,并且修改时只需要修改一处即可。内部样式表更加方便对样式进行复用
<style>
p{
color:green;
font-size:50px;
}
style>
问题:我们的内部样式表只能对一个网页起作用,它里边的样式不能跨页面进行复用
可以将css样式编写到一个外部的CSS文件中,然后通过link标签来引入外部的CSS文件
<link rel="stylesheet" href="./style.css">
外部样式表需要通过link标签进行引入,意味着只要想使用这些样式的网页都可以对其进行引用使样式,可以在不同页面之间进行复用
将样式编写到外部的CSS文件中,可以使用到浏览器的缓存机制,从而加快网页的加载速度,提高用户的体验。
*{
color: red;
}
也叫类型选择器、标签选择器
p{
color: red;
}
h1{
color: green;
}
.blue{
color: blue;
}
.size{
font-size: 20px;
}
class是一个标签的属性,它和id类似,不同的是class
"blue size"> 类选择器(Class selector)
#red{
color: red;
}
p[title]{
color: orange;
}
p[title=e]{
color: orange;
}
p[title^=e]{
color: orange;
}
p[title$=e]{
color: orange;
}
p[title*=e]{
color: orange;
}
div.red{
font-size: 30px;
}
.a.b.c{
color: blue;
}
h1,span{
color: green;
}
div.box > p > span{
color: orange;
}
div span{
color: skyblue;
}
p + span{
color: red;
}
p ~ span{
color: red;
}
伪类(不存在的类,特殊的类)
伪类用来描述一个元素的特殊状态,比如:第一个子元素、被点击的元素、鼠标移入的元素.…
伪类一般情况下都是使用:开头
以上这些伪类都是根据所有的子元素进行排序的
这几个伪类的功能和上述的类似,不同点是他们是在同类型元素中进行排序的
/* ul下所有li,黑色 */
ul>li {
color: black;
}
/* ul下第偶数个li,黄色 */
ul>li:nth-child(2n) {
color: yellow;
}
/* ul下第奇数个li,绿色 */
ul>li:nth-child(odd) {
color: green;
}
/* ul下第一个li,红色 */
ul>li:first-child {
color: red;
}
/* ul下最后一个li,黄色 */
ul>li:last-child {
color: orange;
}
/* unvisited link */
a:link {
color: red;
}
/* visited link */
a:visited {
color: yellow;
}
/* mouse over link */
a:hover {
color: green;
}
/* selected link */
a:active {
color: blue;
}
伪元素,表示页面中一些特殊的并不真实的存在的元素(特殊的位置)
伪元素使用::开头
/* 段落首字母设置大小为30px */
p::first-letter{
font-size: 30px;
}
/* 段落第一行设置为黄色背景 */
p::first-line{
background-color: yellow;
}
/* 段落选中的部分变绿色 */
p::selection{
background-color: green;
}
/* div前加上内容 */
div::before{
content: 'BEFORE';
color: red;
}
/* div后加上内容 */
div::after{
content: 'AFTER';
color: blue;
}
官方地址:CSS Diner - Where we feast on CSS Selectors!
CSS Dinner是一个帮助初学者快速熟悉css各种选择器的网页游戏
样式的继承,我们为一个元素设置的样式,同时也会应用到它的后代元素上
继承是发生在祖先后后代之间的,继承的设计是为了方便我们的开发
利用继承,我们可以将一些通用的样式,统一设置到共同的祖先元素上。这样只需设置一次即可让所有的元素都具有该样式
注意,并不是所有的样式都会被继承:
比如背景相关的,布局相关等的这些样式都不会被继承。
当我们通过不同的选择器,选中相同的元素,并且为相同的样式设置不同的值时,此时就发生了样式的冲突。
发生样式冲突时,应用哪个样式由选择器的权重(优先级)决定选择器的权重
选择器 | 权重 |
---|---|
内联样式 | 1, 0, 0, 0 |
ID选择器 | 0, 1, 0, 0 |
类和伪类选择器 | 0, 0, 1, 0 |
元素选择器 | 0, 0, 0, 1 |
通配选择器 | 0, 0, 0, 0 |
继承的样式 | 没有优先级 |
比较优先级时,需要将所有的选择器的优先级进行相加计算,最后优先级越高,则越优先显示(分组选择器是单独计算的)
选择器的累加不会超过其最大的数量级,类选择器再高也不会超过ID选择器
如果优先级计算后相同,此时则优先使用靠下的样式
可以在某一个样式的后边添加!important
,则此时该样式会获取到最高的优先级,甚至超过内联样式,注意:在开发中一定要慎用!
我们先来看下某度上关于像素(pixel,缩写px)的介绍
像素是指由图像的小方格组成的,这些小方块都有一个明确的位置和被分配的色彩数值,小方格颜色和位置就决定该图像所呈现出来的样子。
可以将像素视为整个图像中不可分割的单位或者是元素。不可分割的意思是它不能够再切割成更小单位抑或是元素,它是以一个单一颜色的小格存在 [1] 。每一个点阵图像包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小。
也就是说,显示器屏幕实际上是由一个一个的小点(单位色块,即像素)构成的
分辨率 = 水平方向像素 * 垂直方向像素
例如,屏幕分辨率是1920×1080,则该屏幕水平方向有1920个像素,垂直方向有1080个像素
例如,一张图片分辨率是300x200,则该图片在屏幕上按1:1缩放时,水平方向有300个像素,垂直方向有200个像素点
同一台设备像素大小是不变的,那把图片放大超过100%时占的像素点就多了,但是图像也会变得模糊
其实是设备通过算法对图像进行了像素补足;
同理,把图片按小于100%缩放时,也是通过算法将图片像素减少
也可以将属性值设置为相对于其父元素属性的百分比,可以使子元素跟随父元素(暂且先理解成父元素,后面会详细说)的改变而改变
em是相对于元素的字体大小来计算的,1em = .font-size * 10,也就说em值会根据元素本身的字体大小的改变而改变
rem是相对于根元素的字体大小来计算,1em = .font-size * 10,也就说em值会根据根元素的字体大小的改变而改变
我们生活中会使用各种颜色名称去描述看到的各种颜色,在css中当然也可以直接使用颜色名来设置颜色,比如:red、orange、yellow、blue、green等等
RGB通过三原色的不同浓度来调配出不同的颜色
就是在rgb的基础上增加了一个a表示不透明度
就是RGB值的十六进制写法
语法:#RRGGBB
范围:每一种颜色的范围在00 ~ ff 之间
如果颜色两位两位重复可以进行简写,如#aabbcc => #abc
在vscode中,我们可以看到其会对颜色进行预览展示。并且将鼠标移至color处悬浮,会智能的弹出一个rgb调色板,方便我们进行调色
网页是一个多层的结构,一层摁着一层
通过CSS可以分别为每一层来设置样式,作为用户来讲只能看到最顶上一层
这些层中,最底下的一层称为文档流
文档流是网页的基础我们所创建的元素默认都是在文档流中进行排列
对于我们来元素主要有两个状态
那么元素在文档流中有什么特点,我们接着往下看
网页设计中常听的属性名:内容(content)、内边距(padding)、边框(border)、外边距(margin), CSS盒子模型都具备这些属性。
这些属性我们可以用日常生活中的常见事物——盒子作一个比喻来理解,所以叫它盒子模型。
CSS盒子模型就是在网页设计中经常用到的CSS技术所使用的一种思维模型。
CSS将页面中的所有元素都设置为了一个矩形的盒子
将元素设置为矩形的盒子后,对页面的布局就变成将不同的盒子摆放到不同的位置
每一个盒子都由一下几个部分组成:
内容区是盒子模型的中心,它呈现了盒子的主要信息内容,这些内容可以是文本、图片等多种类型
元素中的所有的子元素和文本内容都在内容区中
边框属于盒子边缘,边框里边属于盒子内部,出了边框都是盒子的外部
注意:边框的大小会影响到整个盒子的大小
.box1{
border-width: 10px;
border-color: red;
/*
solid 实线
dotted 点状虚线
dashed 虚线
double 双线
*/
border-style: solid;
}
不论是border-width 、 border-color 、border-style 还是其衍生出来的属性写法,都可以指定每个方向的边框情况
设定几个值就决定了对应方向的宽度、颜色或样式
其实不管设置几个值,只要记住:其顺序是按顺时针方向设置的,剩下的可以由矩形的对称性推导出来
border:简写属性,通过该属性可以同时设置边框所有的相关样式,并且没有顺序要求
.box1{
border: 10px red solid;
}
内边距,也叫填充,是内容区和边框之间的空间
padding内边距的简写属性,可以同时指定四个方向的内边距,规则和边框中属性值设置一样
注意:内边距的设置会影响到盒子的大小,背景颜色会延伸到内边距上
外边距,也叫空白边,位于盒子的最外围,是添加在边框外周围的空间。空白边使盒子之间不会紧凑地连接在一起,是CSS 布局的一个重要手段
注意:外边距不会影响盒子可见框的大小,但是外边距会影响盒子的位置和占用空间
一共有四个方向的外边距:
元素在页面中是按照自左向右的顺序排列的,所以默认情况下
如果我们设置的左和上外边距则会移动元素自身
而设置下和右外边距会移动其他元素
元素在其父元素中水平方向的位置由以下几个属性共同决定
一个元素在其父元素中,水平布局必须要满足以下的等式
margin-left + border-left + padding-left + width + padding-right + border-right + margin-right = 其父元素的宽度
以上等式必须满足,如果相加结果使等式不成立,则称为过渡约束
则等式会自动调整调整的情况:
100 + 0 + 0 + 200 + 0 + 0 + 0 = 800 ==> 100 + 0 + 0 + 200 + 0 + 0 + 500 = 800
这七个值中有三个值可以设置为auto :width、margin-left、maring-right
如果某个值为auto,则会自动调整auto的那个值以使等式成立
200 + 0 + 0 + auto + 0 + 0 + 200 = 600 ==> 200 + 0 + 0 + 400 + 0 + 0 + 200 = 800
auto + 0 + 0 + 200 + 0 + 0 + 200 = 600 ==> 400 + 0 + 0 + 200 + 0 + 0 + 200 = 800
200 + 0 + 0 + 200 + 0 + 0 + auto = 600 ==> 200 + 0 + 0 + 200 + 0 + 0 + 400 = 800
如果宽度为auto,则宽度会调整到最大,其他auto的外边距会自动设置为0
auto + 0 + 0 + auto + 0 + 0 + 200 = 600 ==> 0 + 0 + 0 + 600 + 0 + 0 + 200 = 800
200 + 0 + 0 + auto + 0 + 0 + auto = 600 ==> 200 + 0 + 0 + 600 + 0 + 0 + 0 = 800
auto + 0 + 0 + auto + 0 + 0 + auto = 600 ==> 0 + 0 + 0 + 800 + 0 + 0 + 0 = 800
如果外边距都为auto,则auto的外边距会自动均分以使等式成立
auto + 0 + 0 + 200 + 0 + 0 + auto = 600 ==> 300 + 0 + 0 + 200 + 0 + 0 + 300 = 800
子元素是在父元素的内容区中排列的,如果子元素的大小超过了父元素,则子元素会从父元素中溢出
使用overflow/overflow-x/overflow-y
属性来设置父元素如何处理溢出的子元素
可选值:visible/hidden/scroll/auto
垂直外边距的重叠(折叠):相邻的垂直方向外边距会发生重叠现象
兄弟元素
兄弟元素间的相邻,垂直外边距会取两者之间的较大值(两者都是正值)
特殊情况:
如果相邻的外边距一正一负,则取两者的和
如果相邻的外边距都是负值,则取两者中绝对值较大的
visible默认值,元素在页面中正常显示
hidden元素在页面中隐藏不显示,但是依然占据页面的位置
官方地址:reset.css
什么是CSS Reset?
我们可以把它叫做CSS重设,也有人叫做CSS复位、默认CSS、CSS重置等。
CSS重设就是先定义好一些CSS样式,来让所有浏览器都按照同样的规则解释CSS。
/* http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
官方地址:normalize.css
normalize的作用不同于reset。reset是将所有默认样式去除,而normalize是将所有默认样式统一,这样在不同的浏览器里显示效果也是统一的
默认情况下,盒子可见框的大小由内容区、内边距和边框共同决定
box-sizing用来设置盒子尺寸的计算方式(设置width和height的作用)
可选值:
outline用来设置元素的轮廓线,用法和border一模一样
轮廓和边框不同点是,轮廓不会影响到可见框的大小
box-shadow属性用于在一个元素的框架周围添加阴影效果
你可以设置多个由逗号分隔的效果
一个盒状阴影由相对于元素的X和Y的偏移量、模糊和扩散半径以及颜色来描述
box-shadow用来设置元素的阴影效果,阴影不会影响页面布局
box-shadow: 10px 10px 5px rgba(0, 0, 0, .2);
border-radius属性使一个元素的外边框边缘的角变圆
你可以设置一个半径来做圆角,或者设置两个半径来做椭圆角
border-radius 用来设置圆角,圆角设置的是圆的半径大小
border-top-left-radius
border-top-right-radius
border-bottom-left-radius
border-bottom-right-radius
border-radius 可以分别指定四个角的圆角
四个值:左上 右上 右下 左下
三个值:左上 右上/左下 右下
两个值:左上/右下 右上/左下
一个值:左上/右上/右下/左下
这里同样不需要死记硬背,只要记住遵循顺时针方向和矩形中心点对称原则
与border不同的是,border是从上开始顺时针设置,而圆角是从左上开始
原理很简单,就是绘制正方形,并将四个圆角半径设置为正方形的一半
.box {
width: 200px;
height: 200px;
background-color: yellow;
border-radius: 50%;
}
只需要对上述样式对一点点的改动,设置width和height属性不相等即可
.box {
width: 300px;
height: 200px;
background-color: yellow;
border-radius: 50%;
}
通过浮动可以使一个元素向其父元素的左侧或右侧移动
使用float属性来设置于元素的浮动
注意
简单总结:
块元素:
行内元素:
在浮动布局中,父元素的高度默认是被子元素撑开的
当子元素浮动后,其会完全脱离文档流,子元素从文档流中脱离将会无法撑起父元素的高度,导致父元素的高度丢失
父元素高度丢失以后,其下的元素会自动上移,导致页面的布局混乱
所以高度塌陷是浮动布局中比较常见的一个问题,这个问题我们必须要进行处理!
BFC(Block Formatting Context)块级格式化环境
元素开启BFC后的特点:
可以通过一些特殊方式来开启元素的BFC:
常用的方式为元素设置overflow:hidden(overflow:auto也是ok的) 开启其BFC, 以使其可以包含浮动元素
overflow:scroll 会有滚动条,可能并不需要的,所以不太推荐
总结
如果我们不希望某个元素因为其他元素浮动的影响而改变位置,可以通过clear属性来清除浮动元素对当前元素所产生的影响
clear作用:清除浮动元素对当前元素所产生的影响(本质是为元素添加一个margin-top属性,值由浏览器自动计算)
可选值:
clearfix 这个样式就可以同时解决高度塌陷和外边距重叠的问题
当你在遇到这些问题时,直接使用clearfix这个类即可,他就可以帮你轻松搞定css中的两大难题:
.clearfix::before,
.clearfix::after{
content: '';
display: table;
clear: both;
}
定位是一种更加高级的布局手段
通过定位可以将元素摆放到页面的任意位置
使用position属性来设置定位
可选值 | 含义 |
---|---|
static | 不开启定位,元素是静止的,默认值 |
relative | 开启元素的相对定位 |
absolute | 开启元素的绝对定位 |
fixed | 开启元素的固定定位 |
sticky | 开启元素的粘滞定位 |
当元素的position属性值设置为relative时,则开启了元素的相对定位
偏移量(offset)
当元素开启相对定位以后,可以通过偏移量来设置元素的位置
offset属性 | 含义 |
---|---|
top | 定位元素和定位位置的上边距离 |
bottom | 定位元素和定位位置的下边距离 |
left | 定位元素和定位位置的左侧距离 |
right | 定位元素和定位位置的右侧距离 |
定位元素垂直方向的位置由top和bottom两个属性控制,通常情况下只会使用其中之一
定位元素水平方向的位置由left和right两个属性控制,通常情况下只会使用其中之一
相对定位的特点
当元素的position属性值设置为absolute时,则开启了元素的绝对定位
绝对定位的特点
我们之前说过,水平方向的布局等式:
margin-left + border-left + padding-left + width + padding-right + border-right + margin-right = 其父元素的宽度
当使用绝对定位时,需要添加left和right两个值(此时规则和之前一样,只是多添加了两个值)
left + margin-left + border-left + padding-left + width + padding-right + border-right + margin-right + right = 其父元素的宽度
当发生过度约束时
可设置auto的值:margin-left/margin-right /width/left/right
因为left和right的值默认是auto,所以如果没有设置left和right,当等式不满足时,则会自动调整这两个值
<style>
.box1 {
width: 500px;
height: 500px;
background-color: #bfa;
position: relative;
}
.box2 {
width: 100px;
height: 100px;
background-color: orange;
/* 左右外边距设置为auto */
margin-left: auto;
margin-right: auto;
/* 绝对定位 */
position: absolute;
left: 0;
right: 0;
}
style>
<div class="box1">
<div class="box2">div>
div>
垂直方向布局的等式的也必须要满足
top + margin-top + border-top + padding-top + height + padding-bottom + border-bottom + margin-bottom + top = 其父元素的高度
.box2 {
width: 100px;
height: 100px;
background-color: orange;
/* 左右外边距设置为auto */
margin-top: auto;
margin-bottom: auto;
/* 绝对定位 */
position: absolute;
top: 0;
bottom: 0;
}
目前,我们可以根据绝对定位进行元素的水平垂直双方向居中,所以这个方法只是其中之一
.box2 {
width: 100px;
height: 100px;
background-color: orange;
/* 左右外边距设置为auto */
margin: auto;
/* 绝对定位 */
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
小结
只是在没有auto时,会自动调整top/bottom/left/right
将元素的position属性设置为fixed,则开启了元素的固定定位
固定定位的特点
固定定位也是一种绝对定位,所以固定定位的大部分特点都和绝对定位一样
唯一不同的是,固定定位永远参照于浏览器的视口(viewport,可视窗口)进行定位,不会随网页的滚动条滚动
将元素的position属性设置为sticky,则开启了元素的粘滞定位
我们通过上面的学习,知道position属性有五个可选值
但static是默认值,即不开启定位,所以我们只需要对比4种定位方式即可
定位方式 | 是否不设置偏移量,元素不会发生改变 | 是否脱离文档流 | 是否改变元素性质 | 是否提升元素层级 | 参考系 |
---|---|---|---|---|---|
relative(相对定位) | √ | × | × | √ | 参照于元素在文档流中的位置 |
absolute(绝对定位) | × | √ | √ | √ | 参照于其包含块 |
fixed(固定定位) | × | √ | √ | √ | 参照于浏览器的视口 |
sticky(粘滞定位) | × | √ | √ | √ | 参照于浏览器的视口 |
对于开启了定位元素,可以通过z-index属性来指定元素的层级
一般情况下,
我们前面讲过字体的两个属性
font-family 字体族(字体的格式)
上述字体均不表示具体的某种字体,而是字体的分类
我们经常使用的一些字体,如微软雅黑、黑体、楷体、宋体、Consolas等,才是具体的某种字体
也就是说,font-family 指定字体的类别,浏览器会自动使用该类别下的字体
font-family可以同时指定多个字体,多个字体间使用,隔开
字体生效时优先使用第一个,第一个无法使用则使用第二个,以此类推
font-family: 'Courier New', Courier, monospace
我们除了可以使用系统自带的字体样式外,还可以在服务器端自定义字体位置
@font-face可以将服务器中的字体直接提供给用户去使用
@font-face {
/* 指定字体名字 */
font-family: 'myFont1';
/* 服务器中字体路径 */
src: url('/font/ZCOOLKuaiLe-Regular.woff'),
url('/font/ZCOOLKuaiLe-Regular.otf'),
url('/font/ZCOOLKuaiLe-Regular.ttf') format('truetype');/* 指定字体格式,一般不写 */
}
p {
font-size: 30px;
color: salmon;
font-family: myFont1;
}
问题
在网页中经常需要使用一些图标,可以通过图片来引入图标但是图片大小本身比较大,并且非常的不灵活
所以在使用图标时,我们还可以将图标直接设置为字体,然后通过@font-face的形式来对字体进行引入
这样我们就可以通过使用字体的形式来使用图标
官方网站:https://fontawesome.com/
下载解压完毕之后,直接将css和webfonts移动到项目中即可使用
其中fas/fab是免费的,其他是收费的
图标字体其他使用方式:
通过伪元素设置
通过实体设置
通过实体来使用图标字体:图标编码;
官方网站:https://www.iconfont.cn/
iconfont是阿里的一个图标字体库,海量图标库,图标字体非常丰富
但是版权有点模横两可,如果需要商用,最好联系作者
不过一般情况下,公司企业都会有自己的UI设计团队,会自己去进行设计
这里使用方式大同小异,不过
文字占有的实际高度,可以通过line-height来设置行高
行高经常还用来设置文字的行间距:行间距 = 行高 - 字体大小
字体框就是字体存在的格子,设置font-size实际上就是在设置字体框的高度
行高会在字体框的上下平均分配
字体的简写属性
font 可以设置字体相关的所有属性:
font: font-style font-variant font-weight font-size/line-height font-family
其中某些值可以不写,会用默认值
默认值
属性 | 默认值 | 其他常用值 |
---|---|---|
font-style | normal | italic |
font-variant | normal | small-caps |
font-weight | normal | bold |
font-size | medium | small、large |
line-height | normal | |
font-family | 取决于浏览器 |
text-align 文本的水平对齐
text-align属性值 对齐方式说明
vertical-align 设置元素垂直对齐的方式
vertical-align 属性值 | 对齐方式说明 |
---|---|
baseline | 基线对齐 |
top | 顶部对齐 |
bottom | 底部对齐 |
middle | 居中对齐 |
解决图片闪烁的问题:
可以将多个小图片统一保存到一个大图片中,然后通过调整background-position来显示响应的图片
这样图片会同时加载到网页中就可以有效的避免出现闪烁的问题
这个技术在网页中应用十分广泛,被称为CSS-Sprite,这种图我们称为雪碧图
雪碧图的使用步骤:
雪碧图的特点:
.box1 {
width: 109px;
height: 33px;
background: url("assets/背景/练习3-雪碧图/amazon-sprite_.png");
/* 设置水平和垂直方向的一个偏移量;注意移动方向 */
background-position: -10px -10px;
}
.box2 {
width: 42px;
height: 30px;
background: url("assets/背景/练习3-雪碧图/amazon-sprite_.png");
/* 设置水平和垂直方向的一个偏移量;注意移动方向 */
background-position: -58px -338px;
}
通过渐变可以设置一些复杂的背景颜色,可以实现从一个颜色向其他颜色过渡的效果
!!渐变是图片,需要通过background-image来设置
线性渐变,颜色沿着一条直线发生变化 linear-gradient()
线性渐变的开头,我们可以指定一个渐变的方向
radial-gradient() 径向渐变(放射性的效果)
background-image: radial-gradient(red, yellow);
默认情况下,径向渐变的形状根据元素的形状来计算的
形状
也可以指定渐变的位置
位置
当然,除了上述值,还可以指定像素
大小
同时对其形状/大小和位置进行指定
radial-gradient(形状/大小 at 位置, 颜色 位置, 颜色 位置, 颜色 位置)
总结:径向渐变的渐变方向以圆心为起点,往四周扩散的;同一半径上的颜色是渐变的,同一圆周上的颜色是一致的
在现实生活中,我们经常需要使用表格来表示一些格式化数据:
在table中使用tr表示表格中的一行,有几个tr就有几行
在tr中使用td表示一个单元格,有几个td就有几个单元格
<table border="1" width="50%" align=" center">
<tr>
<td>A1td>
<td>B1td>
<td>C1td>
<td>D1td>
tr>
<tr>
<td>A2td>
<td>B2td>
<td>C2td>
<td rowspan="2">D2td>
tr>
<tr>
<td>ABtd>
<td>B3td>
<td>C3td>
tr>
<tr>
<td>A4td>
<td>B4td>
<td colspan="2">C4td>
tr>
table>
可以将一个表格分成三个部分:
th 表示头部的单元格
<table>
<thead>
<tr>
<td>日期td>
<td>收入td>
<td>支出td>
<td>合计td>
tr>
thead>
<tbody>
<tr>
<td>2000.1.1td>
<td>500td>
<td>200td>
<td>300td>
tr>
<tr>
<td>2000.1.1td>
<td>500td>
<td>200td>
<td>300td>
tr>
<tr>
<td>2000.1.1td>
<td>500td>
<td>200td>
<td>300td>
tr>
tbody>
<tfoot>
<tr>
<td>td>
<td>td>
<td>合计td>
<td>1200td>
tr>
tfoot>
table>
HTML
<table>
<tr>
<td>学号td>
<td>姓名td>
<td>性别td>
<td>年龄td>
<td>地址td>
tr>
<tr>
<td>1td>
<td>孙悟空td>
<td>男td>
<td>18td>
<td>花果山td>
tr>
<tr>
<td>2td>
<td>猪八戒td>
<td>男td>
<td>28td>
<td>高老庄td>
tr>
<tr>
<td>3td>
<td>沙和尚td>
<td>男td>
<td>38td>
<td>流沙河td>
tr>
<tr>
<td>4td>
<td>唐僧td>
<td>男td>
<td>16td>
<td>女儿国td>
tr>
<tr>
<td>1td>
<td>孙悟空td>
<td>男td>
<td>18td>
<td>花果山td>
tr>
<tr>
<td>2td>
<td>猪八戒td>
<td>男td>
<td>28td>
<td>高老庄td>
tr>
<tr>
<td>3td>
<td>沙和尚td>
<td>男td>
<td>38td>
<td>流沙河td>
tr>
<tr>
<td>4td>
<td>唐僧td>
<td>男td>
<td>16td>
<td>女儿国td>
tr>
<tr>
<td>4td>
<td>唐僧td>
<td>男td>
<td>16td>
<td>女儿国td>
tr>
<tr>
<td>1td>
<td>孙悟空td>
<td>男td>
<td>18td>
<td>花果山td>
tr>
<tr>
<td>2td>
<td>猪八戒td>
<td>男td>
<td>28td>
<td>高老庄td>
tr>
<tr>
<td>3td>
<td>沙和尚td>
<td>男td>
<td>38td>
<td>流沙河td>
tr>
<tr>
<td>4td>
<td>唐僧td>
<td>男td>
<td>16td>
<td>女儿国td>
tr>
table>
CSS
table {
width: 50%;
margin: 0 auto;
border: 1px black solid;
/* border-spacing:指定边框之间的距离;边框之间虽然没有距离了,但是实际上是两条边框的和,看起来是变粗了 */
/* border-spacing: 0; */
/*border-collapse:collapse;设置边框的合并;真正的将两条边框合并成一条边框 */
border-collapse: collapse;
/* 默认情况下元素在td中是垂直居中的,可以通过vectical-align来修改 */
vertical-align: middle;
text-align: center;
}
/* 如果表格中没有使用tbody而是直接使用tr,那么浏览器会自动创建一个tbody,并且将tr全都放到tbody中
所以说,tr不是table的子元素 */
tbody tr:nth-child(odd) {
background-color: rgb(211, 216, 188);
}
td {
border: 1px black solid;
}
其中,
form的属性
注意:数据要提交到服务器中,必须要为元素指定一个name属性值
文本框<input type="text" name="username">
密码框<input type="password" name="password">
<input type="submit" value="注册">
像这种选择框,必须要措定一个value属性,value属性最终会作为用户填写的值传递给服务器
单选框
<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 value="ii" selected>选项二option>
<option value="iii">选项三option>
select>
<input type="submit">
<input type="reset">
<input type="button" value="按钮">
<br><br>
<button type="submit">提交button>
<button type="reset">重置button>
<button type="button">按钮button>
上面两种写法实际上效果是一致的,区别在于:
属性值
transition-delay:过渡效果的延迟,等待一段时间后在执行过渡
transition-timing-function:过渡的时序函数
transition:可以同时设置过渡相关的所有属性
只有一个要求,如果要写延迟,则两个时间中第一个是持续时间,第二个是延迟时间
动画和过渡类似,都是可以实现一些动态的效果,不同的是
设置动画效果,必须先要设置一个关键帧,关键帧设置了动画执行每一个步骤
@keyframes test {
from {
margin-left: 0;
}
to {
margin-left: 900px;
}
}
示例:
/* animation-name: test;
animation-duration: 2s;
animation-delay: 2s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
animation-fill-mode: both; */
animation: test 2s 2s linear infinite alternate both;
当遇到复杂的动画可以选择使用动画库的方式来帮助自己完成相关工作,不一定要自己去亲力亲为,当然前提是自己要了解其中的原理.
现在有很多开源的动画库可以去使用,这个是我用过的感觉还OK的动画库:
Animate.css
感兴趣的同学可以去了解一下
变形就是指通过css来改变元素的形状或位置
变形不会影响到页面的布局
transform用来设置元素的变形效果
transform-origin 属性用于设置旋转元素的基点位置
语法:
transform-origin: x-axis y-axis z-axis;
默认值:
transform-origin:50% 50% 0;
单位:
transform-origin属性值可以是百分比、em、px等具体的值,也可以是top、right、bottom、left和center这样的关键词。
百分比是相对于自身计算的
几种水平垂直双方向居中的方式对比
/* 这种居中方式,只适用于元素的大小确定 */
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
margin: auto;
/* table-cell的方式具有一定局限性 */
display: table-cell;
vertical-align: middle;
text-align: center;
/* transform变形平移的方式 */
position: absolute;
left: 50%;
top: 50%;
transform: translateX(-50%) translateY(-50%);
div {
float: left;
width: 200px;
height: 300px;
background-color: silver;
margin: 100px 50px auto 50px;
transition: all .3s;
}
div:hover {
box-shadow: 0 0 10px rgba(0, 0, 0, .2);
transform: translateY(-5px);
}
z轴平移,调整元素在z轴的位置,正常情况就是调整元素和人眼之间的距离,距离越大,元素离人越近
z轴平移属于立体效果(近大远小),默认情况下网页是不支持透视,如果需要看见效果必须要设置网页的视距
通过旋转可以使元素沿着x、y或z旋转指定的角度
rotateY(180deg) 表示沿Y轴元转180度,展示的是背面
backface-visibility:hidden; 表示是否显示元素背面
对元素进行缩放的函数
scale(1.2) num>1代表放大
scale(.2) num<1表示缩小
都是css的拓展语言,less和sass最主要的区别是less是通过Javascript编译,而sass是通过ruby编译的,如果没有引入前端工程化,less会消耗客户端性能,sass会消耗服务端性能,但是引入前端工程化的话,gunt,gulp,webpack等,less和sass在打包阶段都会转化成css,所以不会有区别,只是sass是基于ruby,所以每次npm的时候相对慢一点点
都可以帮助我们更简单得去编写CSS代码
具体用法参考各自的官方文档:
less
sass
要使用弹性盒,必须先将一个元素设置为弹性容器
我们通过display 来设置弹性容器
/* 设置弹性容器 */
display: flex;
弹性容器的子元素是弹性元素(弹性项)
弹性元素可以同时是弹性容器
主轴与侧轴
排列方式
flex-direction 指定容器中弹性元素的排列方式
自动换行
flex-wrap 设置弹性元素是否在弹性容器中自动换行
简写属性
flex-flow 是wrap和direction的简写属性
空白空间
justify-content 如何分配主轴上的空白空间(主轴上的元素如何排列)
辅轴对齐
align-items元素在辅轴上如何对齐
空白空间
align-content 如何分配辅轴上的空白空间(辅轴上的元素如何排列)
利用弹性盒对元素进行水平垂直双方向居中
justify-content: center;
align-items: center;
flex-grow 指定弹性元素的伸展系数,默认值为0
flex-shrink 指定弹性元素的收缩系数,默认值为1
flex-basis 指定的是元素在主轴上的基础长度
简写属性
flex可以设置弹性元素所有的三个样式 flex: 增长 缩减 基础
order 决定弹性元素的排列顺序
li:nth-child(1) {
background-color: #bfa;
order: 2;
}
li:nth-child(2) {
background-color: red;
order: 3;
}
li:nth-child(3) {
background-color: green;
order: 1;
}
align-self 用来覆盖当前弹性元素上的align-items
li:nth-child(1) {
background-color: #bfa;
align-self: flex-end;
}