我正在尝试为一个位于960像素宽网页的远右上角的触发器定位Bootstrap弹出式气泡。
理想情况下,我希望将气泡定位在底部,并用CSS移动箭头(使箭头位于气泡的右上角)。不幸的是,“placement”:“bottom”定位还不够,因为它会将气泡居中放置在触发器下方。
我正在寻找解决方案,可以将气泡静态地放置在触发器下面和左侧。
我正在尝试为一个位于960像素宽网页的远右上角的触发器定位Bootstrap弹出式气泡。
理想情况下,我希望将气泡定位在底部,并用CSS移动箭头(使箭头位于气泡的右上角)。不幸的是,“placement”:“bottom”定位还不够,因为它会将气泡居中放置在触发器下方。
我正在寻找解决方案,可以将气泡静态地放置在触发器下面和左侧。
这个可以用。已测试。
.popover {
top: 71px !important;
left: 379px !important;
}
viewport
是如何正确定位的。这允许容器绑定到约束,而无需手动覆盖位置(特别是固定/设置位置)。 - Jonathon Hibbard只需向您的弹出窗口添加属性即可!如果您在赶时间,请参阅我的JSFiddle。
我们希望为特定的弹出窗口添加ID或类,以便我们可以通过CSS自定义它们。
请注意,我们不想自定义所有弹出窗口!这是一个可怕的想法。
以下是一个简单的示例-显示弹出窗口如下:
// We add the id 'my-popover'
$("#my-button").popover({
html : true,
placement: 'bottom'
}).data('bs.popover').tip().attr('id', 'my-popover');
#my-popover {
left: -169px!important;
}
#my-popover .arrow {
left: 90%
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
<button id="my-button" data-toggle="popover">My Button</button>
我创建了一个jQuery插件,提供了4个额外的位置:topLeft、topRight、bottomLeft和bottomRight。
只需包含压缩或未压缩的js文件,并在同一文件夹中具有匹配的css文件(压缩与未压缩)。
https://github.com/dkleehammer/bootstrap-popover-extra-placements
最好的解决方案是使用Bootstrap Popover的viewport选项,这将适用于所有情况,特别是如果您的网站具有流体宽度。
这将使弹出框在您分配的选择器内占据宽度。因此,如果触发按钮位于容器的右侧,则Bootstrap箭头也将出现在右侧,而弹出框位于该区域内。 请参见jsfiddle.net
如果您想要与容器边缘保持一些空间,也可以使用padding。 如果不需要填充,请使用viewport:'.container'
$('#popoverButton').popover({
container: 'body',
placement: "bottom",
html: true,
viewport: { selector: '.container', padding: 5 },
content: '<strong>Hello Wooooooooooooooooooooooorld</strong>'
});
在以下HTML示例中:
<div class="container">
<button type="button" id="popoverButton">Click Me!</button>
</div>
并且使用CSS:
.container {
text-align:right;
width: 100px;
padding: 20px;
background: blue;
}
与视口类似,在Bootstrap 4版本中,气泡弹出框引入了新选项boundary
https://getbootstrap.com/docs/4.1/components/popovers/#options
viewport
是解决此问题的关键。附加的 CSS 是个人偏好。 - Jonathon Hibbard.container
中删除text-align: right
,那么工具提示将具有另一个方向。 - Datsoscase 'bottom-right':
tp = {top: pos.top + pos.height, left: pos.left + pos.width}
break
&.bottom-right { margin-top: -2px; }
&.bottom-right .tooltip-arrow { #popoverArrow > .bottom(); }
在popover.js和popover.less中做同样的事情。基本上,无论您在哪里找到其他位置的代码,请相应地添加您想要的位置。
正如我之前提到的,这部分解决了问题。现在我的问题是弹出框的小箭头没有出现。
注意:如果您希望将弹出框放在左上角,请使用“.top”的顶部属性和“.left”的左侧属性。
引导bootstrap 3.0.0:
.popover{ right:0!important; }
并且也要修改
.popover { max-width:WWWpx!important; }
其中WWW是您正确的最大宽度,以显示弹出窗口内容。
case 'bottom-right':
tp = {top: pos.top + pos.height + 10, left: pos.left + pos.width - 40}
break
css
.popover.bottom-right .arrow {
left: 20px; /* MODIFIED */
margin-left: -11px;
border-top-width: 0;
border-bottom-color: #999;
border-bottom-color: rgba(0, 0, 0, 0.25);
top: -11px;
}
.popover.bottom-right .arrow:after {
top: 1px;
margin-left: -10px;
border-top-width: 0;
border-bottom-color: #ffffff;
}
$(".trigger").popover({
html: true,
placement: 'bottom',
trigger: 'click',
template: '<div class="popover popover--topright" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
});
.popover.popover--topright {
/* margin-top: 0px; // Use to change vertical position */
margin-right: 40px; /* Use to change horizontal position */
}
.popover.popover--topright .arrow {
left: 88% !important; /* fix arrow position */
}
当然可以。幸运的是,Bootstrap弹出框/工具提示文档中也有一种干净的方法来实现此目的。
let mySpecialTooltip = $('#mySpecialTooltip);
mySpecialTooltip.tooltip({
container: 'body',
placement: 'bottom',
html: true,
template: '<div class="tooltip your-custom-class" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>'
});
.your-custom-class {
bottom: your value;
}
也许你不需要这个逻辑来实现响应式行为。
例如:
placement: 'auto left'
Bootstrap 3中placement属性有一个auto值。Bootstrap文档:
当指定为"auto"时,它将动态重新定位工具提示。例如,如果placement是"auto left",则工具提示将在可能的情况下显示在左侧,否则将显示在右侧。