对于element-UI还有ant-design-vue里面的组件除了api修改样式之外还可以根据源码修改组件样式。
但是难度比较大,一般要在github里面找到源码然后读懂源码修改样式。
<div @click.stop="toggleSubMenu(index)" :class="{'menu-item': true, 'selected': selectedIndex === index}">
{{ item.name }}
</div>
这段代码里面::class="{'menu-item': true, 'selected': selectedIndex === index}"表示
menu-item属性一直生效,selected样式当selectedIndex = index的时候生效。
打开菜单是click.stop的经典应用。
原理:在父子标签中如果同时存在点击事件首先会只执行子组件中的事件然后执行父组件的事件。
应用场景:在点击input输入框的时候展示菜单,点击其他部分则关闭菜单。那么在点击菜单部分的时候也算在input框外部,但是此时不能关闭菜单所以要防止关闭菜单。注意只对父组件起作用不对其他祖先组件起作用
代码实例:
<div class="schMsg" @click="toggleMenu" @click.stop>
<div class="dropdown-input">
<span>|</span>
<input type="text" v-model="addInfoForm.classfy" placeholder="点击选择研究方向" readonly />
<img src="./assets/next.png" alt="Image" @click="nextStep" style="cursor: pointer;">
</div>
<div v-if="menuVisible" class="dropdown-menu">
<ul>
<li v-for="(item, index) in tmpoptions" :key="index">
<div @click.stop="toggleSubMenu(index)"
:class="{ 'menu-item': true, 'selected': selectedIndex === index }">
{{ item.name }}
</div>
<!-- 二级菜单 -->
<ul v-if="item.subMenuVisible" class="sub-menu">
<li v-for="(subItem, subIndex) in item.children" :key="subIndex"
class="sub-menu-item" @click="selectSubItem(index, item, subItem)">
<span>
{{ subItem }}
</span>
</li>
</ul>
</li>
</ul>
</div>
</div>
父级点击函数:toggleMenu(打开菜单)
子集点击函数:toggleSubMenu,点击组织toggleMenu发生并且执行toggleSubMenu函数。
举例:
首先事件定义为全局监听点击事件,函数是:
mounted() { document.addEventListener('mousedown', this.handleClickOutside); }
beforeDestroy() { document.removeEventListener('mousedown', this.handleClickOutside); }
handleClickOutside(event) { if (!this.$el.contains(event.target)) { this.menuVisible = false; } }
这个函数就是,全局监听,当点击事件放生的时候执行函数handleClickOutside
生命周期函数也叫钩子函数:
beforeCreate() created()
beforeMount() mounted()
beforeUpdate() updated()
activated() deactivated()
beforeDestroy() destroyed()
(1)beforeCreate()
(2)created() 常用
(3)beforeMount()
(4)mounted() 常用
(5)beforeUpdate()
(6) updated()
(7)activated()
(8)deactivated()
(9) beforeDestroy
(10)destroyed
在flex布局的时候,不能越级进行定位
例如
<div class='futher1'>
<div>
<div class='son'>
<div/>
<div/>
<div/>
在futher1div块下,只会对儿子标签进行修饰,不会对孙子标签进行修饰。
note:想到三层定位了,可以父亲相对定位。儿子相对定位,但是通过margin等来调整样式。在孙子标签内绝对定位。
<div @click="prevStep" class="image-container">
<img src="./assets/arrow.png" alt="返回" class="image">
<img src="./assets/arrowhover.png" alt="返回" class="image hover-image">
</div>
这个代码中class="image hover-image"
表示,这个img组件有两个类。同时拥有样式1:image和样式2:hover-image
.hover-image {
opacity: 0;
}
.image-container:hover .hover-image {
opacity: 1;
//表示透明度,此时为完全不透明
}
.image-container:hover .image:not(.hover-image) {
opacity: 0;
}
在这个样式中
.image-container:hover .hover-image
表示:在image-container类所在的标签下,如果鼠标悬停,那么类hover-image对应的标签的样式
.image-container:hover .image:not(.hover-image)
表示:在image-contianer中悬停,类名是image但不是hover-image的标签的样式
transition: opacity 0.3s ease;
是一个 CSS 属性,它用于定义当元素的 opacity
属性发生变化时,过渡效果的持续时间和缓动函数。具体解释如下:
transition
: 这是一个简写属性,用于设置一个或多个过渡效果。opacity
: 指定要过渡的属性,这里是透明度。0.3s
: 过渡效果的持续时间,这里是 0.3 秒。ease
: 缓动函数,定义过渡效果的速度变化方式。ease
表示从慢到快再到慢的过渡效果。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。