HTML 和CSS基础知识
CSS布局实战
动画和效果专题讲解
框架集成和CSS过程化
前端三大件:
HTML常见元素和理解
HTML版本
HTML元素分类
HTML元素嵌套关系
HTML元素默认样式和定制化
HTML面试真题解答
head区域的元素,
body中的元素
HTML重要属性
colspan
是“column span(跨列)”的缩写。colspan
属性用在td标签中,用来指定单元格横向跨越的列数:rowspan
的作用是指定单元格纵向跨越的行数。当多个多选框的name相同的时候,表示他们是一组的,
label和input通过id关联起来
使用语义化的标签就是为了让html结构更加清晰
h5o - HTML5 Outliner大纲工具
http://h5o.github.io/
可以使用W3C验证网站,验证网页的合理性
表单新增内容
HTML新增语义:
语义化标签的作用,会进大纲算法
HTML新增语义
IE将会以标准模式渲染.
- 让浏览器以标准模式进行渲染
- 让浏览器知道元素的合法性
HTML属于SGML(非常通用的标记语言)
XHTML属于XML,是HTML进行XML严格化的结果
HTML5不属于SGML或XML.比XML宽松
3.HTML5有什么变化
- 新的语义化元素,
、 、 - 表单增强
- 新的API(离线,音视频,图形.实时通信,本地存储,设备能力)
em和i有什么区别
语义化的意义是什么?
哪些元素可以自闭合
HTML和DOM的关系
property和attribute的区别
*注意,不同点一:存在dom对象中的位置不一样,一个是作为dom对象的属性,而且在attributes属性对应的对象里面也同样存在,而另一个只存在dom对象的attributes属性对应的对象中*
*注意,不同点二:property的值会同步html上的属性值,而且attributes里面的值只能通过代码进行修改,可以理解为attributes里面的数据时初始化数据*
注意,不同点三:property的值页面显示的值双向绑定,而attributes里面的值不会,而且半单向绑定,因为只有初始化时候的值会绑定到attributes里面。
也有一个共同点,就是通过代码修改的不管是property还是attributes里面的值,都没有办法影响到对方。
attributes 是 HTML元素(标签)的属性,而 properties 是 DOM 对象的属性。
prop()和attr()的区别:
form的作用有哪些
简洁的DOCTYPE:
HTML5 只有一个简单的文档类型:,表示浏览器会按照标准模式解析。
简单易记的编码类型:
你现在可以在meta 标签中使用”charset”:
脚本和链接无需type:
更加语义化的新增标签:
比如说:
视频和音频:
表单增强:
新的input类型:color, email, date, month, week, time, datetime, datetime-local, number,range,search, tel, 和url
新属性:required, autofocus, pattern, list, autocomplete 和placeholder
新元素:, , , 和
canvas标签绘制2D图形。
var
canvas = document.getElementById('canvas');var context =
canvas.getContext('2d');context.beginPath;context.moveTo(100,100);context.lineTo(300,300);context.lineTo(100,500);context.lineWidth
= 5;context.strokeStyle = "red";context.stroke;
地理位置获取
HTML语义化
1.什么是HTML语义化?
通过标签判断内容语义,例如根据h1标签判断出内容是标题,根据
判断内容是段落、标签是输入框等。
2.为什么要语义化?
1).去掉或样式丢失的时候能让页面呈现清晰的结构
2).方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页
3).有利于SEO
4).便于团队开发和维护,遵循W3C标准,可以减少差异化
3.如何确定你的标签是否语义良好?
去掉样式,看网页结构是否组织良好有序,是否仍然有很好的可读性。
4.常见的语义化标签模块
表单
表单域要用fieldset标签包起来,并用legend标签说明表单的用途;每个input标签对应的说明文本都需要使用label标签,并且通过为input设置id属性,在lable标签中设置for=someld来让说明文本和相对应的input关联起来。
5.语义化标签应注意的一些问题
尽可能少的使用无语义的标签div和span;
在语义不明显时,既可以使用div或者p时,尽量用p, 因为p在默认情况下有上下间距,对兼容特殊终端有利;
不要使用纯样式标签,如:b、font、u等,改用css设置。
需要强调的文本,可以包含在strong或者em标签中,strong默认样式是加粗(不要用b),em是斜体(不用i)
浏览器解析选择器的方式是从右往左解析,一步一步进行验证,处于效率的模式进行考虑
行高不一样的时候,为什么渲染高度是一样的,
line boxes
什么特性也没有,就高度。所以一个没有设置height
属性的div
的高度就是由一个一个line boxes
的高度堆积而成的。其实line boxes
不是直接的生产者,属于中层干部,真正的活儿都是它的手下 –inline boxes
干的,这些手下就是文字啦,图片啊,之类的
inline
属性的标签啦。line boxes
只是个考察汇报人员,考察它的手下谁的实际line-height
值最高,谁最高,它就要谁的值,然后向上汇报,形成高度。例如,取手下line-height最高的值
。则line boxes的高度就是40像素了。
行高的构成是怎么来的?行高是line-box决定的,line-box是由什么组成的,是由inline-box组成的
行高相关的现象和方案
- 背景颜色
- 渐变色背景
- 多背景的叠加
- 背景图片和属性(雪碧图)
- base64和性能优化
- 多分辨率适配
1.0 颜色格式
0deg不是按我们数学的角度向右定义的,默认方向是向上的,是从方向北开始的,所以北才是0deg,
<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>backgroundtitle>
<style>
body {
background: yellow;
}
.c1 {
height: 90px;
/* background: red; */
background: url(../test.png);
}
.c2 {
height: 90px;
/* 设置一个线性渐变 */
/* background: -webkit-linear-gradient(left, red, green, blue); */
/* 线性渐变最新写法, to right */
/* background: linear-gradient(to right, red, green, blue); */
/* 对于渐变,我们更多的时候会使用一个角度的值 */
/* background: linear-gradient(45deg,red, green, blue) */
/* 线性渐变,还可以使用百分比来规定颜色区域 */
/* background: linear-gradient(135deg, red 0, green 10%, blue 50%) */
/* 多背景的叠加,如何画一道绿线 */
background: linear-gradient(
135deg,
transparent 0,
transparent 49.5%,
green 49.5%,
green 50.5%,
transparent 50.5%,
transparent 100%
),linear-gradient(
45deg,
transparent 0,
transparent 49.5%,
red 49.5%,
red 50.5%,
transparent 50.5%,
transparent 100%
);
background-size:30px 30px;
}
style>
head>
<body>
<div class="c1">div>
<div class="c2">div>
body>
html>
背景图片和属性(雪碧图)
所以聪敏的开发者想出来把所有的动作图片合成成一张图片,这样只要加载一次就能全速在内存中读取了。后来的游戏机还为此专门搞了一个处理器来加速Sprite资源,就好象3d加速卡一样。现在的游戏机性能提高了,但是2d游戏还是保留了这样的技术。
因为雪碧的英文名叫做 Sprite,这种图标文件英文名是 Sprites,所以就有雪碧图的叫法了。因为http请求每次都要握手,时间开销很,所以借鉴了Sprite技术,把一些零碎的图片素材合成成一张图片,这样只要一次请求就能把图片资源加载完成了。但是这个技术在http2和http3中就不一定那么有效果了,因为新的协议中会合并请求,所以Sprite技术没有那么节约了。最后也要合理使用,太大得雪碧图也会造成加载缓慢的情况
- 边框的属性:线型 大小 颜色
- 边框背景图
- 边框衔接 (三角形)
1.0 边框背景图
css中repeat 和 round 的区别
round平铺图像的方式与repeat一样,不过不会裁剪图像。背景图不会被裁剪,而是被缩放。并排着一列列显示。为了做到这一点,浏览器会扭曲各个图像副本,因此会破坏图像的纵横比。
<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>bordertitle>
<style>
/* 边框是如何处理图片
可以拉伸图片
*/
.c1{
width: 400px;
height: 200px;
border: 5px dashed red;
}
.c2{
width: 400px;
height: 200px;
/* border-width: 30px; */
border: 30px solid transparent;
border-image: url(../border.png) 30 repeat;
}
style>
head>
<body>
<div class="c1">div>
<div class="c2">div>
body>
html>
2.0 边框的衔接部分使用的切面
我们可以使用边框部分的真实,使用css画出一个三角形,跳转角的度数我们还可以画出来一个扇形
<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>bordertitle>
<style>
/* 边框是如何处理图片
可以拉伸图片
*/
.c1{
width: 400px;
height: 200px;
border: 5px dashed red;
}
.c2{
width: 400px;
height: 200px;
/* border-width: 30px; */
border: 30px solid transparent;
border-image: url(../border.png) 30 round;
}
.c3{
/* 如何使用css设置一个三角形,利用边框,左右边框链接部分为边,设置透明
然后再设置div盒子模型的宽度为0,边框就会压缩为一个
*/
width: 0px;
height: 200px;
border-bottom: 30px solid red;
border-right: 30px solid transparent;
border-left: 30px solid transparent;
}
style>
head>
<body>
<div class="c1">div>
<div class="c2">div>
<div class="c3">div>
body>
html>
文档折行和滚动相似的是,都面临的问题是显示不下,
- overflow-wrap(word-wrap)通用换行控制
- 是否保留单词
- word-break针对多字节文字
- 中文句子也是单词
- white-space空白处是否断行
- 字重(粗体)font-weight
- 斜体font-style:italic
- 下划线text-decoration
- 指针cursor
什么是CSS hack
由于不同厂商的流览器或某浏览器的不同版本(如IE6-IE11,Firefox/Safari/Opera/Chrome等),对CSS的支持、解析不一样,导致在不同浏览器的环境中呈现出不一致的页面展现效果。这时,我们为了获得统一的页面效果,就需要针对不同的浏览器或不同版本写特定的CSS样式,我们把这个针对不同的浏览器/不同版本写相应的CSS code的过程,叫做CSS hack!
- Hack即不合法但生效的写法
- 主要用于区分不同浏览器
- 缺点:难理解,难维护,易失效
- 替代方案:特性检测
- 替代方案:针对性加class
选择器的真题
- CSS样式(选择器)的优先级
- 计算权重确定
- !importtant
- 内联样式
- 后写的优先级高
雪碧图的作用
- 利用background属性,大小位置,background-position
- 减少HTTP请求数,提高加载性能
- 有一些情况下可以减少图片大小
自定义字体的使用场景
- 宣传/品牌/banner等固定文案
- 字体图标
base64的使用
- 用于减少HTTP请求
- 适用于图片
- base64的体积约为原图4/3
伪元素和伪类的区别
- 伪类表状态
- 伪元素是真的有元素
- 前者单冒号,后者双冒号
如何美化checkbox
- label[for]和id
- 隐藏原生的input
- :checked+label
- CSS知识体系的重中之重
- 早期以table为主(简单)
- 后来以技巧性布局为主(难)
- 现在有flexbox/grid(偏简单)
- 响应式布局是必备知识
常用布局方法
- table表格布局
- float浮动 + margin
- inline-block布局
- flexbox布局
1.直接使用table进行布局,和利用div的display属性进行布局
<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>displaytitle>
<style>
.left {
background: red;
}
.right {
background: blue;
}
table {
width: 800px;
height: 200px;
/* 为表格设置合并边框模型 */
border-collapse: collapse;
}
/* 开始设置div的table布局 */
/* 1.0 先设置外部盒子 */
.table {
margin-top: 20px;
display: table;
width: 800px;
height: 200px;
}
.table-row{
display: table-row;
}
.table-cell{
/* vertical-align 属性设置元素的垂直对齐方式。 */
vertical-align: center;
display: table-cell;
}
style>
head>
<body>
<table>
<tr>
<td class="left">左td>
<td class="right">右td>
tr>
table>
<div class="table">
<div class="table-row">
<div class="left table-cell">左div>
<div class="right table-cell">右div>
div>
<div class="table-row">
<div class="left table-cell">左div>
<div class="right table-cell">右div>
div>
div>
body>
html>
display/positon
- 确定元素的显示类型
- block/inline/inline-block
- 确定元素的位置
- static/relative/absolute/fixed
<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>positiontitle>
<style>
/* 默认就是静态布局,按照文档流 */
div{
background:red;
width: 100px;
height: 100px;
}
/* 相对定位,相对于元素本身来说,不会因为布局而改变空间的计算 */
.p2{
position: relative;
left: 10px;
top: 20px;
background:blue;
}
/* 绝对定位,已经脱离了文档流,独立存在
relative相对于body定位
absolute相对于最近的一个父级absolute或者relative
如果不是就往上找,一直找到body
*/
.p3{
position: absolute;
left: 80px;
top: 30px;
background:green;
}
/* 相对于可视屏幕是固定的 */
.p4{
background:yellow;
position:fixed;
left: 0;
bottom: 1px;
}
style>
head>
<body>
<div class="p1">
position:static
div>
<div class="p2">
position:relative
div>
<div class="p3">
position:absolute
div>
<div class="p4">
position:fixed
div>
<div class="p5">
p5
div>
body>
html>
使用z-index可以改变层叠顺序,使用样的元素可以使用z-index,定位属性为:relative,absolute,fixed
- 弹性盒子
- 盒子本来就是并列
- 指定宽度即可
没有比大规模使用,适用性弱
<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>flex_02title>
<style>
.container{
width: 800px;
height: 200px;
display: flex;
}
/* 左边两百,右边自适应 */
.left{
background: red;
display: flex;
width: 200px;
}
.right{
background: blue;
display: flex;
flex: 1;
}
style>
head>
<body>
<div class="container">
<div class="left">
左
div>
<div class="right">
右
div>
div>
body>
html>
- 元素"浮动"
- 脱离文档流
- 但不脱离文本流
- 本来就是做图文混排文字环绕效果的
float有什么特效float对自身的影响
- 对自身影响:
- 会形成块BFC
- 位置会尽量靠上
- 位置尽量靠左(右)
块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。
float对兄弟的影响
- 对兄弟的影响
- 上面贴非float元素
- 旁边贴float元素
- 不影响其他块级元素位置
- 影响其他块级元素内部文本
float对父级的影响
- 从父级布局上消失了
- 父级高度有可能会塌陷
如何解决父元素塌陷的问题
- overflow:auto
浮动的布局怎么做?
同学你好,造成空白间隙的原因是在标签和标签之间使用了空格或换行符, 因为空白字符也是字符,也会引用CSS样式。而这个距离就是以字体大小为准的,所以当设置为0的时候,表示这几个空格符的字体大小也是0,就像我们文字设置为0,不显示一样,所以这里也不显示了哦。
希望能帮助到你,祝学习愉快!
所以我们不换行的话,就不会有空隙了
- 在不同设备上正常使用
- 一般主要处理屏幕大小问题
- 主要方法:
- 隐藏 + 折行 + 自适应空间
- rem/viewport/media query
- 还可以使用脚本动态的获取页面大小,
<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>响应式布局title>
<style>
.container {
margin: 0 auto;
max-width: 800px;
display:flex;
border: 1px solid #000;
}
/* 左边 */
.left{
display:flex;
width: 200px;
background: red;
margin: 5px;
}
.right{
display:flex;
flex: 1;
background:blue;
margin: 5px;
}
/* 自适应 */
@media (max-width: 640px) {
.left{
display:none;
}
}
style>
head>
<body>
<div class="container">
<div class="left">
的了子求国始洪后世是,互长陈牛白,害人。
div>
<div class="right">
之尘持人范感同音使骂王罚之感帅,意一的吞少同自巴太绛就他过他着愿不,留司皇有生洞德,收不不笔了搏,案惜招的登恩哥畴种国,县卧秦文天心仓杂制劝何对娟氏,说但他是若是念的第要命木锐责你由,人弟洪丑,览衣尝自大人韩高皮变嗣沫娘,却三台活如始而说骨骂怒巴来艳对我临彷,的的不的国人主县世颜,后光得褒丰罪,治苦国不挟,因年啦没沫婵是送守她皇六极因与是,甲重将九司不廿,满才且丰一锐貂洪无大光,韩我人的,联己派。
div>
div>
body>
html>
使用rem做适配的方法,可以根据不同的设备给他不同html:font-size的值就可以让他的大小进行随意缩放,
而且在指定rem的时候,范围大的放在上面,范围小的放在下面
rem的单位不一定很精确
大多数使用的都是float布局,所以我们应该掌握float布局规则
使用两栏(三栏)布局的方法
position:absolute / fixed有什么区别?
display:inline-block的间隙
如何清除浮动(浮动的元素不会占据父元素的布局空间,也就是父元素布局的时候不回去管浮动元素,有可能浮动元素会超出浮动元素,从而对其他的元素造成影响)
如何适配移动端页面
box-shadow:
h-shadow 水平阴影,允许负值
v-shadow 垂直阴影 允许负值
blur 模糊距离
spread 阴影大小
color 阴影颜色
inset;从外层的阴影(开始时)改变阴影内侧阴影
- 营造层次感(立体感)
- 充当没有宽度的边框
- 特殊效果
- 立体感
- 印刷品质感
text-shadow: h-shadow v-shadow blur color;
注意: text-shadow属性连接一个或更多的阴影文本。属性是阴影,指定的每2或3个长度值和一个可选的颜色值用逗号分隔开来。已失时效的长度为0。
值 | 描述 |
---|---|
h-shadow | 必需。水平阴影的位置。允许负值。 |
v-shadow | 必需。垂直阴影的位置。允许负值。 |
blur | 可选。模糊的距离。 |
color | 可选。阴影的颜色。参阅 CSS 颜色值。 |
- 圆角矩形
- 圆形
- 半圆 / 扇形
- 一些奇奇怪怪的角
- 多个背景是可以叠加的
- 纹理,图案
- 渐变
- 雪碧动画
- 背景图尺寸适应
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Documenttitle>
<style>
.container{
}
.i{
width: 20px;
height: 20px;
background: url(./background.png) no-repeat;
background-size: 20px 40px;
transition: background-position .1s;
}
.i:hover{
background-position: 0 -20px;
}
style>
head>
<body>
<div class="container">
<div class="i">div>
div>
body>
html>
- 对容器进行裁剪
- 常见几何图形
- 自定义路径裁剪
- translate 位移
- scale
- skew
- rotate
1.box-shadow无限投影
2.如何产生不占空间的边框
- box-shadow
- outline
outline(轮廓)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。
outline简写属性在一个声明中设置所有的轮廓属性。
可以设置的属性分别是(按顺序):outline-color, outline-style, outline-width
如果不设置其中的某个值,也不会出问题,比如 outline:solid #ff0000; 也是允许的。