1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > css伪类选择器讲解 css中如何做出鼠标悬浮 – CSS – 前端 淘宝 店铺 css

css伪类选择器讲解 css中如何做出鼠标悬浮 – CSS – 前端 淘宝 店铺 css

时间:2021-08-02 06:45:36

相关推荐

css伪类选择器讲解 css中如何做出鼠标悬浮 – CSS – 前端 淘宝 店铺 css

在现实的应用场景也非常之多。最常见的是网站的悬浮导航,当鼠标放到导航条上时,会出现颜色变化或者元素自动伸出菜单栏。

@ CSS选择器first?

.content[data-role=page]:nth-child(2){} 使用:first-child伪类时一定要保证前面没有兄弟节点,你前面有个content所以会失效

1

2

3

你把这里的span去掉和加上再看效果 就明白了

@ 浏览器响应用户的机制是什么?

1. 浏览器是多进程的

GPU进程

最多一个,用于3D绘制等

Browser进程

负责浏览器界面显示,与用户交互。如前进,后退等

负责各个页面的管理,创建和销毁其他进程

将Renderer进程得到的内存中的Bitmap,绘制到用户界面上

网络资源的管理,下载等

第三方插件进程

每种类型的插件对应一个进程,仅当使用该插件时才创建

浏览器渲染进程(浏览器内核)

默认每个tab页一个进程

页面渲染,脚本执行,事件处理等

2. 浏览器渲染进程是多线程的

GUI渲染线程

负责渲染浏览器界面,解析HTML,CSS,构建DOM树和RenderObject树,布局和绘制等。

当界面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行

注意,GUI渲染线程与JS引擎线程是互斥的,当JS引擎执行时GUI线程会被挂起(相当于被冻结了),GUI更新会被保存在一个队列中等到JS引擎空闲时立即被执行。

js引擎线程

也称为JS内核,负责处理Javascript脚本程序。(例如V8引擎)

JS引擎线程负责解析Javascript脚本,运行代码。

JS引擎一直等待任务队列中任务的到来,然后加以处理,一个Tab页(renderer进程)中只有一个JS线程在运行

同样注意,GUI渲染线程与JS引擎线程是互斥的。所以如果JS执行的时间过长,要放在body下面,否则就会导致页面渲染加载阻塞。

事件触发线程

管理着事件队列

监听事件,符合条件时把回调函数放入事件队列中

定时触发器线程

setInterval与setTimeout在此线程中计时完毕后,把回调函数放入事件队列中

浏览器定时计数器并不是由JavaScript引擎计数的,(因为JavaScript引擎是单线程的, 如果处于阻塞线程状态就会影响记计时的准确),因此通过单独线程来计时并触发定时(计时完毕后,添加到事件队列中,等待JS引擎空闲后执行)

注意,W3C在HTML标准中规定,规定要求setTimeout中低于4ms的时间间隔算为4ms。

异步http请求线程

检测到XHR对象状态变化时,将回调函数放入事件队列中

event loop整体流程

3. repaint、reflow

repaint

repiant或者redraw遍历所有的节点检测各节点的可见性、颜色、轮廓等可见的样式属性,然后根据检测的结果更新页面的响应部分。

当render tree中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的,比如background-color。则就叫称为重绘

reflow

reflow指的是计算页面布局。某个节点reflow时会重新计算节点的尺寸和位置,而且还有可能触发其子节点、祖先节点和页面上的其他节点reflow。在这之后再触发一次repaint。

当render tree中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流,每个页面至少需要一次回流,就是在页面第一次加载的时候。

导致reflow的操作

调整窗口大小

改变字体

增加或者移除样式表

内容变化,比如用户在input框中输入文字

激活 CSS 伪类,比如 :hover (IE 中为兄弟结点伪类的激活)

操作 class 属性

脚本操作 DOM

计算 offsetWidth 和 offsetHeight 属性

设置 style 属性的值

它们会大大影响web性能,如何减少reflow、repaint

不要通过父级来改变子元素样式,最好直接改变子元素样式,改变子元素样式尽可能不要影响父元素和兄弟元素的大小和尺寸

尽量通过class来设计元素样式,切忌用style多次操作单个属性

实现元素的动画,对于经常要进行回流的组件,要抽离出来,它的position属性应当设为fixed或absolute

权衡速度的平滑。比如实现一个动画,以1个像素为单位移动这样最平滑,但reflow就会过于频繁,CPU很快就会被完全占用。如果以3个像素为单位移动就会好很多。

不要用tables布局的另一个原因就是tables中某个元素一旦触发reflow就会导致table里所有的其它元素reflow。在适合用table的场合,可以设置table-layout为auto或fixed,

这样可以让table一行一行的渲染,这种做法也是为了限制reflow的影响范围。

css里不要有表达式expression

减少不必要的 DOM 层级(DOM depth)。改变 DOM 树中的一级会导致所有层级的改变,上至根部,下至被改变节点的子节点。这导致大量时间耗费在执行 reflow 上面。

避免不必要的复杂的 CSS 选择器,尤其是后代选择器(descendant selectors),因为为了匹配选择器将耗费更多的 CPU。

尽量不要过多的频繁的去增加,修改,删除元素,因为这可能会频繁的导致页面reflow,可以先把该dom节点抽离到内存中进行复杂的操作然后再display到页面上。

请求如下值offsetTop, offsetLeft, offsetWidth, offsetHeight,scrollTop/Left/Width/Height,clientTop/Left/Width/Height,浏览器会发生reflow,建议将他们合并到一起操作,可以减少回流的次数。

@ CSS中有哪些常用选择器?

一、CSS选择器有哪些

CSS中的选择器很多,比如:ID选择器,类选择器,通配符选择器,伪类选择器等等,接下来主要介绍常用的几个。

1.标签选择器

语法:标签名{},eg:h1{}//为所有的h1元素设置样式。

2.ID选择器

语法:#id名{}//id值唯一不能重复,eg:#top{}//为id为top的元素设置样式。

3.类选择器

语法:.class{},eg:.box{}//为所有的class值为box的元素设置样式。

4.组选择器

语法:选择器1,选择器2,选择器N{},eg:#box1,.box2,p{}//为id为box1,class为box2和p的元素共同设置样式。

5、通配符选择器

语法:*{},eg:*{font-size:16px}//将整个页面字体大小设为16px。

6.后代选择器

语法:选择器1选择器2{},eg:p.aa{}//选中指定祖先元素p的指定后代.aa。

7.子元素选择器

语法:父元素>子元素{},eg:p>.box{}//选中父元素p的指定子元素.box。注意与后代元素选择器的区别

8.伪类选择器

伪类可以用来表示一些特殊的状态,如:

:link-未访问过的超链接。

:visited-已访问过的超链接。

:hover-鼠标经过的元素。

:active-正在点击的元素。

eg:a:hover{color:red}//鼠标经过a标签时,颜色变为红色。

二、CSS选择器的优先级顺序

当同一属性的不同值都作用到了同一个元素时,如果定义的属性之间有冲突,那么应该用谁的值的,这个时候就涉及到CSS的优先级顺序了。

1.在属性后面使用!important会覆盖页面内任何位置定义的元素样式。

2.作为style属性写在元素内的内部样式

3.id选择器

4.类选择器

5.标签选择器

6.通配符选择器

7.浏览器自定义或继承的

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。