前端、HTML、CSS | 青训营笔记

122 阅读8分钟

前端、HTML、CSS | 青训营笔记

这是我参与「第四届青训营 」笔记创作活动的的第1天

一.前端

1.什么是前端:

  • 解决 GUI 人机交互问题
  • 跨终端
    • PC/移动浏览器
    • 客户端/小程序
    • VR/AR 等
  • Web 技术栈
  • 解决图形界面下人机交互问题

2.前端需要的技术栈:

3.需要关注的方面:

人机交互,功能满足用户需求,无障碍,页面美观,安全、性能、兼容性

拓展方面

二.HTML

HyperText(图片、标题、链接、表格) Markup Language(<h1>文章标题</h1>)

1.DOCTYPE:

HTML5中一种标准通用标记语言的文档类型声明,指定使用的渲染模式,

目的: 告诉浏览器(解析器)应该以什么样(html或xhtml)的文档类型定义来解析文档

2.DOM树

3.HTML语法:

  • 标签和属性不区分大小写
  • 空标签可以不闭合,比如input、meta
  • 属性值推荐用双引号包裹
  • 某些属性可以省略,比如required、readonly

4.h1-h6

5.列表标签

<h2>有序标签:</h2>
<ol>
    <li>a</li>
    <li>b</li>
</ol>
<h2>无序标签:</h2>
<ul>
    <li>a</li>
    <li>b</li>
</ul>
<h2>缩进标签</h2>
<dl>
    <dt>导演</dt>
    <dd>陈凯歌</dt>
    <dt>主演</dt>
    <dd>张国荣</dd>
    <dd>范冰冰</dd>
</dl>

6.链接

a标签

href:点击之后跳转的地址

target="_blank":target为窗口打开方式,_blank为新开页面

7.图片音频标签

1)图片标签

src:表示对资源的引用,它指向的内容会嵌入到当前标签所在的位置

<img

src="lf3-static.bytednsdoc.com/obj/eden-cn…

alt="Metal movable type"

width="400"

/>

2)音频视频标签

controls:展示默认播放界面

<audio

src="/assets/music.ogg"

controls

></audio>

<video

src="/assets/video.mp4"

controls

></video>

8.输入标签

输入:<input placeholder="请输入用户名">

滑块:<input type="range">

输入数字:<input type="number" min="1" max="10">

日期:<input type="date" min="2018-02-10">

文本框:<textarea>Hey</textarea>

效果:

9.选择标签

checkbox:多选

<p>

<label><input type="checkbox" />🍎</label>

<label><input type="checkbox" checked />🍏</label>

</p>

radio:只能选一个

<p>

<label><input type="radio" name="sport" />⚽</label>

<label><input type="radio" name="sport" />🏀</label>

</p>

下拉选择:

<p>

<select>

<option>🥑</option>

<option>🥩</option>

<option>🥓</option>

</select>

</p>

列表输入:

<input list="countries" />

<datalist id="countries">

<option>Greece</option>

<option>United Kingdom</option>

<option>United States</option>

</datalist>

10.文字展示标签

<pre>:预格式化

<code>:放代码的标签

<em>:突出显示的词

<strong>:含义上的强调

<\blockquote cite="[t.cn/RfjKO0F">

<p>天才并不是自生自长在深林荒野里的怪物, 是由可以使天才生长的民众产生、长育出来的,所以没有 这种民众,就没有天才。</p>

</blockquote>

<p>我最喜欢的一本书是<cite>小王子</cite>。</p>

<p>在<cite>第一章</cite>,我们讲过<q>字符串是不可变量</q>。</p>

<p><code>const</code>声明创建一个只读的常量。</p>

<pre><code>

const add = (a, b) => a + b;

const multiply = (a, b) => a * b;

</code></pre>

<p>在投资之前,<strong>一定要做风险评估</strong>。</p>

<p>Cats <em>are</em> cute animals.</p>

11.内容划分

12.语义化

  • HTML中的元素、属性及属性值都拥有某些含义
  • 开发者应该遵循语义来编写HTML
    • 有序列表用 ol;无序列表用 ul
    • lang 属性表示内容所使用的语言

