整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

CSS基础-初识CSS

CSS基础-初识CSS

CSS (cascading style shett) , 层叠样式表,是用来给HTML标签添加样式的语言。简单来说就是使网页变得更好看。

CSS的出现,使得样式和结构分离,HTML负责结构,CSS负责样式渲染。


CSS 书写位置

内嵌式

内嵌在html网页中, 和html处于同一个文件中 ,样式书写在 style 标签中。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            background-color: red;
        }
</style>
</head>
<body>
    <div>顶顶顶</div>
</body>
</html>


外链式

将css单独存为.css文件,然后使用 <link> 标签引入它。

创建一个css文件取名css.css

body {
    background-color: yellow;
}


然后在用到的html文件中引用, 多个html文件可以引用同一个css样式文件,以达到文件的复用

<!--rel 表示和引入的文件的关系, stylesheet 表示样式表, href 文件的路径-->
<link rel="stylesheet" href="css/css.css">


行内式

样式写在HTML标签的style属性内,这样样式只能作用在此标签上,常用于微调此标签的样式

<div style="color:white">
    heihei 
</div>

导入式

导入式,在style标签中 使用 @import 语法进行导入,不常用, 使用导入式, 不会等待 css加载完毕, 网页会先加载html结构,所以css的样式渲染会延迟。


body {
    background-color: yellow;
}


<style>
        @import url('css/css.css');
</style>


CSS书写基本语法

家好,我是皮皮。

前言

对于前端来说,HTML 都是最基础的内容。

今天,我们来了解一下 HTML 和网页有什么关系,以及与 DOM 有什么不同。通过本讲内容,你将掌握浏览器是怎么处理 HTML 内容的,以及在这个过程中我们可以进行怎样的处理来提升网页的性能,从而提升用户的体验。


一、浏览器页面加载过程

不知你是否有过这样的体验:当打开某个浏览器的时候,发现一直在转圈,或者等了好长时间才打开页面……

此时的你,会选择关掉页面还是耐心等待呢?

这一现象,除了网络不稳定、网速过慢等原因,大多数都是由于页面设计不合理导致加载时间过长导致的。

我们都知道,页面是用 HTML/CSS/JavaScript 来编写的。

  • HTML 的职责在于告知浏览器如何组织页面,以及搭建页面的基本结构;
  • CSS 用来装饰 HTML,让我们的页面更好看;
  • JavaScript 则可以丰富页面功能,使静态页面动起来。

HTML由一系列的元素组成,通常称为HTML元素。HTML 元素通常被用来定义一个网页结构,基本上所有网页都是这样的 HTML 结构:

<html>
    <head></head>
    <body></body>
</html>

其中:

  • html元素是页面的根元素,它描述完整的网页;
  • head元素包含了我们想包含在 HTML 页面中,但不希望显示在网页里的内容;
  • body元素包含了我们访问页面时所有显示在页面上的内容,是用户最终能看到的内容;


HTML 中的元素特别多,其中还包括可用于 Web Components 的自定义元素。

前面我们提到页面 HTML 结构不合理可能会导致页面响应慢,这个过程很多时候体现在<script><style>元素的设计上,它们会影响页面加载过程中对 Javascript 和 CSS 代码的处理。

因此,如果想要提升页面的加载速度,就需要了解浏览器页面的加载过程是怎样的,从根本上来解决问题。

浏览器在加载页面的时候会用到 GUI 渲染线程和 JavaScript 引擎线程(更详细的浏览器加载和渲染机制将在第 7 讲中介绍)。其中,GUI 渲染线程负责渲染浏览器界面 HTML 元素,JavaScript 引擎线程主要负责处理 JavaScript 脚本程序。

由于 JavaScript 在执行过程中还可能会改动界面结构和样式,因此它们之间被设计为互斥的关系。也就是说,当 JavaScript 引擎执行时,GUI 线程会被挂起。

以网易云课堂官网为例,我们来看看网页加载流程。

(1)当我们打开官网的时候,浏览器会从服务器中获取到 HTML 内容。

(2)浏览器获取到 HTML 内容后,就开始从上到下解析 HTML 的元素。

(3)<head>元素内容会先被解析,此时浏览器还没开始渲染页面。

我们看到<head>元素里有用于描述页面元数据的<meta>元素,还有一些<link>元素涉及外部资源(如图片、CSS 样式等),此时浏览器会去获取这些外部资源。除此之外,我们还能看到<head>元素中还包含着不少的<script>元素,这些<script>元素通过src属性指向外部资源。

(4)当浏览器解析到这里时(步骤 3),会暂停解析并下载 JavaScript 脚本。

