Open suhao opened 2 years ago
超文本标记语言
超文本:使用html编写的文档,文件格式.html
HTML文档结构
文档类型
文档根元素
文档头部
文档主题
双标签与单标签
标题:h1~h6
段落:p
链接:a
图像:img
列表:ul+li,ol+li
表格:table+thead+tbody+tr+td
表单:form+label+input+button
框架:iframe
通用:div/span
容器:header/nav/main/article/section/footer
header
nav
main
article
section
aside
footer
设置HTML元素在文档中的布局和显示方式(外观)
元素属性: style="color: red"
元素标签:
外部资源:
样式规则:
选择器:标签选择器、类选择器
样式声明
样式选择器:
id选择器:id是唯一的,#id
class选择器:.class
标签选择器:p
优先级:标签<class<id<javascript
一切皆盒子,一切布局的基础,页面上的一切可见元素均可看作盒子。
盒子默认都是块级元素:独占一行,支持宽高设置。
盒子模型可以设置六个样式:宽高、背景、内外边距、边框
width:水平方向
height:垂直方向
background-color:背景,默认透明
margin:外边距,当前盒子与其他盒子之间的位置与关系,默认透明,只有宽高属性
border:边框,位于内外边距之间,是可见元素,不透明,除宽度外,还可以设置样式与前景色
padding:内边距,内容与边框之间的填充区域,默认透明,只有宽高属性
其中margin与padding的设置,属性按顺时针上右下左排列,可设方式为:上-右-下-左,上-左右-下,上下-左右,上下左右。
根据可见性可以分为两类:
可见:width,height,border
透明:background,padding,margin
id选择器:#id{...}
class选择器:.class{...}
标签选择器:标签{}
属性选择器:选择器[id=""]{...}
群组选择器:地位平等,同时设置多个选择器样式;选择器1,选择器2 {...}
相邻选择器:选择器+ {...},加号标识选中相邻,作为通配符,命中相邻的一个
兄弟选择器:相邻兄弟选择器,平级的所有元素;选择器~ * {....}
伪类选择器:使用冒号
子元素选择器:根据位置进行选择;选择器 空格 : first-child/last-child/nth-child/nth-last-child(元素索引,从1开始) {...}, 空格也可以改为具体的选择器;
类型选择器:选择器 类型: first-of-type/last-of-type/nth-of-type {...},只要选中类型,就要使用带有type的
关注点是位数,用nth-child
既关注位置,又关注类型,用nth-of-type
background-color:背景色,覆盖边框区域
background-image:背景图,url(image-path),默认会水平垂直重复
background-repeat:重复方向,no-repeat(不重复),repeat-x(水平重复),repeat-y
background-position:背景定位,left center,30px 50px,10% 20%
background-attachment:滚动方式,scroll,fixed(固定)
background-img:多背景图设置,css3新增
background-size:设置背景图尺寸,css3新增
background-clip:设置背景图绘制区域,css3新增
background:简写,顺序为:背景色 背景图 重复方向 背景定位 滚动方式
padding会撑大盒子
宽度分离:增加中间层
box-sizing:计算盒子宽高计算方式,改为边框+padding;box-sizing: border-box;content-box则恢复默认计算方式
同级塌陷:垂直方向同级排列时,上边盒子margin-bottom与下边盒子margin-top会重叠
嵌套传递:子元素的margin会向父元素传递;子元素的margin转为父元素的padding来解决
自动挤压:margin-left: auto,自动定位到右侧
浏览器交出页面布局的权限,交给用户,即将元素从文档流中脱离出来。脱离后必然是一个块,可以设置宽高等。
流动布局:又称文档流/标准流,元素排列顺序与元素在html文档中的编写顺序一致的,从上到下,从左往右
脱离文档流的手段:
浮动:将元素在水平方向上自由移动,垂直仍在文档流中
float:left,right;clear:both/left/right
浮动元素:让元素脱离文档流,在垂直方向仍然在文档流中,在水平方向可以向左右两边自由浮动
浮动元素对前面的元素无影响,只会影响后面的元素
浮动元素之间可以理解为在水平方向组成了一个文档流,按照规则进行排列
子元素(区块)与父级包含块(区块):
子元素浮动,父区块塌陷,高度丢失:浮动后脱离文档流,父区块无法再包裹住子元素
给父区块设置高度:可以但是pass,太不灵活
父区块跟着一块浮动:pass,需要很多级别均设置float
子元素同级增加一个元素:设置 clear: both父元素增加一个overflow,专用来清浮动:overflow:hidden
伪元素:老教材中有,pass
清空浮动以overflow来处理
定位:将元素在页面重新排列
静态定位:static,文档流定位,流动布局
相对定位:relative,元素仍在文档流
只是相对它原来的位置发生偏移
{position: relative; left:30px;right:20px}
后边元素依旧认为它在原来位置,然后进行后续布局
绝对定位:absolute,元素脱离文档流
参照物:相对于离他最近的,具有定位属性的父级元素进行定位;循环后的最顶级的参照物为body
{position: absolute; left:0;right:0}
固定定位:fixed,不在文档流中
参照物:始终相对于浏览器窗口进行定位,body/html
网页拆分为上中下(通用头部/底部+内容区),然后内容区拆分为左中右。
头部:链接+导航
底部:
主体的布局,常用方式是双飞翼布局、圣杯布局。
双飞翼布局:左右固定,中间自适应;优先展示中间,以提高渲染优先级
DOM结构
主体:放到wrap容器中实现宽度分离,以规避padding撑大盒子;默认大小由内容决定
左侧
右侧
圣杯布局:杯体+两个耳朵把手
主题:不需要wrap,盒子大小改为边框计算方式{box-sizing: border-box}
原生表格的DOM结构如下:
table:表格
caption:标题
thead:表头,tr+th
tbody:主体,tr+td
tfoot:页脚,tr+td
rowspan/colspan:合并单元格
CSS控制表格的样式:
box-shadow:阴影
tfoot尽量直接写在tbody中
hack方式的伪元素:通过css向页面添加元素
table:after {}
table:before {}
表格布局=>定位(position)=>浮动(float)=>弹性(flex)=>网格(Grid)
布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。
display
position
float
Flex 是 Flexible Box的缩写, 意思是"弹性布局", 用来为盒状模型提供最大的布局灵活性
任何一个容器都可以设置为Flex布局模式
Flex
/* 块元素可以设置为Flex容器 */ .container { display: flex; } /*内联元素也可以设置为Flex*/ span { display: inline-flex; } /* WebKit内核浏览器,如Safari, 需要加前缀*/ div { display: -webkit-flex; /*Safari*/ display: lfex; }
clear
vertical-align
Flex容器:简称容器,采用flex布局的元素
flex
Flex项目:简称项目
Flex容器中的所有成员(子元素)会自动成为该容器的成员,称为flex项目
flex项目
flex项目都支持宽高设置, 哪怕它之前是内联元素,类似于浮动元素
主轴:水平轴,横轴,x轴
main start: 起始位置
main start
main end: 结束位置
main end
main size: 单个项目占据的主轴空间
main size
交叉轴: 垂直轴,坚轴,y轴
cross start
cross end
cross size
order:定义项目排列顺序,索引越小越靠前,默认为0
flex-grow:定义项目的放大比例,默认为0不放大,即有剩余空间时也不放大项目
flex-shrink:项目缩小比例,默认为1,即如果空间不足,则自动缩小项目来填充
flex-basis:定义项目在主轴占据的空间,默认为auto,即项目原始大小
flex:是flex-grow,flex-shrink,flex-basis的简写,默认为0 1 auto,后两个属性可选
align-self:个性化定制某个项目的对齐方式,可以覆盖容器的aligin-items属性,默认为auto
Grid是第一个专门为解决布局问题而生的CSS模块
display: grid
grid-template-columns/grid-template-rows:设置行列大小
grid-column/grid-row:将它的子元素放入网格
Grid Container:网格容器,设置了display:grid的元素,是所有grid item的直接父项
display:grid
Grid Item:网格元素,容器的直接子元素,间接的子元素不是哦
Grid Line:网格线,分界线组成网格结构,可以是垂直的,也可以是水平的,并位于列或行的任意一侧
Grid Track:网格轨道,两个相邻网格线之间的空间,可以想象成网格的列或者行
Grid Cell:网格单元,两个相邻的行和相邻的列网格线之间的空间,是网格的一个单元
Grid Area:网格区域,四个网格线包围的总空间,网格区域可以由任意数量的网格单元组成
display:将元素定义为grid容器,并为其内容建立新的网格格式化上下文
grid:生成一个块级网格
inline-grid:生成一个行级网格
subgrid:如果容器本身就说一个grid项目(即嵌套网络),可以使用这个属性表示想从父节点获取它的行/列大小,而不是指定自己的大小
column/float/clear/vertical-align对容器没有影响
grid-template-columns/grid-template-rows:使用以空格分隔的多个值来定义网格的行和列,表示轨道的大小,空格代表网格线
grid-template-areas:通过引用grid-area属性指定的网格区域的名称来定义网格模板,重复网格区域的名称导致内容扩展到这些单元格。点号代表一个空单元格,提供了网格结构的可视化
grid-template:定义了grid-template-rows/columns/areas的简写
grid-column-gap/grid-row-gap:指定网格线的大小,即设置列/行之间的间距宽度
grid-gap:grid-row-gap和grid-column-gap的缩写
justify-items:沿着横轴对齐网格内的元素
align-items:沿着纵轴对齐
justify-content:网格的总大小可能小于容器的大小,如果所有项目都使用像素值这样的非弹性单位设置大小,则可能出现此种情况。此时可以设置网格容器内的网格的对齐方式,沿着横轴对齐网格
aligin-content:同上,验证纵轴对齐网格
grid-auto-columns/grid-auto-rows:指定自动生成的网格轨道(即隐式网格轨道)的大小。
grid-auto-flow:如果你存在没有显示指明放置在网格上的 grid item,则自动放置算法会自动放置这些项目。 而该属性则用于控制自动布局算法的工作方式。
grid:在单个属性中设置所有以下属性的简写:grid-template-rows,grid-template-columns,grid-template-areas,grid-auto-rows,grid-auto-columns和grid-auto-flow。 它同时也将 sets grid-column-gap 和 grid-row-gap 设置为它们的初始值,即使它们不能被此属性显示设置。
grid-column-start/grid-column-end/grid-row-start/grid-row-end:指定元素网格线的起始/终止位置
grid-column/grid-row:上述属性的简写
grid-area:给网格进行命名,也可以作为grid-row-start + grid-column-start + grid-row-end + grid-column-end 的简写形式
justify-self:沿着行轴对齐grid item 里的内容(与之对应的是 align-self, 即沿列轴对齐)。 此属性对单个网格项内的内容生效。
align-self:沿着列轴对齐grid item 里的内容(与之对应的是 justify-self, 即沿行轴对齐)。 此属性对单个网格项内的内容生效。
<!DOCTYPE html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="style.css"> <title>简单的三列布局</title> </head> <body> <header class="header">头部</header> <aside class="left">左边栏</aside> <main class="content">主体内容区</main> <aside class="right">右边栏</aside> <footer class="footer">底部</footer> </body> </html>
/* style.css */ body { /*设置body元素采用网格布局*/ display: grid; /*行模板: 第一行60px,第二行750px, 第三行60px*/ grid-template-rows: 60px 750px 60px; /*列模板: 第一列200px,第2列自动扩展, 第3列200px*/ grid-template-columns: 200px auto 200px; /*设置行间距:10px*/ grid-row-gap: 10px; /*设置列间距: 10px*/ grid-column-gap: 10px; } .header { /*网格区域命名*/ grid-area: my-header; /*参考背景色*/ background-color: lightgreen; } .footer { /*网格区域命名*/ grid-area: my-footer; /*参考背景色*/ background-color: lightgreen; } .left { /*网格区域命名*/ grid-area: my-left; /*参考背景色*/ background-color: lightblue; } .right { /*网格区域命名*/ grid-area: my-right; /*参考背景色*/ background-color: lightblue; } .content { /*网格区域命名*/ grid-area: my-content; /*参考背景色*/ background-color: coral; } /*设置网格区域: 非常直观*/ body { /*网格区域名称相同, 意味着合并*/ grid-template-areas: "my-header my-header my-header" "my-left my-content my-right" "my-footer my-footer my-footer" }
@media (max-width: 1050px) { }
HTML
超文本标记语言
超文本:使用html编写的文档,文件格式.html
HTML文档结构
文档类型
文档根元素
文档头部
文档主题
HTML元素,标签与属性
双标签与单标签
标题:h1~h6
段落:p
链接:a
图像:img
列表:ul+li,ol+li
表格:table+thead+tbody+tr+td
表单:form+label+input+button
框架:iframe
通用:div/span
HTML5语义化标签
容器:header/nav/main/article/section/footer
header
nav
main
article
section
aside
footer
CSS层叠样式表
设置HTML元素在文档中的布局和显示方式(外观)
元素属性: style="color: red"
元素标签:
外部资源:
CSS基本语法
样式规则:
选择器:标签选择器、类选择器
样式声明
样式选择器:
id选择器:id是唯一的,#id
class选择器:.class
标签选择器:p
优先级:标签<class<id<javascript
盒子模型
一切皆盒子,一切布局的基础,页面上的一切可见元素均可看作盒子。
盒子默认都是块级元素:独占一行,支持宽高设置。
盒子模型可以设置六个样式:宽高、背景、内外边距、边框
width:水平方向
height:垂直方向
background-color:背景,默认透明
margin:外边距,当前盒子与其他盒子之间的位置与关系,默认透明,只有宽高属性
border:边框,位于内外边距之间,是可见元素,不透明,除宽度外,还可以设置样式与前景色
padding:内边距,内容与边框之间的填充区域,默认透明,只有宽高属性
其中margin与padding的设置,属性按顺时针上右下左排列,可设方式为:上-右-下-左,上-左右-下,上下-左右,上下左右。
根据可见性可以分为两类:
可见:width,height,border
透明:background,padding,margin
样式选择器
id选择器:#id{...}
class选择器:.class{...}
标签选择器:标签{}
属性选择器:选择器[id=""]{...}
群组选择器:地位平等,同时设置多个选择器样式;选择器1,选择器2 {...}
相邻选择器:选择器+ {...},加号标识选中相邻,作为通配符,命中相邻的一个
兄弟选择器:相邻兄弟选择器,平级的所有元素;选择器~ * {....}
伪类选择器:使用冒号
子元素选择器:根据位置进行选择;选择器 空格 : first-child/last-child/nth-child/nth-last-child(元素索引,从1开始) {...}, 空格也可以改为具体的选择器;
类型选择器:选择器 类型: first-of-type/last-of-type/nth-of-type {...},只要选中类型,就要使用带有type的
关注点是位数,用nth-child
既关注位置,又关注类型,用nth-of-type
背景设置
background-color:背景色,覆盖边框区域
background-image:背景图,url(image-path),默认会水平垂直重复
background-repeat:重复方向,no-repeat(不重复),repeat-x(水平重复),repeat-y
background-position:背景定位,left center,30px 50px,10% 20%
background-attachment:滚动方式,scroll,fixed(固定)
background-img:多背景图设置,css3新增
background-size:设置背景图尺寸,css3新增
background-clip:设置背景图绘制区域,css3新增
background:简写,顺序为:背景色 背景图 重复方向 背景定位 滚动方式
布局
调皮的内边距:padding
padding会撑大盒子
宽度分离:增加中间层
box-sizing:计算盒子宽高计算方式,改为边框+padding;box-sizing: border-box;content-box则恢复默认计算方式
琢磨不定的外边距:margin
同级塌陷:垂直方向同级排列时,上边盒子margin-bottom与下边盒子margin-top会重叠
嵌套传递:子元素的margin会向父元素传递;子元素的margin转为父元素的padding来解决
自动挤压:margin-left: auto,自动定位到右侧
浮动元素:float
浏览器交出页面布局的权限,交给用户,即将元素从文档流中脱离出来。脱离后必然是一个块,可以设置宽高等。
流动布局:又称文档流/标准流,元素排列顺序与元素在html文档中的编写顺序一致的,从上到下,从左往右
脱离文档流的手段:
浮动:将元素在水平方向上自由移动,垂直仍在文档流中
float:left,right;clear:both/left/right
浮动元素:让元素脱离文档流,在垂直方向仍然在文档流中,在水平方向可以向左右两边自由浮动
浮动元素对前面的元素无影响,只会影响后面的元素
浮动元素之间可以理解为在水平方向组成了一个文档流,按照规则进行排列
子元素(区块)与父级包含块(区块):
子元素浮动,父区块塌陷,高度丢失:浮动后脱离文档流,父区块无法再包裹住子元素
给父区块设置高度:可以但是pass,太不灵活
父区块跟着一块浮动:pass,需要很多级别均设置float
子元素同级增加一个元素:设置 clear: both父元素增加一个overflow,专用来清浮动:overflow:hidden
伪元素:老教材中有,pass
清空浮动以overflow来处理
定位:将元素在页面重新排列
静态定位:static,文档流定位,流动布局
相对定位:relative,元素仍在文档流
只是相对它原来的位置发生偏移
{position: relative; left:30px;right:20px}
后边元素依旧认为它在原来位置,然后进行后续布局
绝对定位:absolute,元素脱离文档流
参照物:相对于离他最近的,具有定位属性的父级元素进行定位;循环后的最顶级的参照物为body
{position: absolute; left:0;right:0}
固定定位:fixed,不在文档流中
参照物:始终相对于浏览器窗口进行定位,body/html
布局常识
网页拆分为上中下(通用头部/底部+内容区),然后内容区拆分为左中右。
头部:链接+导航
底部:
主体的布局,常用方式是双飞翼布局、圣杯布局。
双飞翼布局:左右固定,中间自适应;优先展示中间,以提高渲染优先级
DOM结构
主体:放到wrap容器中实现宽度分离,以规避padding撑大盒子;默认大小由内容决定
左侧
右侧
圣杯布局:杯体+两个耳朵把手
DOM结构
主题:不需要wrap,盒子大小改为边框计算方式{box-sizing: border-box}
左侧
右侧
HTML中的表格: 表格布局
原生表格的DOM结构如下:
table:表格
caption:标题
thead:表头,tr+th
tbody:主体,tr+td
tfoot:页脚,tr+td
rowspan/colspan:合并单元格
CSS控制表格的样式:
box-shadow:阴影
tfoot尽量直接写在tbody中
hack方式的伪元素:通过css向页面添加元素
table:after {}
table:before {}
表格布局=>定位(position)=>浮动(float)=>弹性(flex)=>网格(Grid)
Flex布局
布局的传统解决方案,基于盒状模型,依赖
display
属性 +position
属性 +float
属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。Flex 是 Flexible Box的缩写, 意思是"弹性布局", 用来为盒状模型提供最大的布局灵活性
任何一个容器都可以设置为
Flex
布局模式float
,clear
,vertical-align
属性全部失去意义, 没有效果了Flex基本概念
Flex容器:简称容器,采用
flex
布局的元素Flex项目:简称项目
Flex容器中的所有成员(子元素)会自动成为该容器的成员,称为
flex项目
flex项目都支持宽高设置, 哪怕它之前是内联元素,类似于浮动元素
主轴:水平轴,横轴,x轴
main start
: 起始位置main end
: 结束位置main size
: 单个项目占据的主轴空间交叉轴: 垂直轴,坚轴,y轴
cross start
: 起始位置cross end
: 结束位置cross size
: 单个项目占据的交叉轴空间Flex容器
Flex项目
order:定义项目排列顺序,索引越小越靠前,默认为0
flex-grow:定义项目的放大比例,默认为0不放大,即有剩余空间时也不放大项目
flex-shrink:项目缩小比例,默认为1,即如果空间不足,则自动缩小项目来填充
flex-basis:定义项目在主轴占据的空间,默认为auto,即项目原始大小
flex:是flex-grow,flex-shrink,flex-basis的简写,默认为0 1 auto,后两个属性可选
align-self:个性化定制某个项目的对齐方式,可以覆盖容器的aligin-items属性,默认为auto
Grid布局:网格布局
Grid是第一个专门为解决布局问题而生的CSS模块
Grid布局的基础知识
grid-template-columns/grid-template-rows:设置行列大小
grid-column/grid-row:将它的子元素放入网格
Grid Container:网格容器,设置了
display:grid
的元素,是所有grid item的直接父项Grid Item:网格元素,容器的直接子元素,间接的子元素不是哦
Grid Line:网格线,分界线组成网格结构,可以是垂直的,也可以是水平的,并位于列或行的任意一侧
Grid Track:网格轨道,两个相邻网格线之间的空间,可以想象成网格的列或者行
Grid Cell:网格单元,两个相邻的行和相邻的列网格线之间的空间,是网格的一个单元
Grid Area:网格区域,四个网格线包围的总空间,网格区域可以由任意数量的网格单元组成
Grid容器
display:将元素定义为grid容器,并为其内容建立新的网格格式化上下文
grid:生成一个块级网格
inline-grid:生成一个行级网格
subgrid:如果容器本身就说一个grid项目(即嵌套网络),可以使用这个属性表示想从父节点获取它的行/列大小,而不是指定自己的大小
column/float/clear/vertical-align对容器没有影响
grid-template-columns/grid-template-rows:使用以空格分隔的多个值来定义网格的行和列,表示轨道的大小,空格代表网格线
grid-template-areas:通过引用grid-area属性指定的网格区域的名称来定义网格模板,重复网格区域的名称导致内容扩展到这些单元格。点号代表一个空单元格,提供了网格结构的可视化
grid-template:定义了grid-template-rows/columns/areas的简写
grid-column-gap/grid-row-gap:指定网格线的大小,即设置列/行之间的间距宽度
grid-gap:grid-row-gap和grid-column-gap的缩写
justify-items:沿着横轴对齐网格内的元素
align-items:沿着纵轴对齐
justify-content:网格的总大小可能小于容器的大小,如果所有项目都使用像素值这样的非弹性单位设置大小,则可能出现此种情况。此时可以设置网格容器内的网格的对齐方式,沿着横轴对齐网格
aligin-content:同上,验证纵轴对齐网格
grid-auto-columns/grid-auto-rows:指定自动生成的网格轨道(即隐式网格轨道)的大小。
grid-auto-flow:如果你存在没有显示指明放置在网格上的 grid item,则自动放置算法会自动放置这些项目。 而该属性则用于控制自动布局算法的工作方式。
grid:在单个属性中设置所有以下属性的简写:grid-template-rows,grid-template-columns,grid-template-areas,grid-auto-rows,grid-auto-columns和grid-auto-flow。 它同时也将 sets grid-column-gap 和 grid-row-gap 设置为它们的初始值,即使它们不能被此属性显示设置。
Grid Items
grid-column-start/grid-column-end/grid-row-start/grid-row-end:指定元素网格线的起始/终止位置
grid-column/grid-row:上述属性的简写
grid-area:给网格进行命名,也可以作为grid-row-start + grid-column-start + grid-row-end + grid-column-end 的简写形式
justify-self:沿着行轴对齐grid item 里的内容(与之对应的是 align-self, 即沿列轴对齐)。 此属性对单个网格项内的内容生效。
align-self:沿着列轴对齐grid item 里的内容(与之对应的是 justify-self, 即沿行轴对齐)。 此属性对单个网格项内的内容生效。
经典的三列布局
<!DOCTYPE html>
媒体查询