自定义 Twitter Bootstrap 弹出框箭头

15
我无法找到相关信息,但是我很难接受它是不可行的。
如何自定义弹出框的箭头?我已经尝试修改类.arrow等,但弹出框位置会被搞乱。
那么,正确的方法是什么?我找不到任何文档。
以下是我一直使用的类,但箭头看起来都是错的:
.popover {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 1010;
    display: none;
    padding: 5px;
}

    .popover.top {
        margin-top: -5px;
    }

    .popover.right {
        margin-left: 5px;
    }

    .popover.bottom {
        margin-top: 5px;
    }

    .popover.left {
        margin-left: -5px;
    }

    .popover.top .arrow {
        bottom: 0;
        left: 50%;
        margin-left: -5px;
        border-left: 5px solid transparent;
        border-right: 5px solid transparent;
        border-top: 5px solid #000000;
    }

    .popover.right .arrow {
        top: 50%;
        left: 0;
        margin-top: -5px;
        border-top: 5px solid transparent;
        border-bottom: 5px solid transparent;
        border-right: 5px solid #000000;
    }

    .popover.bottom .arrow {
        top: 0px;
        left: 50%;
        margin-left: -5px;
        border-left: 9px solid transparent;
        border-right: 9px solid transparent;
        border-bottom: 19px solid #000000;
    }

    .popover.left .arrow {
        top: 50%;
        right: 0;
        margin-top: -5px;
        border-top: 5px solid transparent;
        border-bottom: 5px solid transparent;
        border-left: 5px solid #000000;
    }

    .popover .arrow {
        position: absolute;
        width: 0;
        height: 0;
    }

.popover-inner {
    padding: 3px;
    width: auto;
    overflow: hidden;
    background: #000000;
    background: rgba(0, 0, 0, 0.8);
    -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
    -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
    box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
}

.popover-title {
    padding: 9px 15px;
    line-height: 1;
    background-color: #252525;
    -webkit-border-radius: 3px 3px 0 0;
    -moz-border-radius: 3px 3px 0 0;
    border-radius: 3px 3px 0 0;
    background-color: rgba(37, 37, 37, 0.7);
    font-size: 14px;
    color: #7e7e7e;
}

.popover-content {
    padding: 14px;
    background-color: #252525;
    -webkit-border-radius: 0 0 3px 3px;
    -moz-border-radius: 0 0 3px 3px;
    border-radius: 0 0 3px 3px;
    -webkit-background-clip: padding-box;
    -moz-background-clip: padding-box;
    background-clip: padding-box;
    background-color: rgba(37, 37, 37, 0.7);
}

    .popover-content p, .popover-content ul, .popover-content ol {
        margin-bottom: 0;
    }

    .popover-content table {
        background: transparent;
    }

        .popover-content table td {
            border: 0px;
            background: transparent;
            color: #7e7e7e;
        }

箭头应该指向红色正方形 箭头应该指向红色正方形
谢谢。

正确的方法是使用与.popover.arrow样式相关的CSS类来设置它们的样式。由于您没有提供您尝试的内容以及出现了什么问题,因此这就是我们能够提供的最好建议。 - Marc
抱歉,无法粘贴代码和截图。 - SoManyGoblins
.popover.bottom .arrow 不是你需要修改的样式吗?” - Marc
你看到了结果,但还有些东西缺失,因此我问了这个问题,如果我确切地知道需要改变什么,就不会打扰你们了 :) - SoManyGoblins
请发布一个jsfiddle或测试页面,否则我们只能猜测。 - Shail
4个回答

16

如果您正在使用自定义的style.css文件仅覆盖Bootstrap而不重新编译LESS,则需要查找的CSS规则是.popover.top > .arrow:after {border-top-color: yourColorHere;},以更改箭头的颜色。


1
当我将其更改为border-top-color: myColorHere;时,这个修复方法对我很有效。 - simondelliott
2
太棒了!当然也适用于底部弹出层:.popover.bottom > .arrow:after { border-bottom-color: YourColorHere;} - Fafaman

5

Twitter Bootstrap基于Less

如果您想改变箭头的外观,请使用Bootstrap Less变量来实现。

// Tooltips and popovers
// -------------------------
@tooltipColor:            #fff;
@tooltipBackground:       #000;
@tooltipArrowWidth:       5px;
@tooltipArrowColor:       @tooltipBackground;

@popoverBackground:       #fff;
@popoverArrowWidth:       10px;
@popoverArrowColor:       #fff;
@popoverTitleBackground:  darken(@popoverBackground, 3%);

// Special enhancement for popovers
@popoverArrowOuterWidth:  @popoverArrowWidth + 1;
@popoverArrowOuterColor:  rgba(0,0,0,.25);