(5)当 JavaScript 脚本下载完成后,浏览器的控制权转交给 JavaScript 引擎。当脚本执行完成后,控制权会交回给渲染引擎,渲染引擎继续往下解析 HTML 页面。

(6)此时<body>元素内容开始被解析,浏览器开始渲染页面。

在这个过程中,我们看到<head>中放置的<script>元素会阻塞页面的渲染过程:把 JavaScript 放在<head>里,意味着必须把所有 JavaScript 代码都下载、解析和解释完成后,才能开始渲染页面。

到这里,我们就明白了:如果外部脚本加载时间很长(比如一直无法完成下载),就会造成网页长时间失去响应,浏览器就会呈现“假死”状态,用户体验会变得很糟糕。

因此,对于对性能要求较高、需要快速将内容呈现给用户的网页,常常会将 JavaScript 脚本放在<body>的最后面。这样可以避免资源阻塞,页面得以迅速展示。我们还可以使用defer/async/preload等属性来标记<script>标签,来控制 JavaScript 的加载顺序。

百度首页

三、DOM 解析

对于百度这样的搜索引擎来说,必须要在最短的时间内提供到可用的服务给用户,其中就包括搜索框的显示及可交互,除此之外的内容优先级会相对较低。

浏览器在渲染页面的过程需要解析 HTML、CSS 以得到 DOM 树和 CSS 规则树,它们结合后才生成最终的渲染树并渲染。因此,我们还常常将 CSS 放在<head>里,可用来避免浏览器渲染的重复计算。


二、HTML 与 DOM 有什么不同

我们知道<p>是 HTML 元素,但又常常将<p>这样一个元素称为 DOM 节点,那么 HTML 和 DOM 到底有什么不一样呢?

根据 MDN 官方描述:文档对象模型(DOM)是 HTML 和 XML 文档的编程接口。

也就是说,DOM 是用来操作和描述 HTML 文档的接口。如果说浏览器用 HTML 来描述网页的结构并渲染,那么使用 DOM 则可以获取网页的结构并进行操作。一般来说,我们使用 JavaScript 来操作 DOM 接口,从而实现页面的动态变化,以及用户的交互操作。

在开发过程中,常常用对象的方式来描述某一类事物,用特定的结构集合来描述某些事物的集合。DOM 也一样,它将 HTML 文档解析成一个由 DOM 节点以及包含属性和方法的相关对象组成的结构集合。


三、DOM 解析

我们常见的 HTML 元素,在浏览器中会被解析成节点。比如下面这样的 HTML 内容:

<html>
    <head>
        <title>标题</title>
    </head>
    <body>
        <a href='xx.com'>我的超链接</a>
        <h1>页面第一标题</h1>
    </body>
</html>

打开控制台 Elements 面板,可以看到这样的 HTML 结构,如下图所示:

在浏览器中,上面的 HTML 会被解析成这样的 DOM 树,如下图所示:


我们都知道,对于树状结构来说,常常使用parent/child/sibling等方式来描述各个节点之间的关系,对于 DOM 树也不例外。

举个例子,我们常常会对页面功能进行抽象,并封装成组件。但不管怎么进行整理,页面最终依然是基于 DOM 的树状结构,因此组件也是呈树状结构,组件间的关系也同样可以使用parent/child/sibling这样的方式来描述。同时,现在大多数应用程序同样以root为根节点展开,我们进行状态管理、数据管理也常常会呈现出树状结构。


四、事件委托

我们知道,浏览器中各个元素从页面中接收事件的顺序包括事件捕获阶段、目标阶段、事件冒泡阶段。其中,基于事件冒泡机制,我们可以实现将子元素的事件委托给父级元素来进行处理,这便是事件委托。

如果我们在每个元素上都进行监听的话,则需要绑定三个事件;(假设页面上有a,b,c三个兄弟节点)

function clickEventFunction(e) {
  console.log(e.target===this); // logs `true`
  // 这里可以用 this 获取当前元素
}
// 元素a,b,c绑定
element2.addEventListener("click", clickEventFunction, false);
element5.addEventListener("click", clickEventFunction, false);
element8.addEventListener("click", clickEventFunction, false);

使用事件委托,可以通过将事件添加到它们的父节点,而将事件委托给父节点来触发处理函数:

function clickEventFunction(event) {
  console.log(e.target===this); // logs `false`
  // 获取被点击的元素
  const eventTarget=event.target;
  // 检查源元素`event.target`是否符合预期
  // 此处控制广告面板的展示内容
}
// 元素1绑定
element1.addEventListener("click", clickEventFunction, false);

