整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

element-plus在js页面对message的

element-plus在js页面对message的导入

漏补缺

关于上一篇vue引入element-ui后界面空白中,提到了vue3.0配合vue-cli@4.5以上需要使用element-plus替代element-ui来实现ui界面的问题。需要补充的就是message的调用。

message就是顶部提示,三秒消失的提示框。常用的就是success/warning/info/error。

当然如果是vue组件,自然可以直接对message直接起作用。但是如果是在js文件里,就需要导入message。参考官网引入。

import { ElMessage } from 'element-plus';

使用

ElMessage.success(options)

正文部分

今日无正文。

每天面试题

v-if和v-show的区别

展示的效果其实是相同的,只是在隐藏元素的时候效果会有区别。

相同:

  • v-if与v-show都可以动态控制dom元素显示隐藏,

不同:

  • v-if是动态的向DOM树内添加或者删除DOM元素。
  • v-show本质是利用标签的display属性,通过visibilitynone控制显隐。

  • v-if="false"在DOM不能获取到该标签。
  • v-show=false在DOM中仍能获取到该标签。

  • v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁的重建内部的事件监听和子组件。
  • v-show其实是在控制css。

  • v-if初始值为false,就不会编译了。
  • v-show都会编译,初始值为false,只是将display设为none,但它也编译了。

  • v-if不停地销毁和创建。
  • v-show只编译一次,后面其实就是控制css,故v-show性能更好一点。

  • 总结:频繁切换使用v-show,不频繁则使用v-if。
  • 提示:不推荐同时使用 v-ifv-for

display:none与visibility:hidden的区别

相同:

  • 都是隐藏标签,对应的标签仍存在DOM结构中

不同:

  • 标签设置display: none后,不会占据该标签原来所在的位置,会触发重流(回流),HTML元素(对象)的宽度、高度等各种属性值都将“丢失”
  • 标签设置visibility: hidden后,仍占据原来的位置,会触发重绘,HTML元素(对象)仅仅是在视觉上看不见(完全透明),即是说它仍具有高度、宽度等属性值

  • visibility具有继承性。给父元素设置visibility:hidden;子元素也会继承这个属性。但是如果重新给子元素设置visibility: visible,则子元素又会显示出来。这个和display: none有着质的区别

  • visibility: hidden不会影响计数器的计数。visibility: hidden虽然让一个元素不见了,但是其计数器仍在运行。这和display: none完全不一样。

  • CSS3的transition支持visibility属性,但是并不支持display。由于transition可以延迟执行,因此可以配合visibility使用纯css实现hover延时显示效果。提高用户体验。

回流与重绘

  • 重流必定导致重绘,重绘不一定重流。

  • 部分渲染树(或者整个渲染树)需要重新分析并且节点尺寸需要重新计算会发生回流。
  • 由于节点的几何属性发生改变或者由于样式发生改变,例如改变元素背景色时,屏幕上的部分内容需要更新时只会发生重绘。

触发回流和重绘的情况

  • 添加、删除、更新 DOM 节点------触发回流和重绘
  • 通过 display: none 隐藏一个 DOM 节点------触发回流和重绘
  • 通过 visibility: hidden 隐藏一个 DOM 节点------只触发重绘,因为没有几何变化
  • 移动或者给页面中的 DOM 节点添加动画------触发回流和重绘
  • 用户行为,例如调整窗口大小,改变字号,或者滚动------触发回流和重绘
  • 添加一个样式表,调整样式属性------触发回流和重绘
  • offsetWidth,width,clientWidth,scrollTop/scrollHeight的计算------触发回流和重绘,使浏览器将渐进回流队列Flush

减少回流与重绘

  • 避免逐项更改样式。最好一次性更改style属性,或者将样式列表定义为class并一次性更改class属性。
  • 避免循环操作DOM。创建一个documentFragment或div,在它上面应用所有DOM操作,最后再把它添加到window.document。
  • 避免循环读取offsetLeft等属性。在循环之前把它们存起来。
  • 绝对定位具有复杂动画的元素。绝对定位使它脱离文档流,否则会引起父元素及后续元素大量的回流。

今天的分享就到这里,vue的学习被prototype搞崩了,所以今日无正文。

就这样了,ばいばい

isibility:hidden和display:none的区别在于:

1.作用不同:visibility:hidden将元素隐藏,但是在网页中该占的位置还是占着。display:none将元素的显示设为无,即在网页中不占任何的位置。

2.使用后HTML元素有所不同:visibility:hidden,使用该属性后,HTML元素(对象)仅仅是在视觉上看不见(完全透明),而它所占据的空间位置仍然存在,也即是说它仍具有高度、宽度等属性值。display:none,使用该属性后,HTML元素(对象)的宽度、高度等各种属性值都将“丢失”。

3.定义不同:visibility属性指定一个元素是否是可见的。display这个属性用于定义建立布局时元素生成的显示框类型。

元素隐藏和显示最常用的为 display:none 和 visibility:hidden

dispaly:none 设置该属性后,该元素下的元素都会隐藏,占据的空间消失

visibility:hidden 设置该元素后,元素虽然不可见了,但是依然占据空间的位置

其他区别

1.visibility 具有继承性,其子元素也会继承此属性,若设置 visibility:visible,则子元