如果您使用Sass,请对Sass变量执行相同的操作。
不幸的是,TB-Customizer并不包含所有变量,因此您可能需要自行编译。 编辑: 好消息是,新的Bootstrap 3 customizer现在提供了这些选项。

1
使用这些变量来自定义工具提示:
@tooltip-max-width:       200px;
@tooltip-color:           #FFF;
@tooltip-bg:              #000;
@tooltip-opacity:         .9;
@tooltip-arrow-width:     5px;
@tooltip-arrow-color:     #000;

请点击此处查看文档: http://getbootstrap.com/customize/#tooltips


0

我在调整弹出框边框厚度时遇到了问题。为了调整这个,我在popovers.less中添加了@popoverBorderThickness,只有那些行被更改了。我为了上下文包含了整个文件。

//
// Popovers
// --------------------------------------------------


.popover {
  position: absolute;
  top: 0;
  left: 0;
  z-index: @zindexPopover;
  display: none;
  max-width: 276px;
  padding: 1px;
  text-align: left; // Reset given new insertion method
  background-color: @popoverBackground;
  -webkit-background-clip: padding-box;
     -moz-background-clip: padding;
          background-clip: padding-box;
  border: @popoverBorderThickness solid @popoverOuterColor;
  .border-radius(6px);
  .box-shadow(0 5px 10px rgba(0,0,0,.2));

  // Overrides for proper insertion
  white-space: normal;

  // Offset the popover to account for the popover arrow
  &.top     { margin-top: -10px; }
  &.right   { margin-left: 10px; }
  &.bottom  { margin-top: 10px; }
  &.left    { margin-left: -10px; }
}

.popover-title {
  margin: 0; // reset heading margin
  padding: 8px 14px;
  font-size: 14px;
  font-weight: normal;
  line-height: 18px;
  background-color: @popoverTitleBackground;
  border-bottom: 1px solid darken(@popoverTitleBackground, 5%);
  .border-radius(5px 5px 0 0);

  &:empty {
    display: none;
  }
}

.popover-content {
  padding: 9px 14px;
}

// Arrows
//
// .arrow is outer, .arrow:after is inner

.popover .arrow,
.popover .arrow:after {
  position: absolute;
  display: block;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.popover .arrow {
  border-width: @popoverArrowOuterWidth;
}
.popover .arrow:after {
  border-width: @popoverArrowWidth;
  content: "";
}

.popover {
  &.top .arrow {
    left: 50%;
    margin-left: -@popoverArrowOuterWidth;
    border-bottom-width: 0;
    border-top-color: #999; // IE8 fallback
    border-top-color: @popoverArrowOuterColor;
    bottom: -@popoverArrowOuterWidth;
    &:after {
      bottom: @popoverBorderThickness * 1.414;// longer line gets thinner use Pythagorean theorem to correct
      margin-left: -@popoverArrowWidth;
      border-bottom-width: 0;
      border-top-color: @popoverArrowColor;
    }
  }
  &.right .arrow {
    top: 50%;
    left: -@popoverArrowOuterWidth;
    margin-top: -@popoverArrowOuterWidth;
    border-left-width: 0;
    border-right-color: #999; // IE8 fallback
    border-right-color: @popoverArrowOuterColor;
    &:after {
      left: @popoverBorderThickness * 1.414;// longer line gets thinner use Pythagorean theorem to correct
      bottom: -@popoverArrowWidth;
      border-left-width: 0;
      border-right-color: @popoverArrowColor;
    }
  }
  &.bottom .arrow {
    left: 50%;
    margin-left: -@popoverArrowOuterWidth;
    border-top-width: 0;
    border-bottom-color: #999; // IE8 fallback
    border-bottom-color: @popoverArrowOuterColor;
    top: -@popoverArrowOuterWidth;
    &:after {
      top: @popoverBorderThickness * 1.414;// longer line gets thinner use Pythagorean theorem to correct
      margin-left: -@popoverArrowWidth;
      border-top-width: 0;
      border-bottom-color: @popoverArrowColor;
    }
  }

  &.left .arrow {
    top: 50%;
    right: -@popoverArrowOuterWidth;
    margin-top: -@popoverArrowOuterWidth;
    border-right-width: 0;
    border-left-color: #999; // IE8 fallback
    border-left-color: @popoverArrowOuterColor;
    &:after {
      right: @popoverBorderThickness * 1.414;// longer line gets thinner use Pythagorean theorem to correct
      border-right-width: 0;
      border-left-color: @popoverArrowColor;
      bottom: -@popoverArrowWidth;
    }
  }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接