好处:

  • 代码可读性
  • 可维护性
  • 搜索引擎优化
  • 提升无障碍性

使用者:
浏览器 - 展示页面
搜索引擎 - 提取关键词、排序
屏幕阅读器 - 给盲人读页面内容
开发者 - 修改、维护页面者\

三.了解CSS

1.css组成:

2.三种使用方式:

外链
<linkrel="stylesheet"href="/assets/style.css">
嵌入
<style>
li { margin: 0; list-style: none; }
p { margin: 1em0; }
</style>
内联
<pstyle="margin:1em 0">Example Content

3.工作原理:

4.选择器(Selector)

  • 找出页面中的元素,以便设置样式
  • 方式:
    • 标签名
    • 类名
    • id
    • 属性
    • 在dom树中位置

1)通配选择器:*{}

2)标签选择器:p{},h1{}

3)id选择器:设置id后,#id{}

4)类选择器:设置class属性,.class值{}

5)属性选择器:标签中的属性,[属性]{}

6)属性值选择器:例:① input[type="password"] { } ,② a[href^="#"] {}:^以什么开头,③ a[href=".jpg"]=".jpg"] {}:以什么结尾

4.伪类

不基于标签和属性定位元素

  • 状态性伪类:根据元素某一状态选中,指定样式
  • 结构性伪类:根据元素某一结构选中,指定样式

1)状态性伪类:

<\a href="example.com"> example.com</a>

<label>用户名:<\input type="text"/></label>

<style>

a:link {

 color: black;

}

a:visited {

 color: gray;

}

a:hover {

 color: orange;

}

a:active {

 color: red;

}

:focus {

 outline: 2px solid orange;

}

</style>

2)结构性伪类:

<ol>
<li>阿凡达</li>
<li>泰坦尼克号
<li>星球大战:原力觉醒</li>
<li>复仇者联盟 3</li>
<li>侏罗纪世界</li>
</ol>
<style>
li {
list-style-position: inside;
border-bottom: 1px solid;
padding: 0.5em
}
li:first-child {
color: coral
}
li:last-child {
border-bottom: none;
}
</style>

5.组合 (Combinators)

名称语法说明示例
直接组合AB满足A同时满足Binput:focus
后代组合A B选中B,如果它是A的子孙nav a
亲子组合A > B选中B,如果它是A的子元素section > p
兄弟选择器A ~ B选中B,如果它在A后且和A同级h2 ~ p
相邻选择器A + B选中B,如果它紧跟在A后面h2 + p

6.选择器组

标签:

body, h1, h2, h3, h4, h5, h6, ul, ol, li {

margin: 0;

padding: 0;

}

属性:

[type="checkbox"], [type="radio"] {

box-sizing: border-box;

padding: 0;

}

7.颜色

#00 00 00,rgb(0, 0, 0)

8.透明度(alpha )

越小越不透明

#ff0000ff,rgba(255, 0, 0, 1),hsla(0, 100%, 50%, 1)

9.字体 (font-family)

 h1 {

   font-family: Optima, Georgia, serif;

}

 body {

   font-family: Helvetica, sans-serif;

}

1)通用字体族:

注意:

-   英文字体放中文前
-   字体列表最后写上通用字体族

2)字体大小(font-size)

3)字体风格(font-style):指定斜体等

4)字重(font-weight):字体粗细

5)行高(line-height):字体行高

6)对齐方式(text-align): left center right justify

7)间距(spacing):letter-spacing(单词之间),word-spacing(字符之间)

8)文本装饰(text-decoration):none 、underline 、line-through 、overline

四.深入CSS

1.继承

某些属性会自动继承其父元素的计算值,除非显式指定一个值

1)初始值:

  • CSS 中,每个属性都有一个初始值
    • background-color 的初始值为 transparent
    • margin-left 的初始值为 0
  • 可以使用 initial 关键字显式重置为初始值
    • background-color: initial

2)求值过程:

2.布局

  • 确定内容的大小和位置的算法
  • 依据元素、容器、兄弟节点和内容等信息来计算

1)相关技术:

2)盒子模型:

①width:

  • 指定 content box 宽度
  • 取值为长度、百分数、auto
  • auto 由浏览器根据其它属性确定
  • 百分数相对于容器的 content box 宽度

