前端入门文章
- 一、基本环境准备
- 二、HTML字符实体和常用标签
- 三、CSS语法与选择器
- 四、样式继承与其他概念
- 五、盒模型
- 六、浮动
一、基本环境准备
1.1、在线文档
W3School
1.2、编辑器
根据个人爱好,不过更推荐用 VS Code
-
Microsoft出品,轻量但强大,针对于编写现代Web和云应用的跨平台源代码编辑器。可以在Mac OS X、Windows和 Linux等操作平台使用。
-
具有对JavaScript、TypeScript和Node.js的内置支持,并具有丰富的其他语言(例如C++,C#,Java,Python,PHP,Go)和运行时(例如.NET和Unity)扩展的生态系统。
优点:免费开源,轻量流畅,功能丰富,支持插件,界面简洁,智能代码补全,运行速度很快
1.2.1、VS Code插件安装
为VSCode安装以下插件,便于我们进行更好的开发工作:
- Chinese (Simplified) Language Pack for Visual Studio Code:中文(简体)语言包(PS1:不完全显示中文,但是大多数都会译为英文;PS2:喜欢原生态或者英文OK的话,可忽略)
- Ayu:简单的主题与明亮的颜色
- vscode-icons:好看的图标
Live Server
:A Quick Development Live Server with live browser reload,即提供一个live服务器,并且支持代码与浏览器之间的实时同步刷新(PS:这样我们在写前端代码时就能实时看到效果了)
二、HTML字符实体和常用标签
2.1、HTML5基本结构
<!-- 文档声明,声明当前网页的版本 -->
<!doctype html>
<!-- html的根标签(元素),网页中的所有内容都要写根元素的里边 -->
<html>
<!-- head是网页的头部,head中的内容不会在网页中直接出现,主要用来帮助浏览器或搜索引擎来解析网页 -->
<head>
<!-- meta标签用来设置网页的元数据,这里meta用来设置网页的字符集,避免乱码问题 -->
<meta charset="utf-8">
<!-- title中的内容会显示在浏览器的标题栏,搜索引擎会主要根据title中的内容来判断网页的主要内容 -->
<title>网页的标题</title>
</head>
<!-- body是htm1的子元素,表示网页的主体,网页中所有的可见内容都应该写在body里 -->
<body>
<!-- h1网页的一级标题 -->
<h1>网页的大标题</h1>
</body>
</html>
2.2、字符实体
有些时候,在HTML中不能直接书写一些特殊符号,如:
- 多个连续的空格(在网页中编写的多个空格默认情况会自动被浏览器解析为一个空格)
- 比如字母两侧的大于小于号(可能会被认为是标签并解析)
如果我们需要在网页中书写这些特殊的符号,则需要使用html中的实体(转义字符)实体的语法:&实体的名字;,如:
实体名称 | 显示结果 | 名称 |
---|---|---|
| 空格 | |
> | > | 大于号 |
< | < | 小于号 |
& | & | 与 |
© | © | 版权 |
® | ® | 注册商标 |
™ | ™ | 商标 |
× | × | 乘号 |
÷ | ÷ | 除号 |
¿ | ¿ | 倒问号 |
更多的字符实体,可参考:HTML 字符实体、HTML ISO-8859-1 参考手册
2.3、meta标签
<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头所能提供的信息。
- content-security-policy:允许页面作者为当前页面定义一个内容策略。内容策略主要指定允许的服务器来源和脚本端点,这有助于防范跨站脚本攻击。
- content-type:声明文档的MIME类型和字符编码。如果指定,content属性必须有 "text/html; charset=utf-8 "的值。这相当于一个指定了charset属性的元素,并对文档中的位置有同样的限制。注意:只能在使用text/html的文档中使用,不能在使用XML MIME类型的文档中使用。
- default-style:设置默认的CSS样式表集的名称。
- x-ua-compatible: 如果指定,内容属性必须有 "IE=edge"的值。用户代理被要求忽略这个pragma。
- refresh:该指令指定页面重新加载及重定向的方式
- 直到页面应该被重新加载的秒数–只有当content属性包含一个正整数时。
- 直到页面重定向到另一个页面的秒数–只有当内容属性包含一个正整数,后面跟着字符串’;url=’,以及一个有效的URL。
2.4、语义标签
在网页中HTML专门用来负责网页的结构所以在使用html标签时,应该关注的是标签的语义,而不是它的样式
元素类型 | 标签 | 作用 | 描述 |
---|---|---|---|
块元素 Block Element | <h1> <h2> <h3> <h4> <h5> <h6> | 标题 | 一共有六级标题 从h1 ~ h6重要性递减,h1最重要,h6最不重要 h1在网页中的重要性仅次于title标签 一般情况下一个页面中只会有一个h1 一般情况下标题标签只会使用到h1 ~ h3,h4 ~ h6很少用 |
<hgroup> | 标题组 | 多层次的标题。它将一组<h1> ~ <h6>元素分组 | |
<p> | 段落 | 页面中的一个段落。由空行或第一行缩进将相邻的文本块分开 | |
<blockquote> | 短引文 | 用缩进表示所包含文本。 可以用cite属性表示引文来源,用元素表示来源的文本表述 | |
行内元素 Inline Element | <q> | 长引文 | 用一个简短的内联引号包围文本。 大多数浏览器通过在文本周围加上引号来实现。 该元素用于不需要段落分隔的短引文; |
<br> | 换行 | ||
<em> | 强调 | 表示强调作用。 <em>元素可以嵌套,每一级嵌套表示更高的强调程度 <i>元素效果与它相同,不过<i>不属于语义标签 | |
<strong> | 重要 | 表示重要性、严肃性或紧迫性。浏览器通常以粗体字呈现内容 <b>元素效果与它相同,不过<b>不属于语义标签 |
HTML5 提供的新语义元素有
标签 | 作用 | 描述 |
---|---|---|
<header> | 页眉 | 介绍性的内容 |
<footer> | 页脚 | 通常包含有关作者的信息、版权或文件链接 |
<nav> | 导航链接 | 可以是当前文档内的,也可以是到其他文档的。常见例子是菜单、目录和索引 |
<main> | 文档主内容 | 中心主题直接相关或扩展的内容 |
<article> | 文章 | 自成一体,独立分发,可重复使用 |
<section> | 文档中的节 | 没有一个更具体的语义元素来代表 |
<aside> | 页面内容以外的内容 | 其内容与文档的主要内容只有间接的关系。经常以边栏或呼出框的形式出现 |
<mark> | 重要或强调的文本 | 为参考或记事目的而被标记或突出的文本,表明其相关性和重要性 |
<summary> | <details> 标题 | 为<details>指定一个摘要、标题或图例。点击<summary>可以切换<details>打开和关闭 |
<details> | 用户能够查看或隐藏的额外细节 | 其中的信息只有被切换到 "打开 "状态时才可见。必须使用<summary>提供一个摘要或标签 |
<figure> | 自包含内容 | 独立的内容,用<figcaption>元素指定一个可选的标题。比如图示、图表、照片、代码清单等 |
<figcaption> | <figure> 的标题 | 描述其父元素 其余内容的标题或图例 |
<time> | 定义日期/时间 | 可能包括datetime属性,将日期翻译成机器可读的格式,以便获得更好的搜索引擎结果或自定义功能。如提醒 |
以上这些新语义标签在视觉效果上基本上没有什么区别
2.5、布局标签
结构化语义标签
-
header表示网页的头部(页眉)
-
main表示网页的主体部分(一个页面中只会有一个main)
-
footer表示网页的底部(页脚)
-
nav表示网页中的导航
-
aside和主体相关的其他内容(侧边栏)
-
article表示一个独立的文章
-
section表示一个独立的区块,上边的标签都不能表示时使用section
-
div 块元素,没有任何的语义,就用来表示一个区块。目前来讲,div还是主要的布局元素
-
span 行内元素,没有任何的语义,一般用于在网页中选中文字
2.6、列表
在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>Milk</li>
<li>Cheese
<ul>
<li>Blue cheese
<ul>
<li>Sweet blue cheese</li>
<li>Sour blue cheese</li>
</ul>
</li>
<li>Feta</li>
</ul>
</li>
</ul>
3. 定义列表,使用dl
标签来创建定义列表,使用dt
表示定义的内容,使用dd
来对内容进行解释说明
<dl>
<dt>Beast of Bodmin</dt>
<dd>A large feline inhabiting Bodmin Moor.</dd>
<dt>Morgawr</dt>
<dd>A sea serpent.</dd>
<dt>Owlman</dt>
<dd>A giant owl-like creature.</dd>
</dl>
2.7、超链接
使用a
标签来定义超链接,href
属性指定跳转的目标路径,值可以是一个外部网站的地址,也可以写一个内部页面的地址
超链接是也是一个行内元素,在a
标签中可以嵌套除它自身外的任何元素
2.7.1、 外部地址
- Linking to an absolute URL:链接一个绝对路径
- Linking to an email address:链接一个email地址
- Linking to telephone numbers:链接电话号码
- Using the download attribute to save a as a PNG:下载图片
<ul>
<li><a href="https://www.baidu.com">Website</a></li>
<li><a href="mailto:example@outlook.com">Email</a></li>
<li><a href="tel:+123456789">Phone</a></li>
</ul>
2.7.2、内部地址
当我们需要跳转一个服务器内部的页面时,一般我们都会使用相对路径,会以./或…/开头
- ./ 表示当前文件所在目录,可以省略不写
- …/表示当前文件所在目录的上一级目录
<a href="./test1.html">超链接1</a><br>
<a href="../test2.html">超链接2</a><br>
<a href="./test3/test3.html">超链接3</a><br>
<a href="../test4/test4.html">超链接4</a>
2.7.3、新建页面
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>
2.7.4、锚点跳转
可以使用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>
<!-- Heading to link to -->
<a href="#">回到顶部</a>
2.8、图片
img标签是一个自结束标签,这种元素属于替换元素(块和行内元素之间,具有两种元素的特点)
属性:
- src:属性指定的是外部图片的路径(路径规则和超链接是一样的)
- alt:图片的描述,这个描述默认情况下不会显示,有些浏览器会在图片无法加载时显示,搜索引擎会根据alt中的内容来识别图片
- width:图片的宽度(单位是像素)
- height :图片的高度(单位是像素)
- 宽度和高度中如果只修改了一个,则另一个会等比例缩放
注意:
- 一般情况在pc端,不建议修改图片的大小,需要多大的图片就裁多大
- 但是在移动端,经常需要对图片进行缩放(大图缩小)
<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="结构、表现、行为">
2.9 内联格式 iframe
内联框架iframe
,用于向当前页面中引入一个其他页面,
- src指定要引入的网页的路径
- frameborder指定内联框架的边框
<iframe src="https://www.qq.com" width="800" height="600" frameborder="0"></iframe>
2.10 音视频
音频
audio
标签用来向页面中引入一个外部的音频文件
音视频文件引入时,默认情况下不允许用户自己控制播放停止
属性:
- controls是否允许用户控制播放
- autoplay音频文件是否自动播放
- 如果设置了autoplay,则音乐在打开页面时会自动播放
- 但是目前来讲大部分浏览器都不会自动对音乐进行播放
- loop音乐是否循环播放
<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语法与选择器
3.1 CSS简介
3.1.1 层叠样式表
网页实际上是一个多层的结构,通过CSS可以分别为网页的每一个层来设置样式,而最终我们能看到只是网页的最上边一层
总之一句话,CSS用来设置网页中元素的样式
使用CSS来修改元素样式的方式大致可以分为3种
3.1.2 内联样式(行内样式)
在标签内部通过style
属性来设置元素的样式
问题:使用内联样式,样式只能对一个标签生效。如果希望影响到多个元素,必须在每一个元素中都复制一遍;并且当样式发生变化时,我们必须要一个一个的修改,非常的不方便。(注意:开发时绝对不要使用内联样式)
<p style="color:red;font-size:60px;">内联样式(行内样式)</p>
3.1.3 内部样式表
将样式编写到head
中的style
标签里然后通过css
的选择器来选中元素并为其设置各种样式可以同时为多个标签设置样式,并且修改时只需要修改一处即可。内部样式表更加方便对样式进行复用
<style>
p{
color:green;
font-size:50px;
}
</style>
问题:我们的内部样式表只能对一个网页起作用,它里边的样式不能跨页面进行复用
3.1.4 外部样式表
可以将css样式编写到一个外部的CSS文件中,然后通过link标签来引入外部的CSS文件
<link rel="stylesheet" href="./style.css">
外部样式表需要通过link标签进行引入,意味着只要想使用这些样式的网页都可以对其进行引用使样式,可以在不同页面之间进行复用
将样式编写到外部的CSS文件中,可以使用到浏览器的缓存机制,从而加快网页的加载速度,提高用户的体验。
3.2 CSS选择器
3.2.1 通配选择器(Universal selector)
- 作用:选中页面中的所有元素
- 语法:*
- 例子:*{}
*{
color: red;
}
3.2.2 元素选择器(Type selector)
也叫类型选择器、标签选择器
- 作用:根据标签名来选中指定的元素
- 语法:elementname{}
- 例子:p{} h1{} div{}
p{
color: red;
}
h1{
color: green;
}
3.2.3 类选择器(Class selector)
- 作用:根据元素的class属性值选中一组元素
- 语法:.classname
- 例子:.blue{}
.blue{
color: blue;
}
.size{
font-size: 20px;
}
class是一个标签的属性,它和id类似,不同的是class
- 可以重复使用,
- 可以通过class属性来为元素分组,
- 可以同时为一个元素指定多个class属性
<p class="blue size"> 类选择器(Class selector)</p>
3.2.4 ID选择器(ID selector)
- 作用:根据元素的id属性值选中一个元素
- 语法:#idname{}
- 例子:#box{} #red{}
#red{
color: red;
}
3.2.5 属性选择器(Attribute selector)
- 作用:根据元素的属性值选中一组元素
- 语法1:[属性名] 选择含有指定属性的元素
- 语法2:[属性名=属性值] 选择含有指定属性和属性值的元素
- 语法3:[属性名^=属性值] 选择属性值以指定值开头的元素
- 语法4:[属性名$=属性值] 选择属性值以指定值结尾的元素
- 语法5:[属性名*=属性值] 选择属性值中含有某值的元素
- 例子:p[title]{} p[title=e]{} p[title^=e]{} p[title$=e]{} p[title*=e]{}
p[title]{
color: orange;
}
p[title=e]{
color: orange;
}
p[title^=e]{
color: orange;
}
p[title$=e]{
color: orange;
}
p[title*=e]{
color: orange;
}
3.3 复合选择器
3.3.1 交集选择器
- 作用:选中同时复合多个条件的元素
- 语法:选择器1选择器2选择器3选择器n{}
- 注意点:交集选择器中如果有元素选择器,必须使用元素选择器开头
div.red{
font-size: 30px;
}
.a.b.c{
color: blue;
}
3.3.2 并集选择器(选择器分组)
- 作用:同时选择多个选择器对应的元素
- 语法:选择器1,选择器2,选择器3,选择器n{}
- 例子:#b1,.p1,h1,span,div.red{}
h1,span{
color: green;
}
3.4 关系选择器
- 父元素:直接包含子元素的元素叫做父元素
- 子元素:直接被父元素包含的元素是子元素
- 祖先元素:直接或间接包含后代元素的元素叫做祖先元素;一个元素的父元素也是它的祖先元素
- 后代元素:直接或间接被祖先元素包含的元素叫做后代元素;子元素也是后代元素
- 兄弟元素:拥有相同父元素的元素是兄弟元素
3.4.1 子元素选择器(Child combinator)
- 作用:选中指定父元素的指定子元素
- 语法:父元素 > 子元素
- 例子:A > B
div.box > p > span{
color: orange;
}
3.4.2 后代元素选择器(Descendant combinator)
- 作用:选中指定元素内的指定后代元素
- 语法:祖先 后代
- 例子:A B
div span{
color: skyblue;
}
3.4.3 兄弟元素选择器(Sibling combinator)
- 作用:选择下一个兄弟
- 语法:前一个 + 下一个 前一个 + 下一组
- 例子1:A1 + A2(Adjacent sibling combinator)
- 例子2: A1 ~ An(General sibling combinator)
p + span{
color: red;
}
p ~ span{
color: red;
}
3.5 伪类选择器
伪类用来描述一个元素的特殊状态,比如:第一个子元素、被点击的元素、鼠标移入的元素.…
伪类一般情况下都是使用:开头
- :first-child 第一个子元素
- :last-child 最后一个子元素
- :nth-child() 选中第n个子元素
- n:第n个,n的范围0到正无穷
- 2n或even:选中偶数位的元素
- 2n+1或odd:选中奇数位的元素
以上这些伪类都是根据所有的子元素进行排序的
- :first-of-type 同类型中的第一个子元素
- :last-of-type 同类型中的最后一个子元素
- :nth-of-type() 选中同类型中的第n个子元素
这几个伪类的功能和上述的类似,不同点是他们是在同类型元素中进行排序的
- :not()否定伪类,将符合条件的元素从选择器中去除
/* 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;
}
- :link 未访问的链接
- :visited 已访问的链接
- 由于隐私的原因,所以visited这个伪类只能修改链接的颜色
- :hover 鼠标悬停的链接
- :active 鼠标点击的链接
/* 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;
}
3.6 伪元素选择器
伪元素,表示页面中一些特殊的并不真实的存在的元素(特殊的位置)
伪元素使用::开头
- ::first-letter 表示第一个字母
- ::first-line 表示第一行
- ::selection 表示选中的内容
- ::before 元素的开始
- ::after 元素的最后
- ::before和::after 必须结合content属性来使用
/* 段落首字母设置大小为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;
}
3.7 CSS Dinner游戏
官方地址:CSS Diner - Where we feast on CSS Selectors!
CSS Dinner是一个帮助初学者快速熟悉css各种选择器的网页游戏
四、样式继承与其他概念
4.1 继承
样式的继承,我们为一个元素设置的样式,同时也会应用到它的后代元素上
继承是发生在祖先后后代之间的,继承的设计是为了方便我们的开发
利用继承,我们可以将一些通用的样式,统一设置到共同的祖先元素上。这样只需设置一次即可让所有的元素都具有该样式
注意,并不是所有的样式都会被继承:
比如背景相关的,布局相关等的这些样式都不会被继承。
4.2 选择器的权重
当我们通过不同的选择器,选中相同的元素,并且为相同的样式设置不同的值时,此时就发生了样式的冲突。
发生样式冲突时,应用哪个样式由选择器的权重(优先级)决定选择器的权重
选择器 | 权重 |
---|---|
内联样式 | 1, 0, 0, 0 |
ID选择器 | 0, 1, 0, 0 |
类和伪类选择器 | 0, 0, 1, 0 |
元素选择器 | 0, 0, 0, 1 |
通配选择器 | 0, 0, 0, 0 |
继承的样式 | 没有优先级 |
比较优先级时,需要将所有的选择器的优先级进行相加计算,最后优先级越高,则越优先显示(分组选择器是单独计算的)
选择器的累加不会超过其最大的数量级,类选择器再高也不会超过ID选择器
如果优先级计算后相同,此时则优先使用靠下的样式
可以在某一个样式的后边添加!important
,则此时该样式会获取到最高的优先级,甚至超过内联样式,注意:在开发中一定要慎用!
4.3 长度单位
4.3.1 像素
我们先来看下某度上关于像素(pixel,缩写px)的介绍
也就是说,显示器屏幕实际上是由一个一个的小点(单位色块,即像素)构成的
- 问题1:像素和分辨率有什么关系呢?
4.3.2 屏幕分辨率
例如,屏幕分辨率是1920×1080,则该屏幕水平方向有1920个像素,垂直方向有1080个像素
- 不同屏幕的像素大小是不同的,也就是说像素大小不像我们现行的长度单位(如米/m)那样有着固定的国际标准
- 所以同样的像素大小在不同的设备上显示效果是不一样的,像素越小的屏幕显示的效果越清晰
4.3.3 图像分辨率
例如,一张图片分辨率是300x200,则该图片在屏幕上按1:1缩放时,水平方向有300个像素,垂直方向有200个像素点
- 图片分辨率越高,1:1缩放时面积越大
- 图片分辨率越低,1:1缩放时面积越小
同一台设备像素大小是不变的,那把图片放大超过100%时占的像素点就多了,但是图像也会变得模糊
- 问题2:屏幕实现图片放大或缩小的原理是什么呢?
其实是设备通过算法对图像进行了像素补足;
同理,把图片按小于100%缩放时,也是通过算法将图片像素减少
4.3.4 百分比
也可以将属性值设置为相对于其父元素属性的百分比,可以使子元素跟随父元素(暂且先理解成父元素,后面会详细说)的改变而改变
4.3.5 em
em是相对于元素的字体大小来计算的,1em = .font-size * 10,也就说em值会根据元素本身的字体大小的改变而改变
4.3.6 rem
rem是相对于根元素的字体大小来计算,1em = .font-size * 10,也就说em值会根据根元素的字体大小的改变而改变
4.4 颜色单位
4.4.1 css中的颜色名称
我们生活中会使用各种颜色名称去描述看到的各种颜色,在css中当然也可以直接使用颜色名来设置颜色,比如:red、orange、yellow、blue、green等等
4.4.2 RGB值
RGB通过三原色的不同浓度来调配出不同的颜色
- 语法:RGB(red, green, blue)
- 范围:每一种颜色的范围在0 ~ 255(0% ~ 100%)之间
4.4.3 RGBA
就是在rgb的基础上增加了一个a表示不透明度
- 1表示完全不透明
- 0表示完全透明
- .5半透明
4.4.4 十六进制的RGB值
就是RGB值的十六进制写法
语法:#RRGGBB
范围:每一种颜色的范围在00 ~ ff 之间
如果颜色两位两位重复可以进行简写,如#aabbcc => #abc
在vscode中,我们可以看到其会对颜色进行预览展示。并且将鼠标移至color处悬浮,会智能的弹出一个rgb调色板,方便我们进行调色
五、盒模型
5.1 文档流(normalflow)
网页是一个多层的结构,一层摁着一层
通过CSS可以分别为每一层来设置样式,作为用户来讲只能看到最顶上一层
这些层中,最底下的一层称为文档流
文档流是网页的基础我们所创建的元素默认都是在文档流中进行排列
对于我们来元素主要有两个状态
- 在文档流中
- 不在文档流中(脱离文档流)
那么元素在文档流中有什么特点,我们接着往下看
5.2 块元素
- 块元素会在页面中独占一行
- 默认宽度是父元素的全部(会把父元素撑满)
- 默认高度是被内容撑开(子元素)
5.3 行内元素
- 行内元素不会独占页面的一行,只占自身的大小
- 行内元素在页面中左向右水平排列(书写习惯一致)
- 如果一行之中不能容纳下所有的行内元素,则元素会换到第二行继续自左向右排列
- 行内元素的默认宽度和高度都是被内容撑开
5.4 盒子模型
5.4.1 盒模型(box model)
CSS将页面中的所有元素都设置为了一个矩形的盒子
将元素设置为矩形的盒子后,对页面的布局就变成将不同的盒子摆放到不同的位置
每一个盒子都由一下几个部分组成:
- 内容区(content)
- 内边距(padding)
- 边框(border)
- 外边距(margin)
5.4.2 内容区(content)
内容区是盒子模型的中心,它呈现了盒子的主要信息内容,这些内容可以是文本、图片等多种类型
元素中的所有的子元素和文本内容都在内容区中
- width和height 设置排列内容区的大小
- width 设置内容区的宽度
- height 设置内容区的高度
5.4.3 边框(border)
注意:边框的大小会影响到整个盒子的大小
- border-width 边框的宽度:默认3px
- border-top-width 上边框的宽度
- border-right-width 右边框的宽度
- border-bottom-width 下边框的宽度
- border-left-width 左边框的宽度
- border-color 边框的颜色:默认使用color的颜色值
- border-top-color 上边框的颜色
- border-right-color 右边框的颜色
- border-bottom-color 下边框的颜色
- border-left-color 左边框的颜色
- border-style 边框的样式:没有默认值,必须指定
- border-top-style 上边框的样式
- border-right-style 右边框的样式
- border-bottom-style 下边框的样式
- border-left-style 左边框的样式
.box1{
border-width: 10px;
border-color: red;
/*
solid 实线
dotted 点状虚线
dashed 虚线
double 双线
*/
border-style: solid;
}
不论是border-width 、 border-color 、border-style 还是其衍生出来的属性写法,都可以指定每个方向的边框情况
设定几个值就决定了对应方向的宽度、颜色或样式
- 四个值:上 右 下 左
- 三个值:上 左右 下
- 两个值:上下 左右
- 一个值:上下左右
其实不管设置几个值,只要记住:其顺序是按顺时针方向设置的,剩下的可以由矩形的对称性推导出来
border:简写属性,通过该属性可以同时设置边框所有的相关样式,并且没有顺序要求
- border-top 上边框的宽度、颜色和样式
- border-right 右边框的宽度、颜色和样式
- border-bottom 下边框的宽度、颜色和样式
- border-left 左边框的宽度、颜色和样式
.box1{
border: 10px red solid;
}
5.4.4 内边距(padding)
内边距,也叫填充,是内容区和边框之间的空间
- padding-top 上内边距
- padding-right 右内边距
- padding-bottom下内边距
- padding-left 左内边距
padding内边距的简写属性,可以同时指定四个方向的内边距,规则和边框中属性值设置一样
5.4.5 外边距(margin)
外边距,也叫空白边,位于盒子的最外围,是添加在边框外周围的空间。空白边使盒子之间不会紧凑地连接在一起,是CSS 布局的一个重要手段
注意:外边距不会影响盒子可见框的大小,但是外边距会影响盒子的位置和占用空间
一共有四个方向的外边距:
- margin-top 上外边距
设置正值,元素自身向下移动
设置负值,元素自身向上移动 - margin-right 右外边距
设置正值,其右边的元素向右移动
设置负值,其右边的元素向左移动
上述说法并不准确,对于块元素,设置margin-right不会产生任何效果 - margin-bottom 下外边距
设置正值,其下边的元素向下移动
设置负值,其下边的元素向上移动
上述说法并不准确,对于块元素,会有垂直方向上的边距重叠问题(后面会细说) - margin-left 左外边距
设置正值,元素自身向右移动
设置负值,元素自身向左移动
元素在页面中是按照自左向右的顺序排列的,所以默认情况下
如果我们设置的左和上外边距则会移动元素自身
而设置下和右外边距会移动其他元素
5.5 水平方向布局
元素在其父元素中水平方向的位置由以下几个属性共同决定
- margin-left
- border-left
- padding-left
- width
- padding-right
- border-right
- margin-right
一个元素在其父元素中,水平布局必须要满足以下的等式
以上等式必须满足,如果相加结果使等式不成立,则称为过渡约束
则等式会自动调整调整的情况:
- 如果这七个值中没有auto的情况,则浏览器会自动调整margin-right值以使等式满足
100 + 0 + 0 + 200 + 0 + 0 + 0 = 800 ==> 100 + 0 + 0 + 200 + 0 + 0 + 500 = 800
- 如果这七个值中有auto的情况,则会自动调整auto值以使等式成立
这七个值中有三个值可以设置为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
5.6 垂直方向布局
5.6.1 元素溢出
子元素是在父元素的内容区中排列的,如果子元素的大小超过了父元素,则子元素会从父元素中溢出
使用overflow/overflow-x/overflow-y
属性来设置父元素如何处理溢出的子元素
可选值:visible/hidden/scroll/auto
- visible 溢出内容会在父元素外部位置显示,默认值
- hidden 溢出内容会被裁剪,不会显示
- scroll 生成两个滚动条,通过滚动条来查看完整的内容
- auto 根据需要生成滚动条
5.6.2 边距折叠
垂直外边距的重叠(折叠):相邻的垂直方向外边距会发生重叠现象
兄弟元素
兄弟元素间的相邻,垂直外边距会取两者之间的较大值(两者都是正值)
特殊情况:
如果相邻的外边距一正一负,则取两者的和
如果相邻的外边距都是负值,则取两者中绝对值较大的
5.7 行内元素的盒模型
- 行内元素不支持设置宽度和高度
- 行内元素可以设置padding,但是垂直方向padding不会影响页面的布局
- 行内元素可以设置border,垂直方向的border不会影响页面的布局
- 行内元素可以设置margin,垂直方向的margin不会影响页面的布局
5.7.1 display用来设置元素显示的类型
- inline将元素设置为行内元素
- block将元素设置为块元素
- inline-block 将元素设置为行内块元素行内块,既可以设置宽度和高度又不会独占一行
- table将元素设置为一个表格
- none元素不在页面中显示
5.7.2 visibility用来设置元素的显示状态
visible默认值,元素在页面中正常显示
hidden元素在页面中隐藏不显示,但是依然占据页面的位置
5.8 reset样式
官方地址:reset.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;
}
5.9 normalize样式
官方地址:normalize.css
5.10 盒子大小
box-sizing用来设置盒子尺寸的计算方式(设置width和height的作用)
可选值:
- content-box默认值,宽度和高度用来设置内容区的大小
- border-box 宽度和高度用来设置整个盒子可见框的大小
- width和height指的是内容区、内边距和边框的总大小
5.11 轮廓
outline用来设置元素的轮廓线,用法和border一模一样
轮廓和边框不同点是,轮廓不会影响到可见框的大小
5.12 阴影
box-shadow用来设置元素的阴影效果,阴影不会影响页面布局
box-shadow: 10px 10px 5px rgba(0, 0, 0, .2);
- 第一个值-水平偏移量:设置阴影的水平位置
- 正值向右移动
- 负值向左移动
- 第二个值-垂直偏移量:设置阴影的垂直位置
- 正值向下移动
- 负值向上移动
- 第三个值-阴影的模糊半径
- 第四个值-阴影的颜色
5.13 圆角
border-radius属性使一个元素的外边框边缘的角变圆
你可以设置一个半径来做圆角,或者设置两个半径来做椭圆角
border-radius 用来设置圆角,圆角设置的是圆的半径大小
-
border-top-left-radius
-
border-top-right-radius
-
border-bottom-left-radius
-
border-bottom-right-radius
-
border-radius 可以分别指定四个角的圆角
-
四个值:左上 右上 右下 左下
-
三个值:左上 右上/左下 右下
-
两个值:左上/右下 右上/左下
-
一个值:左上/右上/右下/左下
这里同样不需要死记硬背,只要记住遵循顺时针方向和矩形中心点对称原则
与border不同的是,border是从上开始顺时针设置,而圆角是从左上开始
5.14 圆
原理很简单,就是绘制正方形,并将四个圆角半径设置为正方形的一半
.box {
width: 200px;
height: 200px;
background-color: yellow;
border-radius: 50%;
}
5.15 椭圆
只需要对上述样式对一点点的改动,设置width和height属性不相等即可
.box {
width: 300px;
height: 200px;
background-color: yellow;
border-radius: 50%;
}
六、浮动
明天再更新,先去玩会游戏___