整合营销服务商

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

免费咨询热线:

css初识

、初识CSS3

本章目标:

  • 会使用行内样式、内部样式表和外部样式表三种方式为HTML5文档添加CSS样式
  • 会使用CSS3的基本选择器设置字体大小和颜色
  • 会使用复合选择器为特定的网页元素添加CSS样式
  • 会使用CSS3高级选择器为网页元素添加CSS样式

1.1、什么是CSS

Cascading Style Sheet 级联样式表。 表现HTML或XHTML文件样式的计算机语言。 包括对字体、颜色、边距、高度、宽度、背景图片、网页定位等设定

在这里插入图片描述

说明:

  • 首先介绍什么是CSS
  • 然后对比讲解使用CSS和没有使用CSS的两个相同的HTML代码页面显示效果,说明CSS的重要性
  • 最后根据图说明CSS在网页中的应用

1.2、CSS的发展史

在这里插入图片描述


CSS1.0 读者可以从其他地方去使用自己喜欢的设计样式去继承性地使用样式;

CSS2.0 融入了DIV+CSS的概念,提出了HTML结构与CSS样式表的分离

CSS2.1 融入了更多高级的用法,如浮动,定位等。

CSS3.0 它包括了CSS2.1下的所有功能,是目前最新的版本,它向着模块化的趋势发展,又加了很多使用的新技术,如字体、多背景、圆角、阴影、动画等高级属性,但是它需要高级浏览器的支持。

由于现在IE 6、IE 7使用比例已经很少,对市场企业进行调研发现使用CSS3的频率大幅增加,学习CSS3已经成为一种趋势,因此本书会讲解最新的CSS3版本

本课程中主要讲解css2.1和css3

CSS的优势


  • 内容与表现分离
  • 网页的表现统一,容易修改
  • 丰富的样式,使得页面布局更加灵活
  • 减少网页的代码量,增加网页的浏览速度,节省网络带宽
  • 运用独立于页面的CSS,有利于网页被搜索引擎收录

1.3、CSS的基本语法

  • 首先讲解CSS的基本语法结构,由选择器和声明构成
  • 然后对照具体的样式详细讲解语法,强调声明必须在 { }
  • 最后说明基本W3C的规范,每条声明后的 ; 都要写上

在这里插入图片描述

Style标签

  • 讲解CSS样式如何在HTML中应用,引入style标签的应用
  • 讲解style标签,说明type=“text/css的用法
  • 说明style标签在HTML文档中的位置,在与之间

在这里插入图片描述

1.4、引入CSS方式

  • 行内样式 使用style属性引入CSS样式 <h1 style="color:red;">style属性的应用</h1> <p style="font-size:14px; color:green;">直接在HTML标签中设置的样式</p> 使用style属性设置CSS样式仅对当前的HTML标签起作为,并且是写在HTML标签中的 这种方式不能起到内容与表现相分离,本质上没有体现出CSS的优势,因此不推荐使用。
  • 内部样式表 CSS代码写在 <head><style> 标签中 <style> h1{color: green; } </style> 优点:方便在同页面中修改样式 缺点:不利于在多页面间共享复用代码及维护,对内容与样式的分离也不够彻底 引出外部样式表
  • 外部样式表 CSS代码保存在扩展名为.css的样式表中 HTML文件引用扩展名为.css的样式表,有两种方式
  • 链接式(使用的最多,记住这个就可以了) 使用 标签链接外部样式表,并讲解各参数的含义, 标签必须放在 标签中

在这里插入图片描述


  • 导入式 使用@import导入外部样式表

在这里插入图片描述



链接式与导入式的区别

  1. 标签是属于XHTML范畴的,@import是属于CSS2.1中特有的。
  2. 使用 链接的CSS是客户端浏览网页时先将外部CSS文件加载到网页当中,然后再进行编译显示,所以这种情况下显示出来的网页与用户预期的效果一样,即使网速再慢也一样的效果。
  3. 使用@import导入的CSS文件,客户端在浏览网页时是先将HTML结构呈现出来,再把外部CSS文件加载到网页当中,当然最终的效果也与使用 链接文件效果一样,只是当网速较慢时会先显示没有CSS统一布局的HTML网页,这样就会给用户很不好的感觉。这个也是现在目前大多少网站采用链接外部样式表的主要原因。
  4. 由于@import是属于CSS2.1中特有的,因此对于不兼容CSS2.1的浏览器来说就是无效的。

CSS样式优先级

行内样式>内部样式表>外部样式表
就近原则:越接近标签的样式优先级越高

