最近在进行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. Space Golf~物理题目

    Description You surely have never heard of this new planet surface exploration scheme, as it is bein ...

  2. Kali Linux Live USB初始化+使用日记

    1.Live USB制作官方guide:Making a Kali Bootable USB Drive:https://docs.kali.org/downloading/kali-linux-li ...

  3. Android Studio使用手记

    1.官方的Tip and Tricks:http://developer.android.com/intl/zh-cn/sdk/installing/studio-tips.html 2.项目的目录树 ...

  4. 通知:QQ互联网回调地址校验加强

    今天公司网站第三方qq快捷登录突然登录不了了,之前明明是ok的. 可以看到有一个错误信息提示 在qq互联的官网看到了这个通知 然后解决办法是: 1.打开http://open.qq.com/tools ...

  5. kindeditor修改允许上传的图片、视频、音频大小

    在jsp文件夹下,有个upload_json.jsp文件,打开找到: //最大文件大小 ; 修改数值即可.默认1000000,即为1M.

  6. html5 标签在 IE 下使用

    (function(){if(!/*@cc_on!@*/0)return;var e = "abbr,article,aside,audio,bb,canvas,datagrid,datal ...

  7. Page.ClientScript.RegisterStartupScript用法小结

    使用类型.键.脚本文本和指示是否添加脚本标记的布尔值向 Page 对象注册启动脚本. 参数 type 要注册的启动脚本的类型. key 要注册的启动脚本的键. script 要注册的启动脚本文本. a ...

  8. Django REST framework+Vue 打造生鲜超市(七)

    目录 生鲜超市(一)    生鲜超市(二)    生鲜超市(三) 生鲜超市(四)    生鲜超市(五)    生鲜超市(六) 生鲜超市(七)    生鲜超市(八)    生鲜超市(九) 生鲜超市(十) ...

  9. js 写21点

    ======================================= var count = 0; function cc(card) {// Only change code below ...

  10. 使用Java API连接和操作HBase数据库

    创建的数据库存储如下数据 表结构 java代码 public class HbaseTest { /** * 配置ss */ static Configuration config = null; p ...