默认情况下,<b-modal>
显示在页面顶部。将属性centered
添加到标记时。它居中。
但是,我想在页面顶部显示一个带有一定间隙的模态 打开主页时会显示模态。
AppModal.vue
<template>
<b-modal ref="thisModalRef" :modal-class="my-modal" size="lg" hide-header hide-footer no-close-on-backdrop hide-header-close>
//...
</b-modal>
</template>
<script>
export default {
data () {
return {
mymodal: ['mymodal']
}
},
methods: {
hideModal () {
this.$refs.thisModalRef.hide()
},
showModal () {
this.$refs.thisModalRef.show()
}
}
}
</script>
<style scoped>
.mymodal > div {
position: absolute;
top: 300px;
right: 100px;
background-color: yellow;
}
</style>
AppHome.vue
<template>
<div>
// omitted
<AppModal ref="modalRef"></AppModal>
</div>
</template>
<script>
import AppModal from './AppModal'
export default {
components: {
AppModal
},
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
},
methods: {
showModal: function () {
this.$refs.modalRef.showModal()
}
},
mounted () {
this.showModal()
}
}
</script>
<style scoped>
// ommitted
</style>
与模态相关的HTML源
<div id="__BVID__16___BV_modal_outer_">
<div id="__BVID__16" role="dialog" class="modal fade show d-block mymodal" style="padding-right: 15px;">
<div class="modal-dialog modal-lg">
<div tabindex="-1" role="document" aria-describedby="__BVID__16___BV_modal_body_" class="modal-content">
<!---->
<div id="__BVID__16___BV_modal_body_" class="modal-body">
// ommitted
</div>
<!---->
</div>
</div>
</div>
<div id="__BVID__16___BV_modal_backdrop_" class="modal-backdrop fade show"></div>
</div>
如您所见,mymodal
类已正确应用。但div .modal-dialog
没有我给它的css属性。
在开发工具中找到的真实css属性
.modal-dialog {
position: relative;
width: auto;
margin: 0.5rem;
pointer-events: none;
}
我尝试将自定义类添加到<b-modal>
并设置样式。没有任何效果。
请帮忙。
答案 0 :(得分:2)
如果你想把模态放到特定的位置,下面是我的解决方案:
通过其props = <b-modal>
modal-class
然后将您的样式添加到myclass > div
您可以查看the github (line#:176),Bootstrap-vue会将一个div.modal-content
(包括标题/正文/英尺)放入一个div中,其中class =&#34; modal-dialog&#34;这是root的直接孩子。
这就是为什么上面的解决方案使用css selector = .myclass > div
。
如果你看一下dom树:一个bootstrap-vue模式的结构将是:
一个根div(myclass将添加到此处) - &gt;一个div与模态对话 - &gt;一个带模态内容的div - &gt;页眉/体/页脚
下面是一个示例:(我为模态对话框添加了不同的背景色,模态内容。)
app = new Vue({ //not vue, it is Vue
el: "#app",
data: {
myclass: ['myclass']
},
methods: {
showModal: function(){
this.$refs.myModalRef.show()
}
}
})
&#13;
.myclass > div {
position:absolute !important;
top: -10px !important;
left: -10px !important;
background-color:yellow !important;
}
.myclass > .modal-dialog > .modal-content {
background-color:red !important;
}
&#13;
<!-- Add this to <head> -->
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css"/>
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.css"/>
<!-- Add this after vue.js -->
<script src="https://unpkg.com/vue@2.5.16/dist/vue.js"></script>
<script src="//unpkg.com/babel-polyfill@latest/dist/polyfill.min.js"></script>
<script src="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js"></script>
<div id="app">
<b-button @click="showModal">
Open Modal
</b-button>
<b-modal ref="myModalRef" :modal-class="myclass" size="lg">
<h2>Test</h2>
</b-modal>
</div>
&#13;
答案 1 :(得分:1)
我用
<b-modal
body-class="modalcart"
ref="addToCart"
id="addToCarModal"
hide-footer
hide-header
>
<b-container class="text-center modal-product-content">
<img class="modal-image" src="~/assets/images/add-to-cart.png" alt=""/>
和:
<style lang="scss" scoped>
/deep/ .modalcart {
font-family: 'poppins-bold';
/deep/ .modal-product-content {
padding: 3rem;
margin: 0 auto !important;
/deep/ .modal-image {
height: 150px;
margin-bottom: 2rem;
}
}
...
}
</style>
然后工作!谢谢
请记住,如果没有 body-class 和 /deep/
我使用 node-sass、vue 3、vue-loader 15
答案 2 :(得分:0)
也许你可以尝试像margin-top: 100px
这样的东西。
答案 3 :(得分:0)
我认为这是因为Bootstrap的@media
断点。然后,在<style>
中,您只需覆盖它。
@media (min-width: 576px) {
.modal-dialog {
margin: .5rem auto;
}
}