【学员练习】 使用标题标签和段落标签制作李白的诗《望庐山瀑布》,诗正文字体颜色为绿色,字体大小为14p

在这里插入图片描述

1.5、CSS基本选择器

  • 标签选择器 HTML标签作为标签选择器的名称 <h1>…<h6>、<p>、<img/>

在这里插入图片描述

  • 类选择器 一些特殊的实现效果,单纯使用标签选择器不能实现,从而引出类选择器

在这里插入图片描述

  • ID选择器 ID选择器的名称就是HTML中标签的ID名称,ID全局唯一

在这里插入图片描述


小结

  • 标签选择器直接应用于HTML标签
  • 类选择器可在页面中多次使用
  • ID选择器在同一个页面中只能使用一次

基本选择器的优先级

ID选择器>类选择器>标签选择

标签选择器是否也遵循“就近原则”? 不遵循,无论是哪种方式引入CSS样式,一般都遵循ID选择器 > class类选择器 > 标签选择器的优先级

1.6、CSS高级选择器

1、层次选择器

在这里插入图片描述

  • 后代选择器 body p{ background: red; }

在这里插入图片描述

后代选择器两个选择符之间必须要以空格隔开,中间不能有任何其他的符号插入

  • 子选择器 body>p{ background: pink; }

在这里插入图片描述


  • 相邻兄弟选择器 .active+p { background: green; }

在这里插入图片描述


  • 通用兄弟选择器 .active~p{ background: yellow; }

添加图片注释,不超过 140 字(可选)

者通过实践来阐述HTML 优先原则的主要目标是扩大能够从事 Web 软件编程工作的人员范围。

原文链接:https://html-first.com/

未经允许,禁止转载!


作者 | Tony Ennis 译者 | 弯月
责编 | 夏萌
出品 | CSDN(ID:CSDNnews)

HTML优先是一组原则,旨在通过以下方式使构建 Web 软件更容易、更快、更具包容性且更易于维护:

  1. 利用现代网络浏览器的默认功能。

  2. 利用 HTML 属性语法的极致简单性。

  3. 利用 Web 的查看源代码功能。

目标

HTML优先原则的主要目标是扩大能够从事 Web 软件编程工作的人员范围。从个人角度来看,这是件好事,因为这可以让更多的人成为Web 程序员,构建出色的 Web 软件,并提高他们的收入。从业务角度来看,这些原则也有好处,因为这可以降低构建软件的成本,并减少招聘所需的资源量(众所周知,这是一个资源密集型流程)。

HTML优先原则的第二大目标是让构建 Web 软件的工作变得更加愉快和无缝。对于大多数 Web 程序员来说,在快速构建产品期间能够流畅地在文本编辑器和浏览器之间来回切换,而不会遇到各种磕磕绊绊,也不需要切换上下文,他们会感到非常兴奋。但如今程序员需要几年的时间来掌握工具和框架才能达到这个阶段。HTML 优先原则能够让人们在学习编程的早期阶段体会这种感觉,并达到这种水平。

为了实现这些目标,首先必须承认 HTML 非常容易理解,因此我们将 HTML 作为产品的基石,不仅用 HTML 来定义内容和结构,还用它来设置样式和行为。

原则

1. 推荐使用 HTML 原生的方法。

2. 使用 HTML 属性来设置样式和行为。

3. 使用利用了 HTML属性的库。

4. 避开构建过程。

5. 推荐使用“裸” HTML。

6. 保留查看源代码的功能。

1.使用 HTML 原有的方法通过外部框架实现所需的功能

浏览器支持的开箱即用的功能范围很广,而且数量还在不断增长。在将库或框架添加到代码库之前,请检查是否可以使用原汁原味的 html/css 来实现它。

鼓励的写法:

不鼓励的写法:

2.如有可能,默认使用内联 HTML 属性定义样式和行为

我们可以使用 Tailwind 或 Tachyons等 SPC 库来实现样式。同时使用 hyperscript、Alpine 或类似的库来实现行为。这意味着很多功能都需要使用 HTML 来实现。但这也意味着其他开发人员更容易找到和理解行为、浏览并修改它们。

鼓励的写法:

不鼓励的写法:

你可能会注意到,这种方法似乎违反了关注点分离——备受吹捧的软件设计原则之一。我们认为,非黑即白的关注点分离原则是有缺陷的,因此我们提倡采用一种考虑到行为局部性以及两者之间权衡的方法。

3.如果需要库,请使用利用 html 属性的库,不推荐使用围绕 JavaScript 或自定义语法构建的库