这样能解决什么问题呢?

  • 绑定子元素会绑定很多次的事件,而绑定父元素只需要一次绑定。
  • 将事件委托给父节点,这样我们对子元素的增加和删除、移动等,都不需要重新进行事件绑定。

常见的使用方式主要是上述这种列表结构,每个选项都可以进行编辑、删除、添加标签等功能,而把事件委托给父元素,不管我们新增、删除、更新选项,都不需要手动去绑定和移除事件。

如果在列表数量内容较大的时候,对成千上万节点进行事件监听,也是不小的性能消耗。使用事件委托的方式,我们可以大量减少浏览器对元素的监听,也是在前端性能优化中比较简单和基础的一个做法。

注意:

  1. 如果我们直接在document.body上进行事件委托,可能会带来额外的问题;
  2. 由于浏览器在进行页面渲染的时候会有合成的步骤,合成的过程会先将页面分成不同的合成层,而用户与浏览器进行交互的时候需要接收事件。此时,浏览器会将页面上具有事件处理程序的区域进行标记,被标记的区域会与主线程进行通信。
  3. 如果我们document.body上被绑定了事件,这时候整个页面都会被标记;
  4. 即使我们的页面不关心某些部分的用户交互,合成器线程也必须与主线程进行通信,并在每次事件发生时进行等待。这种情况,我们可以使用passive: true选项来解决


五、总结

我们了解了 HTML 的作用,以及它是如何影响浏览器中页面的加载过程的,同时还介绍了使用 DOM 接口来控制 HTML 的展示和功能逻辑。我们了解了DOM解析事件委托等相关概念。

、系统结构:

① B/S架构:Browser/Server(浏览器/服务器的交互形式。)

  • Browser支持的语言:HTML、CSS、JavaScript;S是服务器端Server支持的语言有:C、C++、Java等
  • B/S架构系统有什么优点和缺点? 优点:升级方便,只升级服务器代码即可,维护成本低。缺点:速度慢、体验不好、界面不炫酷
  • 企业大部分使用B/S架构
  • B/S架构的系统代表有:京东、百度、天猫等

② C/S架构:Client/Server(客户端/服务器的交互形式。)

  • C/S架构的优点和缺点?
  • 优点:速度快、体验好、界面炫酷(娱乐性多数是C/S架构)
  • 缺点:升级麻烦、维护成本较高。
  • C/S架构的系统代表有:QQ、微信、支付宝等

2、 HTML概述

① 什么是HTML?② 怎么开发HTML?③ 怎么运行HTML?

  • ① HTML:Hyper Text Markup Language(超文本标记语言)

?由大量的标签组成,每一个标签都有开始标签和结束标签。

?超文本:图片、声音、视频等

  • ② HTML开发使用普通的文本编辑器就行,创建扩展名是.html或.htm

?编辑器有:HBuilder、vscode等

③ 直接采用浏览器打开HTML文件就能运行

④ HTML是谁制定的?

  • ④ W3C:世界万维网联盟

?W3C制定了HTML的规范:每个浏览器生产厂家都会遵守规范。HTML也会按照规范去写代码

?HTML规范目前最高的版本是:HTML5.0,简称H5

?我们现在主要学的HTML4.0(基本用法)

  • 为了方便中国Web前端程序员开发,提供了大量帮助文档。为开发提供方便。

?w3school:先出现的,和W3C无关

?w3cschool:后出现的,和W3C无关

?W3C制定了很多规范:HTML/XML/http协议/https协议……

3、 第一个HTML

4、基本标签

  • p:段落标记
  • h1~h6:标题字,与word的标题字相同
  • br:换行标记(独目标记)
  • hr:横线(独目标记)
  • color:横线颜色
  • width:横线宽度(可以px和%)
  • pre:预留格式
  • del:删除字
  • ins:插入字(有下划线)
  • b:粗体字
  • i:斜体字
  • sup:上标
  • sub:下标
  • font:字体标签
  • color:字体颜色
  • size:字体大小(1~7)

页面效果图:

5、实体符号:为了避免和标签冲突,所以需要使用实体符号

  • <:<
  • >:>
  • 空格:
  • 注:html中按多个空格键,在网页中只显示一个空格

6、HTML表格

  • table:表格
  • tr:行
  • td:列
  • th:列(比td加粗居中)
  • 合并行:rowspan(一个格占两个位置)
  • 注:row合并的时候,删除下面的单元格
  • 合并列:colspan(一个格占两个位置)
  • 注:col合并的时候,删除哪个没有要求

