最近在进行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问题的更多相关文章

  1. 前端学习笔记系列一:10整体移动vscode代码块、VSCode 使用 stylus,配置格式化设置、在vue项目中引入bootstrap

    1.整体移动vscode代码块 凭借操作的经验我们能够轻松地知道将代码整体往右移只需选中代码按Tab键即可.其实往左移也很简单: 选中之后按下 shift+Tab键 即可. 2.VSCode 使用 s ...

  2. vue项目引入bootstrap正确姿势

    vue如何引入bootstrap 最近在玩全栈,自然少不了vue的使用.使用vue-cli生成的项目想引入bootstrap,需要先安装相应的npm包,然后在代码中显示引入. 1.安装依赖包: cnp ...

  3. 如何在jsp中引入bootstrap

    如何在jsp中引入bootstrap包: 1.首先在http://getbootstrap.com/上下载Bootstrap的最新版. 您会看到两个按钮: Download Bootstrap:下载 ...

  4. vue中引入js,然后new js里的方法

    阿里云Web播放器Web端使用SDK说明:https://help.aliyun.com/document_detail/51991.html?spm=5176.11065259.1996646101 ...

  5. vue中引入mintui、vux重构简单的APP项目

    最近在学习vue时也了解到一些常用的UI组件,有用于PC的和用于移动端的.用于PC的有:Element(饿了么).iView等:用于移动端APP的有Vux.Mint UI(饿了么).Vant(有赞团队 ...

  6. vue中使用第三方插件animate.css实现动画效果

    vue中使用第三方插件animate.css实现动画效果1.首先先引入第三方类animated.css2.将你所需要动画的标签用包裹起来3.在transition元素中添加enter-active-c ...

  7. vue中引入babel步骤

    vue中引入babel步骤 vue项目中普遍使用es6语法,但有时我们的项目需要兼容低版本浏览器,这时就需要引入babel插件,将es6转成es5. 1.安装babel-polyfill插件 npm ...

  8. vue中引入json数据,不用本地请求

    1.我的项目结构,需要在Daily.vue中引入daily.js中的json数据 2.把json数据放入一个js文件中,用exports导出,vscode的json格式太严格了,很多数据,调了一个多小 ...

  9. 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 ...

随机推荐

  1. Angular集成admin-lte框架

    其实上一篇里面提到的集成datatables.net就是admin-lte里面的一个子插件,不过这个子插件,他是自带types定义文件的,admin-lte这个东西在DefinitelyTyped里面 ...

  2. Django Channels简明实践

    1.安装,如果你已经安装django1.9+,那就不要用官方文档的安装指令了,把-U去掉,直接用: sudo pip install channels 2.自定义的普通Channel的名称只能包含a- ...

  3. R语言学习 第十篇:操作符

    运算符是R语言中最基础的存在,熟悉运算符的使用,是熟练使用R处理数据的基础,操作符,顾名思义,是对数据进行运算的符号,R有自己的一套操作符,实现变量的赋值,引用,运算等功能. 一,赋值符号 为变量赋值 ...

  4. Niop2017初赛滚粗记

    初赛踢蹬滚粗 TOT (╯°Д°)╯︵┻━┻ ヽ(`Д´)ノ︵ ┻━┻ ┻━┻ 排序啊排序,净是排序,自打我学了C++就再没学过排序!!wtf! (╯°Д°)╯︵ /(.□ . )我tm怎么知道建国那 ...

  5. bestcoder round 74 div2

    随便看了一场以前的bestcoder,然后顺便写了一下,都不码的样子 有中文题面,这里就不写题目大意了 T1. 刚开始想复杂了,T1可能是4道题里面想的最久的 我们大概弄一下就可以发现,如果a[i]& ...

  6. 通过jstack与jmap分析一次cpu打满的线上故障

    一.发现问题 下面是线上机器的cpu使用率,可以看到从4月8日开始,随着时间cpu使用率在逐步增高,最终使用率达到100%导致线上服务不可用,后面重启了机器后恢复. 二.排查思路 简单分析下可能出问题 ...

  7. Tornado day1

    Tornado 之路由配置 首先导入模块,使用Application方法中可配置多个路由,格式必须为列表中是元组 元组的第一个是配置的url,第二个参数时自定义的类(继承自RequestHandler ...

  8. [ 搭建Redis本地服务器实践系列 ] :序言

    说起来,是在一个气候适宜的下午,虽然临近下班,不过办公室里还是充满了忙碌的身影,不时的还会从办公区传来小伙伴们为了一个需求而激烈争论的声音,自从入了互联网这个行业,说实话,也就很少休息了,当然了也不全 ...

  9. Maven install命令理解

    每一个构建都需要唯一的坐标来标识位置,我们根据坐标位置就能够下载构建至本地仓库.那么如果我们是内部项目,自定义的构建并不公开至网络上,项目成员又想依赖他怎么办呢?想想maven找寻构建的步骤. 先找寻 ...

  10. linux下Clang和gcc的区别

    Clang 比 GCC 编译器的优势: 编译速度更快 编译产出更小 出错提示更友 好,比如 clang 在编译过程可以直接指出相对简单的出错位置以及它 “ 认为 ” 正确的方式 . 内置有静态分析工具 ...