鼓励的写法:

不鼓励的写法:

4.避开构建过程

需要将文件从一种格式转换为另一种格式的库会导致维护开销增加大量,严重影响查看源代码的功能或导致其无法使用,而且通常开发人员需要学习新工具才能使用它们。现代浏览器已不再有当初引入这些实践时的性能限制。如果我们使用 HTML 优先的库(例如 static tailwind 或 htmx),则额外所需的 CSS 和JS 量为最少。

鼓励的写法:

不鼓励的写法:

5.推荐使用“裸” HTML,不推荐编译为 HTML的各个混乱层

这条原则适用于后端实现。基本思想是可读性。熟悉 HTML 但不熟悉后端框架的开发人员查看视图文件,仍然应该能够理解 90% 以上的内容。如上所述,这意味着牺牲简洁性而换取易于理解性。

鼓励的写法:

不鼓励的写法:

6.如有可能,保留右键单击查看源代码的功能

早期网络的美妙之处在于,我们总能 "窥探 "到网页任何部分的代码。对于有抱负的开发人员来说,这是一项福利,因为这为我们在理论(阅读代码如何工作)和实践之间架起了一座桥梁,将代码和界面并排展示在我们眼前。对于许多网站来说,我们只需复制并粘贴 html 或 css,然后放到自己的网站上运行,就可以获得近乎相同的复制品。新旧代码的混合不仅是一种学习方式,而且往往也是我们创作新作品的基础。

后来,业界采用了一些 "改进 "方法,导致这种做法变得更为罕见。例如,如果我们使用流行的前端框架 React,就不能点击 "查看源代码",复制代码并重新混合,因为首先 React 有构建过程,这意味着我们在开发人员工具中看到的代码与开发人员编写的代码不同;其次,React 代码片段必须封装在 react 应用程序中才能工作。

遵循 HTML 优先原则的网站能够重新获得查看源代码的功能。事实上,HTML 优先的网站往往更进一步。因为如果使用 HTML 属性定义用户界面交互,那么在复制粘贴到新的代码库时,也可以保留这些交互(前提是目标文件包含相同的 js 库)。我们打算将来将其扩展到 HTML 优先的代码片段库。

总结