7、thead、tbody、tfoot标签

  • thead、tbody、tfoot不是必须的,便于后期JS编写。

8、body的背景颜色和背景图片

  • bgcolor:背景色
  • background:背景图片
  • 背景图片在背景色的上面

9、img标签

  • src:图片的路径
  • 只设置width,height会等比例缩放
  • 只设置height,不起作用
  • title:鼠标悬停时显示的信息
  • alt:设置图片加载失败时显示的提示信息

10、 超链接或热链接

  • href:hot references 热引用;
  • 后面一定是一个资源的地址。
  • 后面的路径可以是绝对路径也可以是相对路径,可以是网络某个资源的路径。
  • target:
  • _blank:新窗口
  • _self:当前窗口(默认)
  • _top:顶级窗口
  • _parent:父级窗口

超链接的作用:

通过超链接可以从浏览器向服务器发送请求。

11、request与response的概念

  • request:浏览器向服务器发送数据(请求)
  • B --》S
  • response:服务器向浏览器发送数据(响应)
  • S--》B

12、列表

  • 有序列表:ol
  • type:1、A、a、I、i
  • 无序列表:ul
  • type:circle(○)、square(□)、disc(●)

13、表单(重点)

  • action:写提交的URL地址
  • method:默认get;还有post
  • 表单有什么用?
  • 答:收集用户的信息。表单展现之后,用户填写表单,点击提交。 (submit)
  • 怎么画一个表单?
  • 答:用form标签
  • 一个网页可以有多个表单form
  • 表单最终是需要提交数据给服务器的,form标签有一个action属性,这个属性用来指定服务器地址。
  • action属性用来指定数据提交给哪个服务器
  • action属性和超链接中的href属性一样。都可以向服务器发送请求(request)
  • http://192.168.111.3:8080/oa/save 这是请求路径,
  • 表单提交数据最终提交给192.168.111.3机器上的8080端口对应的软件。
  • input中的type取值:
  • radio:单选控件
  • checkbox:多选控件
  • submit:提交控件
  • reset:重置控件
  • button:普通控件
  • text:文本控件
  • password:密码控
  • file:文件控件
  • 上传文件专用
  • hidden:隐藏域
  • 网页上看不到,但是表单提交的时候数据会自动提交给服务器。
  • input中的value属性用来指定按钮上显示的文本信息。
  • 超链接a与表单form的区别?
  • 答:表达form可以收集信息,而超链接a无法收集信息。
  • 表单提交里面的按钮input中属性必须定义name,不然提交不了。
  • 表单是以什么格式提交数据给服务器的?
  • 格式:action?name=value&name=value&name=value..
  • HTTP协议规定的,必须以这种格式提交给服务器
  • java中String split('&');
  • 重点强调:表单项写了name属性的,一律会提交给服务器。不想提交就不要写name属性。
  • 文本框和密码框的value不需要程序员指定,用户输入什么value就是什么。
  • 当name没有写的时候,该项不会提交给服务器
  • 但是当value没有写的时候,value的默认值是空字符串"",将空字符串提交给服务器。java代码得到的是:String s="";

效果图:

地址栏提交的信息:

?username=abc&userpassowrd=1234&sex=1&aihao=study&aihao=dream&myText=我没有value属性;&position=ln&myFile=&myHidden=

14、表单的说明:

  • ① 用户手动输入的文本框,都不需要给value赋值
  • ② textarea没有value属性
  • ③ radio、checkbox默认选项需要使用,checked="checked"(简写:checked)
  • ④ select中的option属性:? selected="selected" 为默认选中 ?size:显示条目数量
  • multiple="multiple" 支持多选(select的属性)
  • ⑤ input的属性
  • readonly和disabled:
  • 都是只读不能修改
  • 数据不会提交
  • maxlength:设置文本框中输入的字符数量。

15、HTML中的结点

  • 在HTML文档中,任何元素(结点)都有id属性,id属性是该节点的唯一标识。所以在同一个HTML文档中id值不能重复。
  • 注意:表单提交数据的时候,只和name有关系,和id无关
  • id有什么作用?
  • javascript语言:可以对HTML文档中的任何节点进行增删改操作。
  • 获取节点时,通常通过id来获取节点
  • HTML文档是一棵树,树上有很多节点,每一个节点都有唯一的id(DOM树)

16、div和span

  • div和span有什么用?
  • div和span都可以称为图层。
  • 有什么用?
  • 图层的作用为了保证页面可以灵活的布局。
  • div和span是可以定位的,只要定下div的左上角的x轴和y轴坐标即可。
  • div和span的区别?
  • di独占一行
  • span不会独占一行