UI Bootstrap在<uib-tabset>指令周围添加了<div>,打破了CSS

时间:2015-12-09 01:30:10

标签: css angularjs angular-ui-bootstrap angular-ui-bootstrap-tab

使用UI Bootstrap中包含的<uib-tabset>时,指令模板会围绕生成的无序列表,其中包含空<div>元素。

<div>
  <ul class="nav nav-{{type || 'tabs'}}" ng-class="{'nav-stacked': vertical, 'nav-justified': justified}" ng-transclude></ul>
  <div class="tab-content">
    <div class="tab-pane" 
         ng-repeat="tab in tabs" 
         ng-class="{active: tab.active}"
         uib-tab-content-transclude="tab">
    </div>
  </div>
</div>

由于CSS选择器如下所示,这导致我的CSS崩溃。

.tabbable-custom > .nav-tabs > li.active {
    ...
}

当我使用<uib-tabset>时,此规则未被提取,因为现在的层次结构

.tabbable-custom > div > .nav-tabs > li.active {
    ...
}

我是否可以避免覆盖整个CSS库以解释添加的<div>

更新

以下是我的模板中的html:

<div class="portlet-body">
    <div class="tabbable-custom">
        <uib-tabset>
            <uib-tab ng-repeat="tabData in tabDataArray" heading="{{ tabData.heading }}">

这是生成的DOM:

<div class="portlet-body">
    <div class="tabbable-custom">
        <div class="ng-isolate-scope">
            <ul class="nav nav-tabs" ng-class="{'nav-stacked': vertical, 'nav-justified': justified}" ng-transclude="">

我可以通过禁用debugInfo删除class="ng-isolate-scope",但它并没有对CSS产生影响。

更新2: 另一种解决方案可能是从我的模板HTML中删除<div class="tabbable-custom">,并将该类添加到<div>指令所在的空<uib-tabset>。这是UI Bootstrap的可能性吗?

2 个答案:

答案 0 :(得分:1)

通过覆盖UI Bootstrap模板来管理以完成我需要的内容,如此问题中所述:Can you override specific templates in AngularUI Bootstrap?

答案 1 :(得分:0)

当我使用odetocode示例时,我遇到了同样的问题,它使用angular-ui router实现了tabset。并且在DOM中准确地添加了DIV"ng-isolate-scope"类。我试图通过删除其他创建的div来覆盖从ui-bootstrap-tpl.js获得的这个块,最后它可以工作。

angular.module("template/tabs/tabset.html", []).run(["$templateCache", function($templateCache) {
  $templateCache.put("template/tabs/tabset.html",
    "<div>\n" +
    "  <ul class=\"nav nav-{{type || 'tabs'}}\" ng-class=\"{'nav-stacked': vertical, 'nav-justified': justified}\" ng-transclude></ul>\n" +
    "  <div class=\"tab-content\">\n" +
    "    <div class=\"tab-pane\" \n" +
    "         ng-repeat=\"tab in tabs\" \n" +
    "         ng-class=\"{active: tab.active}\"\n" +
    "         uib-tab-content-transclude=\"tab\">\n" +
    "    </div>\n" +
    "  </div>\n" +
    "</div>\n" +
    "");
}]);

还有另一种方法。您还可以通过将相关样式更改为以下格式来覆盖CSS样式:

.tabbable-custom > .ng-isolate-scope > .nav-tabs
第二种方法可能看起来很无聊。但您确定tabset模板保持不变,并且不会与其他tabset页面发生冲突。