本文中描述的实践和原则在整个行业中仍然很小众,而且使用的社区也很少。我希望通过建设网站(https://html-first.com/)的方式来寻找同道合的人,共同探讨并完善这些想法。

至如今,TypeScript逐渐成为各个公司维护前端项目的方案之一,它的作用很直接——规范,提高代码质量,降低维护成本,延长项目的生命周期。

TypeScript 是由 Microsoft 开发的开源语言,它是 JavaScript 的一种超集。通俗来讲, TypeScript 包含了 JavaScript 的所有功能,并在此基础上添加了更多的特性。

随着TypeScript的普及,面试被提问到TypeScript的几率越来越大,最常见的问题就是介绍下TypeScript的特点,本篇文章将带大家了解TypeScript的使用,明白TypeScript和JavaScript的区别。

一、基本使用

1. 下载TypeScript

npm install typescript -g

2. 使用TypeScript

  • 使用tsc指令,将ts文件编译成js文件

我们使用的是编译后的js文件,ts文件无法直接使用。

tsc index.ts // -> index.js

我们可以对比编译前后的文件内容:

  • 我们也可以使用code runner (vscode) 插件直接运行ts文件中的代码

需要借助ts-node这个包运行ts文件,否则无法识别运行。

npm install ts-node -g

看看coderunner的效果:

同学们可以通过第一种方式生成js文件,然后在html文件中引入,也可以通过第二种方式直接运行ts文件,查看运行结果。

注:对打包了解的同学,可以通过webpack/rollup等工具简易地搭建一个自动编译的项目,释放双手。

二、TypeScript的特性

1. 强类型语法

JavaScript属于弱类型语言,我们在进行变量操作的时候,可以进行任何类型的赋值。

var num = 1 // typeof num == 'number'

num = '1' // typeof num == 'string'

与JavaScript不同,TypeScript在对变量进行声明时必须声明变量的类型。

var num : number = 1

num为number类型的变量,那后续的操作中,则不能对num进行其他类型数据的赋值

num = '1' // 不能将类型“string”分配给类型“number”

强类型的意义:安全,严谨的代码编写

假如我创建了num变量是用于计数的number类型,那后续的操作中,num变量就不允许被更改为其他类型的数据,防止相关功能因为num变量不是一个数值导致出错的情况。

2.静态类型检查(编译时的错误提示)

TypeScript 提供了静态类型系统,可以在编译时发现类型错误,从而避免运行时的错误。

对熟用JavaScript的同学们来讲,这一点不难理解,JavaScript是一种解释型语言,我们只有在运行时才能发现代码是否有错误,例如:

var num = 1

num.toLowerCase()//a.tolowerCase is not num function

具体的报错,是代码在浏览器运行时才能看到:

有些同学下意识的反应就是:“谁看不出来这是一个数值,肯定没有字符串的方法,没人会写这种报错代码。”

这个想法没错,但是在工作中,也肯定没有人只会写这两行代码,一个变量的定义,从起初的几行代码,经过维护人员的变更,功能的扩展,会让这个变量功能性变得"不稳定“

结合强类型的特性,我们在书写代码时就能看到ts为我们带来的友好提示

var num : number = 1

num.toLowerCase()

//类型“number”上不存在属性“toLowerCase”。ts(2339)

看看实际的提示效果:D

是不是很棒,我们在书写代码的时候,就能避免许多意料之外的隐患,例如你的前任在某个偏僻的角落定义的同名变量(哀)。

3. 自动推导

TypeScript 具备类型的自动推导功能,我们在书写代码时如果没有对目标进行类型定义,则默认使用ts推导出的类型。

var num = 1 // => var num : number = 1

像这段代码,即使我们没有定义变量num的类型,TS也会将初始化赋值的数值类型(number)作为变量num的类型。

在后续对num变量的操作中,TS则将num变量作为一个number类型的数据进行检测。

Typescript根据上下文语境对目标进行自动推导的特性,大幅度地减轻了使用者的工作成本,官方不希望用户在大量且重复的类型定义上浪费时间,而是根据功能结构去进行类型设计。

但有一点需要注意,Typescript的自动推导并不参与用户的复杂逻辑检测,我们可以通过一个函数重载的案例进行简单区分(不清楚的同学可以在本系列文章中学到函数重载再回头复习):

function fn(num : number ) : number

function fn(num : string ) : string

function fn(num : number | string) : string | number {

if(typeof num == 'string') return 1

return 1

}

const a = fn('1') // a的类型为string

在这个简单的案例上就有一系列重复出现的疑问:

同学:"我这里返回值似乎是number类型,a变量的提示却是string?"

我:"从代码逻辑上看,你设定了一个重载列表,当函数参数类型为string时,返回值就是string类型,没问题。但这个案例上的代码,a变量实际数据确实是number类型,错的没毛病"。

同学:"错的没毛病?Typescript的检测出错了吗?还是我写错了?"

我:"Typescript的自动推导并不参与用户的复杂逻辑检测,实际上确实是你逻辑有问题导致这种现象。"

这个问题,我拿去反问一些工作中常写Typescript的同学,也有不少有出现错愕的反应。

简单来说,面对函数重载,Typescript在检测时只会确定你的重载列表的设定,而不会去检查你在函数内部做了什么复杂的逻辑。

根据这三个特性的具体展现,我们可以对Typescript的优点进行总结及划分:

1. 类型安全:静态类型检查的特性让使用者在编写代码时就能检测到类型错误,不用在运行代码后才发现,提高代码的质量。

2. 工具支持:许多代码编辑器类似IDE、VScode、webStome等都支持Typescript,其中包括代码提示,自动补全,类型检查等,大幅度提高使用者的开发效率。

3. 可读性与可维护性:强类型语法的特点,以及我们在上文的静态类型检查中,能明确看到vscode在Typescript语法检查上的有效提示,根据类型的定义以及语法检查的提示,代码更容易阅读和理解,增加代码的可读性和可维护性。

4. 面向对象编程特性:Typescript支持类、接口、和抽象类等面向对象编程的特性,这些特性能让使用者更好地书写功能和管理代码(关于类的学习,同学们可以在本系列文章中继续深入)。

综合上述,我们在面试的过程中,可以先详细讲解Typescript的语言特点,静态检查,自动推导等特性细节,最后再总结它的优点。

总结

在文章中我们先了解TypeScript怎么使用,TypeScript需要通过编译器将ts文件编译成js文件,其中ts的相关语法都会被剔除,不影响js运行。

明白TypeScript和JavaScript的区别,知道TypeScript优势,比如强语言的安全性,书写检测的错误排查等,避免在面试中被问到两者区别又回答不出的尴尬情景。在后续文章中,我们再继续了解typescript的类型有哪些,泛型,接口等如何使用。