②height

  • 指定 content box 高度
  • 取值为长度、百分数、auto
  • auto 取值由内容计算得来
  • 百分数相对于容器的 content box 高度
  • 容器有指定的高度时,百分数才生效

③padding:

  • 指定元素四个方向的内边距
  • 百分数相对于容器宽度

④border:

  • 指定容器边框样式、粗细和颜色

样式:

  • solid:实线
  • dashed:虚线
  • dotted:点状虚线
  • 三种属性
    • border-width
    • border-style
    • border-color
  • 四个方向
    • border-top
    • boder-right
    • border-bottom
    • border-left

例子:

border: 1px solid #ccc;

border-left: 1px solid #ccc;

border-right: 2px dotted red;

border-width: 1px 2px 3px 4px;

border-style: solid;

border-color: green blue;

border-left-width: 3px;

border-top-color: #f00;

⑤margin:

  • 指定元素四个方向的外边距
  • 取值可以是长度、百分数、auto
  • 百分数相对于容器宽度

margin:auto 水平居中

3.box-sizing: border-box

4.overflow

  • visible :显示
  • hidden:隐藏
  • scroll:滑块

5.块级 vs 行级

Block Level BoxInline Level Box
不和其它盒子并列摆放和其它行级盒子一起放在一行或拆开成多行
适用所有的盒模型属性盒模型中的width、height不适用
块级元素行级元素
生成块级盒子- 生成行级盒子 - 内容分散在多个行盒 (line box) 中
body、article、div、main、section、h1-6、p、ul、li 等span、em、strong、cite、code 等
display: blockdisplay: inline

6.display属性

block块级盒子
inline行级盒子
inline-block本身是行级,可以放在行盒中;可以设置宽高;作为一个整体不会被拆散成多行
none排版时完全被忽略

7.常规流 Normal Flow

  • 根元素、浮动和绝对定位的元素会脱离常规流
  • 其它元素都在常规流之内(in-flow)
  • 常规流中的盒子,在某种排版上下文中参与布局

8.行级排版上下文

  • Inline Formatting Context (IFC)
  • 只包含行级盒子的容器会创建一个IFC
  • IFC 内的排版规则
    • 盒子在一行内水平摆放
    • 一行放不下时,换行显示
    • text-align 决定一行内盒子的水平对齐
    • vertical-align 决定一个盒子在行内的垂直对齐
    • 避开浮动(float)元素*

9.块级排版上下文

  • Block Formatting Context (BFC)
  • 某些容器会创建一个BFC
    • 根元素
    • 浮动、绝对定位、inline-block
    • Flex子项和Grid子项
    • overflow 值不是 visible 的块盒
    • display: flow-root;

10.BFC 内的排版规则

  • 盒子从上到下摆放
  • 垂直 margin 合并
  • BFC 内盒子的 margin 不会与外面的合并
  • BFC 不会和浮动元素重叠

11.Flex Box

  • 一种新的排版上下文
  • 它可以控制子级盒子的:
    • 摆放的流向 ( → ← ↑ ↓ )
    • 摆放顺序
    • 盒子宽度和高度
    • 水平和垂直方向的对齐
    • 是否允许折行

12.Flex模式

flex-direction:

Flexibility

  • 可以设置子项的弹性:当容器有剩余空间时,会伸展;容器空间不够时,会收缩。
  • flex-grow 有剩余空间时的伸展能力
  • flex-shrink 容器空间不足时收缩的能力
  • flex-basis 没有伸展或收缩时的基础长度

13.Grid模式

14.浮动

float:left,靠左或靠右

15.position属性

static默认值,非定位元素
relative相对自身原本位置便宜,不脱离文档流
absolute绝对定位,相对非static祖先元素定位
fixed相对视口绝对定位

relative:

absolute:

标签组合 (Combinators)

名称语法说明示例
直接组合AB满足A同时满足Binput:focus
后代组合A B选中B,如果它是A的子孙nav a
亲子组合A > B选中B,如果它是A的子元素section > p
兄弟选择器A ~ B选中B,如果它在A后且和A同级h2 ~ p
相邻选择器A + B选中B,如果它紧跟在A后面h2 + p