Vue中引入bootstrap导致的CSS问题
最近在进行vue.js+webpack进行模块化开发的时候,遇到一个奇怪的问题。
问题是这样的:
1. 在main.js文件中引入bootstrap的js和css。
2. 自己写了一个Header.vue模块,其中的导航条使用的bootstrap的class和自己的class。
<ul class="navbar-nav my-navBar" id="my-navBar">
3. 在Header.vue中定义了一些ul li 和 a 标签的样式。
ul.my-navBar {
margin-left: 200px;
padding:;
color: #333;
float: left;
/* max-height: 75px; */
vertical-align: middle;
}
.my-navBar * {
margin:;
padding:;
list-style: none;
font-size: 16px;
font-family: "PingFangSC-Medium";
font-weight: bold;
color: #333333;
}
.my-navBar > li > a {
display: block;
text-decoration: none;
padding: 36px 30px !important;
border-bottom-style: solid;
border-bottom-width: 4px;
border-bottom-color: #fff;
border-top-style: solid;
border-top-width: 4px;
border-top-color: #fff;
}
#my-navBar > li > a :hover {
color: #f26e44;
}
.my-navBar > li > a :hover {
color: #f26e44;
}
4. 通过npm run dev启动项目并访问,按我想要的效果正常显示,本地的style覆盖了bootstrap中的css。
5. 通过npm run build编辑后,部署到negix中,就不能正常显示了。bootstrap的navbar-nav样式覆盖了我定义的一些样式。也就是说,编译后生成的app.css并不是完全和npm run dev时项目用的的css一样。
生效的顺序和范围变了。
疑点:
我搜索了一些文章,说bootstrap的样式覆盖是因为CSS的优先级机制问题,我按照CSS优先级机制尽量精确地设置了选择器,但是效果并不理想。应为并不清楚bootstrap的选择器到底是如何设置的,有些选择器非常强大,一直覆盖我的css。而且调试非常困难,因为在dev模式下是正常的,我只能不停地改css,build,copy到negix,刷线页面……来调试。
虽然也有人说,用!important来暴力解决,但是首先这并不优雅,其次,有些居然设置了!important也不起作用(what the fuck...)。
最后的解决办法:
在模块化vue开发中,<style>标签可以设置scoped属性。如果设置了scoped属性,这个style就是只属于本模块,不会产生全局影响。按道理来说这样的话,设置scope只会让我自定义的style作用范围更小,更不能覆盖掉全局引用的bootstrap的css了。然而。。。我设置了scope之后,神奇的事情发生了。我的css在build后起作用了。
<style scoped>
build后生成的css,会带有个data属性:
.mi-navBar>li>a[data-v-af9ae36c] {
display: block;
text-decoration: none;
padding: 36px 30px!important;
border-bottom-style: solid;
border-bottom-width: 4px;
border-bottom-color: #fff;
border-top-style: solid;
border-top-width: 4px;
border-top-color: #fff;
}
而且这次不知为什么,生成的css中,我自定义在<style scoped>中的css优先于bootstrap的css生效了。
Vue中引入bootstrap导致的CSS问题的更多相关文章
- 前端学习笔记系列一:10整体移动vscode代码块、VSCode 使用 stylus,配置格式化设置、在vue项目中引入bootstrap
1.整体移动vscode代码块 凭借操作的经验我们能够轻松地知道将代码整体往右移只需选中代码按Tab键即可.其实往左移也很简单: 选中之后按下 shift+Tab键 即可. 2.VSCode 使用 s ...
- vue项目引入bootstrap正确姿势
vue如何引入bootstrap 最近在玩全栈,自然少不了vue的使用.使用vue-cli生成的项目想引入bootstrap,需要先安装相应的npm包,然后在代码中显示引入. 1.安装依赖包: cnp ...
- 如何在jsp中引入bootstrap
如何在jsp中引入bootstrap包: 1.首先在http://getbootstrap.com/上下载Bootstrap的最新版. 您会看到两个按钮: Download Bootstrap:下载 ...
- vue中引入js,然后new js里的方法
阿里云Web播放器Web端使用SDK说明:https://help.aliyun.com/document_detail/51991.html?spm=5176.11065259.1996646101 ...
- vue中引入mintui、vux重构简单的APP项目
最近在学习vue时也了解到一些常用的UI组件,有用于PC的和用于移动端的.用于PC的有:Element(饿了么).iView等:用于移动端APP的有Vux.Mint UI(饿了么).Vant(有赞团队 ...
- vue中使用第三方插件animate.css实现动画效果
vue中使用第三方插件animate.css实现动画效果1.首先先引入第三方类animated.css2.将你所需要动画的标签用包裹起来3.在transition元素中添加enter-active-c ...
- vue中引入babel步骤
vue中引入babel步骤 vue项目中普遍使用es6语法,但有时我们的项目需要兼容低版本浏览器,这时就需要引入babel插件,将es6转成es5. 1.安装babel-polyfill插件 npm ...
- vue中引入json数据,不用本地请求
1.我的项目结构,需要在Daily.vue中引入daily.js中的json数据 2.把json数据放入一个js文件中,用exports导出,vscode的json格式太严格了,很多数据,调了一个多小 ...
- vue中引入mui报Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them的错误
在vue中引入mui的js文件的时候,报如下的错误: 那是因为我们在用webpack打包项目时默认的是严格模式,我们把严格模式去掉就ok了 第一步:npm install babel-plugin-t ...
随机推荐
- Flask框架之 --- 我的第一个个人网站(雏形)
现在还是个静态网站 , 而且这里的Flask也只是起到了提供虚拟web服务器的作用 , 下一步是实现数据库的连接 , 实现简单的动态访问.
- ffmpeg 在windows 上编译
我在网上看到了一些资料,但是很多都不怎么全,而且 总会碰到这样或那样的问题,下面是我的一些经验,分享一下,当然也参考了大侠们的东西呵呵! 环境: OS:windows mingw +yasm+fmpe ...
- 新导入的eclipse项目报错,找不到java包,找不到web.xml文件报错。
新导入的项目可能会出现报错,特别是web项目.我这里提供一种解决方法: 1.右击项目,选择“属性” 2.选择 Resource->java build path->libraries 图中 ...
- Linux(Redhat)安装Redis
Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.(百度百科 0.0) 下载:http://www.redis. ...
- 拿到月薪30K,必选一些Python好书!
论述: Python是所有编程语言中与人工智能最紧密相连的编程语言,阿尔法狗都在使用的 Python 语言. 教育部早在两个月前(自2018年3月起)就以及公布:大学生全国计算机二级考试中必考Pyth ...
- ArcticCore重构-问题列表1
基于官方arc-stable-9c57d86f66be,AUTOSAR版本3.1.5 基本问题 Arctic Core中的代码组织有很多有待改进的地方,这里先提出几点: 1. 头文件引用混乱,所有头文 ...
- RN 开发常见小问题
1 定时器每隔多少秒调用一次 直接贴代码 可复制使用 componentWillUnmount() { this.timer && clearInterval(this.timer) ...
- Vlan ---虚拟局域网
VLAN是一种将局域网(LAN)设备从逻辑上划分(注意,不是从物理上划分)成一个个网段(或者说是更小的局域网LAN),从而实现虚拟工作组(单元)的数据交换技术.VLAN(Virtual Local A ...
- 注解@PostConstruct与@PreDestroy 特性说明
简介 Java EE5 引入了@PostConstruct和@PreDestroy这两个作用于Servlet生命周期的注解,实现Bean初始化之前和销毁之前的自定义操作.此文主要说明@PostCons ...
- 自动化运维工具sshd,expect,pssh,rsync详解
ssh secure shell,安全的远程登录:openssh和dropbear都是它的开源实现,ssh协议有v1和v2俩个版本,现在使用的都是v2版,v1已经不安全了:ssh基于DH算法做密钥交换 ...