素会显示

2.visibility 不会影响计数器的计算,虽然隐藏掉了,但是计数器依然继续运行着。

3.在 CSS3 的 transition 中支持 visibility 属性,但是不支持 display,因为 transition 可以延迟执行,因此配合 visibility 使用纯 CSS 实现 hover 延时显示效果可以提高用户体验

4.display:none 会引起回流(重排)和重绘 visibility:hidden 会引起重绘。

#挑战30天在头条写日记#

元素虽然强大,但是还是有一些特定的标签是不支持伪元素 before 和 after 的。

诸如 <img\><input\><iframe\>,这几个标签是不支持类似 img::before 这样使用。

究其原因,要想要标签支持伪元素,需要这个元素是要可以插入内容的,也就是说这个元素要是一个容器。而 input,img,iframe 等元素都不能包含其他元素,所以不能通过伪元素插入内容。

纯CSS实现title属性hover效果

我们都知道,在 HTML 标签中有这样一个属性 – title,该属性规定关于元素的额外信息,就是我们可以往 title 里面填入一段文字,鼠标移到元素上时就会显示这段文本。

像是这样 <element title="value" >。效果如下:

;

但是这个 hover 框有两个小问题:

  • 响应太慢,通常鼠标 hover 上去要隔 1s 左右才会出现这个 title 框

  • 框体结构无法自定义,弹出框的样式无法自定义

嗯,通常要解决上面的方法,或者说我们需要一个鼠标 hover 上去的时候弹出一个提示层的效果都不会采用 title 属性,而是配合使用 JS 模拟一个弹出层。

这里有一个纯 CSS 的方案可以解决这个场景,运用了伪元素,先上 Demo:

鼠标 hover 一下文字,发现弹出层响应十分迅速(因为就是 CSS hover,没有延迟)。并且这里的弹出层的样式也可以完全自定义,没有用到 JS 代码,并且查看 HTML 代码可以看到不需要多余的标签。

怎么实现的呢?主要是运用了伪元素的 content属性,content通常是用于在伪元素中插入内容的。而其中有一句语法content: attr(value)类似这样,可以读取对应 HTML 标签的value属性。也就是:

  1. 假设一个 HTML 标签定义为: <div data-msg="ABC">

  2. 那么该 div 对应的伪类如果设置了 content:attr(data-msg),就可以读取到 data-msg 的值,相当于content:"ABC"

而且框体由于是伪类生成的,所以我们可以自定义它的样式及位置,运用这个效果,我们应用在可以在许多无法正常把信息展示完的地方。

借用伪元素实现多列均匀布局

我们经常需要实现多列均匀布局,能够自适应各种情况,如下:

在移动端我们可以使用 flex 布局,但是在 PC 端如果要兼容 IE6+ ,通常都需要一些额外的标签控制最后一个元素或者配合 JS 进行运算。

我们知道,有个 text-align:justify可以实现两端对齐文本效果,一开始我猜测使用它可以实现:

试了一下是不行的,并没有实现所谓的两端对齐,查找原因,在 W3C找到这样一段解释:

最后一个水平对齐属性是 justify,它会带来自己的一些问题。CSS 中没有说明如何处理连字符,因为不同的语言有不同的连字符规则。规范没有尝试去调和这样一些很可能不完备的规则,而是干脆不提这个问题。

额,我看完上面一大段解释还是没明白上面意思,再继续查证,才找到原因:

虽然 text-align:justify 属性是全兼容的,但是要使用它实现两端对齐,需要注意在模块之间添加[空格/换行符/制表符]才能起作用。

也就是说每一个 <i>1</i>间隙,至少需要有一个空格或者换行或者制表符才行。

我尝试给每一块中间添加一个换行符,发现还是不行:

再寻找原因,是出在最后一个元素上面,然后我找到了 text-align-last这个属性,text-align-last 属性规定如何对齐文本的最后一行,并且 text-align-last 属性只有在 text-align 属性设置为 “justify” 时才起作用。

尝试给容器添加 text-align-last:justify,发现终于可以了,多列均匀布局:

但是一看兼容性,惨不忍睹,只有 IE 和 最新的 chrome 支持 text-align-last 属性,也就是说,如果你不是在使用 IE 或者 最新版的 chrome 观看本文,上面这个 codePen 例子还是没有均匀分布。

好,铺垫了这么久,终于可以引出本文的主角伪元素了,上面说了要使用 text-align:justify实现多列布局,要配合text-align-last,但是它的兼容性又不好,真的没办法了么,其实还是有的,使用伪元素,可以完美实现:

通过给伪元素 :after 设置 inline-block,配合容器的text-align: justify就可以轻松实现多列均匀布局了。配合几句 hack 代码,可以实现兼容到 IE6+ ,最重要的是代码不长,很好理解。

本文主要就是多介绍了伪元素的两种实用方法,更多伪元素的妙用可以戳

我另一篇讲述 CSS 伪元素的文章: 【CSS进阶】伪元素的妙用–单标签之美,看完本文觉得有意思的可以再去看看上一篇。

也希望觉得不错的同学顺手在我的 Github 点个 star : CSS3奇思妙想。

希望这篇文章对大家有所帮助,尤其是在对问题解决的思维层面上。

到此本文结束,如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。