关于Web面试的基础知识点--Html+Css(四)
文章目录
- 1. 导致回流发生的因素
- 回流 (Reflow)
- 2.white-space text-overflow overflow(文本空白问题)
- 3.如下代码 如何使child内容垂直居中?
- 4. HTML5新增标签
- 5. Web Storage
- 1.sessionStorage
- 2.localStorage
- 6. link 和 @import的区别
- 7. html Doctype
- 8. 如何解决被访问过的链接不再具有hover和active属性
- 9. background-position (背景定位元素)
1. 导致回流发生的因素
浏览器使用流式布局模型 (Flow Based Layout)。
浏览器会把HTML解析成DOM,把CSS解析成CSSOM,DOM和CSSOM合并就产生了Render Tree。
有了RenderTree,我们就知道了所有节点的样式,然后计算他们在页面上的大小和位置,最后把节点绘制到页面上。
由于浏览器使用流式布局,对Render Tree的计算通常只需要遍历一次就可以完成,但table及其内部元素除外,他们可能需要多次计算,通常要花3倍于同等元素的时间,这也是为什么要避免使用table布局的原因之一。
一句话:回流必将引起重绘,重绘不一定会引起回流。
回流 (Reflow)
当Render Tree中部分或全部元素的尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档的过程称为回流。
调整窗口大小,浏览器窗口尺寸改变——resize事件发生时
元素尺寸改变——边距、填充、边框、宽度和高度;改变字体大小
页面渲染初始化
元素位置改变
样式表变动
元素内容变化,尤其是输入控件
CSS伪类激活
DOM操作,添加或者删除可见的DOM元素
offsetWidth, width, clientWidth, scrollTop/scrollHeight的计算, 会使浏览器将渐进回流队列Flush,立即执行回流。内容改变——比如文本改变或者图片大小改变而引起的计算值宽度和高度改变
原文地址 掘金作者:腰花
2.white-space text-overflow overflow(文本空白问题)
white-space: normal
| pre
| nowrap
| pre-wrap
| pre-line
| inherit
white-space: 属性设置如何处理元素内的空白
值 | 描述 |
---|---|
normal | 默认。空白会被浏览器忽略。 |
pre | 空白会被浏览器保留。其行为方式类似 HTML 中的 pre 标签。 |
nowrap | 文本不会换行,文本会在在同一行上继续,直到遇到 br 标签为止。 |
pre-wrap | 保留空白符序列,但是正常地进行换行。 |
pre-line | 合并空白符序列,但是保留换行符。 |
inherit | 规定应该从父元素继承 white-space 属性的值。 |
text-overflow: clip
| ellipsis
| string
text-overflow:规定当文本溢出包含元素时发生的事情
值 | 描述 |
---|---|
clip | 修剪文本。 |
ellipsis | 显示省略符号来代表被修剪的文本。 |
string | 使用给定的字符串来代表被修剪的文本。 |
overflow:visible
|hidden
|scroll
|auto
|inherit
overflow :规定当内容溢出元素框时发生的事情
值 | 描述 |
---|---|
visible | 默认值。内容不会被修剪,会呈现在元素框之外。 |
hidden | 内容会被修剪,并且其余内容是不可见的。 |
scroll | 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。 |
auto | 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。 |
inherit | 规定应该从父元素继承 overflow 属性的值。 |
3.如下代码 如何使child内容垂直居中?
<parent><child>content</child>
</parent>
- 把
parent
变成table
,再把子元素变为table-cell
,而vertical-align
属性可以设置元素垂直对齐,前提条件:只能应用于内联元素以及display
值为table-cell
的元素。
parent {display: table;
}
child {display: table-cell;
vertical-align: middle;
}
- 弹性布局。
align-items
:center
为设置子元素在侧轴方向上居中对齐,弹性布局默认主轴方向为row(即从左到右),侧轴就是就是column(从上到下)。
parent {display: flex;
align-items: center;
}
- 定位。父元素设置相对定位,子元素设置绝对定位,子元素的top值设置为50%(即父元素高度的50%),注意:此时是child元素的左上角(0,0),移到了
parent
元素的(0,parent
高度的50%),而不是子元素的中心点移到了父元素垂直方向的中心点。因此子元素需要往上移动自身高度的50%,即transform:translateY(-50%)
。
parent {position: relative;
}
child {position: absolute;
top: 50%;
transform: translateY(-50%);
}
- 设置伪元素。
vertical-align
属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐。打个比方:有两个行内元素a和b,a和b都是img,如果a加了vertical-align:middle
样式,b的底部(基线)就会对齐a的中间位置;如果a和b都加了一个vertical-align:middle
样式。那么就互相对齐了对方的中间位置,也就是它们在垂直方向上的中线对齐了。
而伪元素的display属性默认值为inline,行内元素是无法设置宽高的,想要设置宽高需要将之设置为block或者inline-block。
parent:after {content: '';
height: 100%;
vertical-align: middle;
width: 0;
}
child {display: inline-block;
vertical-align: middle;
}
4. HTML5新增标签
5. Web Storage
1.sessionStorage
session,指的是一次会话,其时间作用于你访问开始一个网站到你关闭这个网站。
用sessionStorage保存的数据在你关闭网站页面的时候就会被销毁,一般用于临时的数据保存
2.localStorage
local,指的是本地,它会把数据保存到你的硬盘中,即是浏览器被关闭了,下次访问也能读取到已经保存了的数据。
值得注意的是,由于不同浏览器数据存储的位置不一样,所以每个浏览器所存储的数据都是独立的,不能在其他浏览器中获取
准备了一个p标签,一个输入框,两个按钮。分别用于显示读取出来的数据,提供内容的输入,提交保存,读取数据。
代码中用到了2个方法,setItem
和getItem
,对应的是保存和读取,
当然你也可以用sessionStorage.[key] = value
的方式去保存,取数据的时候也非常简单,直接用sessionStorage.[key]
,你会得到你想到的东西的,
需要注意的是,用session
保存的数据用local
是取不到的,反过来也一样。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>WebStorage</title>
</head>
<body><p id="msg"></p>
<input type="text" id="input">
<input type="button" value="保存数据" onclick="saveStorage('input');">
<input type="button" value="读取数据" onclick="loadStorage('msg');"><script>function saveStorage(id) {var targer = document.getElementById(id);var str = targer.value;sessionStorage.setItem('message', str);
}function loadStorage(id) {var target = document.getElementById(id);var msg = sessionStorage.getItem('message');target.innerHTML = msg;
}/*function saveStorage(id) {var target = document.getElementById(id);var str = target.value;localStorage.setItem('message', str);
}function loadStorage(id) {var target = document.getElementById(id);var msg = localStorage.getItem('message');target.innerHTML = msg;
}*/</script></body>
</html>
代码来自牛友–> 高高手
6. link 和 @import的区别
1)link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS。
2)link可以加载CSS,Javascript;@import只能加载CSS。
3)link加载的内容是与页面同时加载;@import需要页面网页完全载入以后加载。
用法:
1)link的写法:
<link rel="stylesheet" href="index.css">
2)import的写法:
<style type=”text/css”>@import url(“index.css”);
</style>
7. html Doctype
- 它的责任就是告诉浏览器文档使用哪种html或者xhtml规范
- 不同文档模式主要影响CSS内容的呈现,尤其是浏览器对盒模型的解析
- 不同浏览器在混杂模式下的行为差异非常大,如果不使用某些hack技术,跨浏览器的行为根本就没有一致性可言。
- 如果在文档开始处没有发现文档类型声明,则所有浏览器都会默认开启混杂模式(兼容模式)
8. 如何解决被访问过的链接不再具有hover和active属性
为了符合浏览器解析CSS所遵循的就近原则,将一般的放在上面,将特殊的放在下面。
a:link; a:visited; a:hover; a:active;
a:hover
必须放在a:link
和a:visited
之后;
a:active
必须放在a:hover
之后。
简单口诀:Link,visited,hover,active.( L o v e h a t e 爱与恨)
9. background-position (背景定位元素)
Background-position属性
配合background-image属性一起使用,用于设置背景图片在盒子中的位置
参数:xpos ypos
|x% y%
|x y
三种,
如果只写第一个水平方向的参数,第二个垂直方向的参数会默认为:
center
| 50%
| 容器高度的一半px
Xpos
:规定水平方向的对齐方式,值有left,right,center
Ypos
:规定垂直方向的对齐方式,值有top,bottom,center
x%:规定图片水平方向的距离。
你会不会以为这个x%就是父级容器宽度的x%?那你就想错了哦,这里的x%指的是父级容器的宽度减去图片的宽度后的差值的x%。(容器的宽度-图片的宽度)
举个例子:background-position:50%,20%;
图片的宽度为
imgwidth:100px;
高度为imgheight:100px;
容器的宽度为
conwidth:200px;
高度为conheight:200px;
那么此时图片的左顶点距离容器的左顶点的水平距离就是(conwidth
-imgwidth
)*50%=50px,而不是conwidth
*50%=100px;(很好理解的吧,不然盒子宽度200px,图片宽度100px,又距离左边100px,岂不是50%没实现水平居中而紧靠右了吗?)
由此也可以算出图片的左顶点距离容器的左顶点的垂直距离为20px
y%
:对应x%
x
:图片距离容器水平方向距离
y
:图片距离容器垂直方向距离
详细解释background-position属性
关于Web面试的基础知识点--Html+Css(四)相关推荐
- 关于Web面试的基础知识点--Html+Css(三)
文章目录 1.CSS中可以继承的属性 2.CSS选择器优先级 4个等级的定义 3.以下哪些CSS表示红色? 4.行内元素和块级元素 5.浮动元素 6.清除浮动并不会造成不稳定情况的方法 7.可以进行跨 ...
- 关于Web面试的基础知识点--Javascript(一)
文章目录 前言 1.著名的"null==undefined" undefined null null == undefined ??? 2.假值 3.Javascript的数据类型 ...
- 关于Web面试的基础知识点--Javascript(二)
Table of Contents 1.如何将集合转化成数组? 2.Event Loop - 1 3.Event Loop - 2 4.不支持冒泡的事件 5. 如何阻止事件冒泡 6.比较Ajax和Fl ...
- Web阶段--Servlet基础知识点
Web阶段–Servlet基础知识点 一.静态页面与动态页面 1.静态页面 概念:在Web模型中,页面中的信息是在html文件中定义好的,数据不会改变,称为"静态页面",无法根据用 ...
- mysql 存储引擎 面试_搞定PHP面试 - MySQL基础知识点整理 - 存储引擎
MySQL基础知识点整理 - 存储引擎 0. 查看 MySQL 支持的存储引擎 可以在 mysql 客户端中,使用 show engines; 命令可以查看MySQL支持的引擎: mysql> ...
- web前端工程师基础知识点
看了一个web培训的大纲,感觉这些确实涵盖了在开发过程当中的一些知识点,特此总结了一下.同时也是第一次尝试了使用markdown这个编辑器,感觉不错. 特此推荐一下 HTMLXHTML Dreamwe ...
- 面试常见基础知识点及问题
目录 线程池 ConcurrentHashMap volatile关键字 AQS synchronized实现原理 CAS操作 MySQL索引类型和区别 事务的四大特性 事务的隔离级别 sql优化 1 ...
- 前端基础知识点总结CSS篇(问题实例)
CSS 优化.提高性能的方法有哪些? 多个 css 合并,尽量减少 HTTP 请求 css 雪碧图 抽象提取公共样式,减少代码量 选择器优化嵌套,尽量避免层级过深 (用'>'替换' ') 属性值 ...
- 面试算法基础及编程 第四弹 (字符串、数值类、或其他常见相关)
// # -*- coding:utf-8 -*- // # @Author: Mr.chen(ai-chen2050@qq.com) // # @Date: 2018-08-18 21:06:30 ...
最新文章
- 基于ESP8266-01s 增加对于FZ35恒流电子负载WiFi接口
- 商务网站开发这些优势值得青睐
- [转]RDLC报表-参数传递及主从报表
- DAO层使用泛型的两种方式
- php+nginx上传文件配置
- Android之网络请求提示Cleartext HTTP traffic to dev*******.com not permitted
- 【转】Azure Messaging-ServiceBus Messaging消息队列技术系列2-编程SDK入门
- 服务器如何修复dll,Windows10系统修复KernelBase.dll错误的解决方法
- java snmp全面开发解决方案(web service snmp网关、代理snmp网关、网络拓扑发现、SNMP数据采集等)...
- 从Gauss-Newton算法到 LM算法 (详细推导及MATLAB实现、多自变量问题)
- 什么是传感器?不同类型的传感器及其应用
- 和平精英怎么玩?智能找图、鼠标滚轮宏按键玩吃鸡还能匹配手机?
- R语言输出时,中文变成 \u98ce\u901f \u592a\u9633\u8f90\u5c04
- 带你了解什么是抽象类,抽象类不能够被实例化为什么还有构造方法?
- LQBv23-Python:三升序列
- XSS第一节,XSS档案
- BUUCTF ------findkey
- golang工作中常用的一些库
- [Android App] 内涵段子最新5.5.5 去广告去更新修改版
- 香农密码理论汇总:完善保密性
热门文章
- Java二十三种设计模式 之代理(proxy)
- keil 快捷键_KEIL 那些编辑技巧与方法
- 收藏 | 图像处理Transformer:华为诺亚、北大等IPT模型,刷榜
- 解析 | 如何从频域的角度解释CNN(卷积神经网络)?
- 图像分类最新技术综述论文: 21种半监督、自监督和无监督学习方法一较高低
- Python解决使用列表副本问题
- 前端与java绘制三维图_使用HTML5 Canvas绘制三维波浪图算法和实现
- 解决jupyter botebook打不开,修改jupyter botebook工作目录失败问题
- 一个实例带你搞懂Apriori关联分析算法
- python的编程方式模块化_我的Python笔记·模块化编程(一)