【问题标题】:Expand content div height to left-menu height when adding more item to menu向菜单添加更多项目时,将内容 div 高度扩展到左侧菜单高度
【发布时间】:2016-07-11 01:21:09
【问题描述】:

我有一个左侧菜单,可以在其中添加或删除项目。右边有一个内容 div,它有一个最小高度。

当使用角度向左侧菜单添加更多项目时,如果左侧菜单高于其最小高度,我希望内容 div 将其高度扩展到左侧菜单。

还有一件事是我还想要内容 div 的 ng-animate 的下拉效果。

这里是小提琴链接:link

var app = angular.module('myApp', ['ngAnimate']);
app.controller('myCtrl', function($scope) {
  $scope.items = ['foo', 'bar']; 
  var num = 0;    
  $scope.add = function() {
    $scope.items.push(num);
    num++;
  }
});
#left {
  width: 25%;
  background-color: lightblue;
  float: left;
}

#right {
  width: 75%;
  float: left;
  background-color: lightgreen;
  min-height: 200px
}

.item {
  height: 20px;
  opacity: 1;
  transition: 0.5s;
}

.item.ng-enter {
  opacity: 0;
  height: 0;    
}

.item.ng-enter-active {
  height: 20px;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>
<script src="https://code.angularjs.org/1.5.7/angular-animate.min.js"></script>

<div id="wrapper" ng-app="myApp" ng-controller="myCtrl">
  <div id="left">
    <p class="item" ng-repeat="item in items">
      {{item}}
    </p>
  </div>
  <div id="right">
    <button ng-click="add()">add</button>
    {{names}}
  </div>
</div>

【问题讨论】:

    标签: html css angularjs ng-animate


    【解决方案1】:

    无需使用 jQuery 或 ng-style 进行 hacky DOM 操作。只需将display: flex 添加到包装器中即可:

    #wrapper {
        display: flex;
    }
    

    https://jsfiddle.net/babvqx8e/26/

    使用 flexbox 还可以移除浮动:

    #left {
        width: 25%;
        background-color: lightblue;
    }
    
    #right {
        width: 75%;
        background-color: lightgreen;
        min-height: 200px
    }
    

    请参阅此really nice guide to Flexbox 了解更多信息。

    【讨论】:

      【解决方案2】:

      使用 jQuery:

      $("#right").css({'height': $("#left").outerHeight()});
      

      它将#right的高度设置为#left的外部高度。

      【讨论】:

      • 它似乎不起作用,你能把它加到我的小提琴里吗?
      • 你需要添加一个指向 jquery 的链接。我不太了解angular以及如何将jquery添加到angular,谷歌它也许你会找到一种方法。
      【解决方案3】:

      所以我会回答我的问题。我设法使用 ng-style 指令来做到这一点:

      &lt;div id="right" ng-style="{height: hgt+ 'px'}"&gt;

      然后在控制器中:

      $scope.hgt = $('#left').outerHeight() + 40;

      http://jsfiddle.net/babvqx8e/22/

      【讨论】:

      • 这不是实现你想要的好方法。您正在从控制器中操作 DOM,这在 Angular 中是一件非常糟糕的事情。请参阅我的答案以获得更好的解决方案。
      • Angular 中的 DOM 操作最佳实践:ng-learn.org/2014/01/Dom-Manipulations.
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多