【问题标题】:JavaScript - Need a way to set OuterHeight of the ElementJavaScript - 需要一种方法来设置元素的 OuterHeight
【发布时间】:2011-12-06 11:02:34
【问题描述】:

我有一个容器元素,它有点像它的子元素的布局容器,并且我必须根据一些属性来排列子元素。

我需要简单的方法来设置元素的 outerHeight,比如,

$(e).setOuterHeight(200);

jQuery 的 outerHeight 根本不设置高度,实际上它是一个只读方法。

$(e).height(200); // this clips my element

在上述方法中,我松开了文本类型输入的边框。

我的元素的子元素是根据可用空间和其他一些基于它所拥有的数据的标准停靠的,浮动、清除等简单布局将不起作用,因为填充等会根据大小动态变化。我最终会使用 Table,即使我不想但别无选择,但无论如何感谢您的帮助。

现在当元素的大小大于子元素时没有问题,但有时容器元素的高度可能比子元素小,那时我需要增加大小。

function calculateSize(e){
   var s = { 
      width: $(e).innerWidth(), 
      height: 0 
   };
   var ae = new Enumerator(e.children);
   while(ae.next()){
      var child = ae.current();
      // I have tried all alternatives
      // for following lines
      // child.clientHeight || child.offsetHeight
      // $(child).outerHeight()
      // $(child).innerHeight()
      s.height += $(child).outerHeight(); 
   }
   if(s.height > $(e).height()){
      $(e).height(s.height);
   }
}

function layoutChildren(e){
      ....
      /// for every child c
      /// some steps before
      var heightForChildren = 
        calculatedWithPadMarginBorder(availableHeight,c);
      /// tried combinations
      $(c).height(heightForChildren);
      /// last statement fails for button
      /// as button's padding cuts itself
      /// removing padding in calculation
      /// cuts other input elements !!
      /// some steps after
      ....
}

我需要一些解释如何计算运行时高度/宽度,包括/不包括填充/边距/边框等,以及如何正确设置它,以免遇到问题。我无法继续尝试所有排列组合,因为即使在 jQuery 网站上我也没有看到正确的文档。

固定高度计算很好,但这是一种动态元素,它会调整自身大小并按特定顺序排列子元素。

问题是无法设置outerHeight,当我们设置一个元素的高度/宽度时,高度/宽度实际上是内部高度/宽度而不考虑边距,而当我们要调整父级的大小时,我们需要outerHeight ,但我们不能那么容易地设置outerHeight。

我的 calculateSize 和 layoutChildren 是两个独立的方法和两个独立的算法,因为父级将被调整为所有子级高度的总和。然后高度简单地除以no。的孩子堆叠在一起。我的计算很完美,但是在我的 layoutChildren 方法中,我有元素的“outerHeight”和“outerWidth”,并且不知道如何使用 jQuery 或任何其他方式正确设置它。

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:

    .outerHeight( value ) version added: 1.8.0

    您可以使用jQuery.outerHeight(value) 设置元素外部高度的值。例如:$foo.outerHeight( 200 )

    【讨论】:

      【解决方案2】:

      如果您没有特殊要求,默认情况下标准元素会调整其高度以匹配其子元素。如果您将样式设置为 float:left 或 float:right 它的默认宽度也将是包含其所有子项的宽度。

      【讨论】:

        【解决方案3】:

        好的,这很奇怪,但这就是答案。

        有奇怪的控件,

        • 选择
        • 按钮(INPUT[type=submit|reset|button])

        WebKit 浏览器

        • Padding 和 Border 被视为所有控件的 OuterWidth 的一部分
        • 对于所有控件,必须将 Padding 和 Border 作为 OuterWidth 添加到 Width 中
        • Padding 和 Border 被视为“奇怪控件”的 InnerWidth 的一部分
        • 在为所有“非奇怪控件”设置宽度之前,必须从宽度中减去填充和边框

        非 WebKit 浏览器

        • Padding 和 Border 被视为所有非“奇怪控件”的 OuterWidth 的一部分
        • 对于所有非“奇怪的控件”,必须将填充和边框作为 OuterWidth 添加到 Width 中
        • Padding 和 Border 被视为所有非“奇怪控件”的 InnerWidth 的一部分
        • 在为所有“非奇怪控件”设置宽度之前,必须从宽度中减去填充和边框

        【讨论】:

          【解决方案4】:

          我很乐意提供帮助,但我就是不明白您的问题。 关于 jQuery 的维度方法的文档,我发现 http://api.jquery.com/category/css/ 包含有关 innerWidth()、innerHeight()、outerWidth() 和 outerHeight() 的文档。

          我希望这会有所帮助,否则,请尝试通读您的问题,让您更清楚您需要什么答案。

          【讨论】:

          • 我想给元素设置outerHeight,jQuery给了我outerHeight,但是如何给元素设置呢?
          • 好的,现在我明白了。这是 CSS boxmodel 的一个基本问题:w3.org/TR/CSS2/box.html,这已经引起了激烈的争论。我建议采用一种相当丑陋的方法,因为我们已经在处理 javascript 的高度计算。这是你计算outerHeight的差异,有和没有边距,当你设置高度时,你会添加这个差异。我希望这是有道理的 - 尽管我强烈建议您尝试为此找到 CSS 解决方案,但通常这些类型的元素排列问题总是有一个 CSS 解决方案,它比 JS 解决方案运行更流畅
          • :) 这确实是一个丑陋的解决方案,不幸的是计算仍然表现不佳,因为我刚刚发现,SELECT 和 BUTTON 是唯一具有与其他控件不同的计算的控件,并且只有那些那些被剪掉了。我会喜欢 CSS 解决方案,但我们再次与 30% 的 IE 用户打交道,而 IE 7-8 在 CSS2 上仍然很奇怪。
          • 不应该是你的问题...... IE 会因缺乏开发人员的关注而消亡(尽管这只是我的谦虚希望 - 我知道这不应该是一个讨论板)跨度>
          猜你喜欢
          • 1970-01-01
          • 2012-06-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-13
          • 1970-01-01
          • 2017-09-11
          • 1970-01-01
          相关资源
          最近更新 更多