【问题标题】:How to set height of a a div based on its content?如何根据内容设置 div 的高度?
【发布时间】:2013-07-17 04:15:17
【问题描述】:

所以我正在this 网站上工作,并且我在底部有一个选项卡式部分。 我使用 css 构建了我的标签,就像 this 一样。但是当我希望标签内容的大小不同时出现了问题。

我想如果我可以定位内容的高度,我就可以使用 Javascript 设置 .tabs 的高度。

这是我正在使用的代码:

        $('.tab label').click(function() {
            $('.tab.current').removeClass('current');
            $(this).parent('.tab').addClass('current');
            $('.tabs').height($('.tab.current .content').outerHeight());
        });

由于某种原因,它没有抓住正确的价值。我不知道我做错了什么。任何帮助将不胜感激。

编辑:标签结构如下所示:

           <div class="tabs">

           <div class="tab one current">
                <input type="radio" id="tab-1" name="tab-group-1" checked>
                <label for="tab-1"></label>

                <div class="content">
                    <div class="tab-block first">
                </div><!-- .content -->
           </div><!-- .tab.one -->

           <div class="tab two">
                <input type="radio" id="tab-1" name="tab-group-1" checked>
                <label for="tab-1"></label>

                <div class="content">
                    <div class="tab-block first">
                </div><!-- .content -->
           </div><!-- .tab.two -->

           <div class="tab three">
                <input type="radio" id="tab-1" name="tab-group-1" checked>
                <label for="tab-1"></label>

                <div class="content">
                    <div class="tab-block first">
                </div><!-- .content -->
           </div><!-- .tab.three -->

           </div>

.tabs 类需要一个最小高度,因为选项卡绝对位于彼此的顶部。

所以我想做的是获取 .current 类的 .content 的高度,并将该高度设置为 .tabs div。这样它就不会溢出高度,而是将所有内容推到它下面。

我希望这能消除一些困惑。

【问题讨论】:

  • &lt;div&gt; 将根据其内容调整自身大小,作为其基本行为的一部分。你是如何设计标签的? 编辑检查网站,真的不清楚你在说什么或者你想与众不同。
  • 我的内容是绝对定位的。我觉得我只是不确定为什么我的 javascript 给了我不正确的高度。
  • 如果我的 .content 设置了高度,我应该能够将其分配给 .tabs div
  • 我花了一段时间才弄清楚你认为哪里错了。在 Chrome 中它工作正常。所以我在 Firefox 中尝试了它,现在我明白了。你在使用 Firefox 吗?
  • 绝对定位不会影响&lt;div&gt; 环绕其内容的方式。

标签: javascript css tabs height html


【解决方案1】:

导致此问题的原因有很多。主要的是 CSS3 过渡。应用 .current 类时,div 正在为高度设置动画。 javascript 在 CSS3 动画完成之前获取值,这就是为什么你没有得到正确的值。

不使用 javascript,更简洁的解决方案是将类应用于 div.tabs:

div.tabs.currentOne {
     height: 250px;
}

div.tabs.currentTwo {
     height: 1022px;
}

div.tabs.currentThree {
     height: 882px;
}

在你的 javascript 中:

$('.tab label').click(function () {
    var $tabs = $('.tabs');
    $tabs.find('.tab.current').removeClass('current');
    var $currTab = $(this).parent('.tab').addClass('current');

    // remove any one of the classes that we'll apply
    $tabs.removeClass('currentOne currentTwo currentThree');

    // determine which one to apply
    if ($currTab.hasClass('one')) {
        $tabs.addClass('currentOne');
    }
    else if ($currTab.hasClass('two')) {
        $tabs.addClass('currentTwo');
    }
    else if ($currTab.hasClass('three')) {
        $tabs.addClass('currentThree')
    }
});

注意 div.tabs 的高度必须考虑子元素的内边距和边框,以及标签的高度。它是 div.content 类的高度 + 内边距 + 2px 底部内边距 + 40px 的标签。

还要确保将正确的类添加到默认为可见的选项卡中。

【讨论】:

  • 非常感谢!!!这立即奏效。您可能希望删除 .hassClass 中多余的 s 以供其他阅读此内容的人使用。
  • 非常感谢您的帮助。这让我伤心了一整天。
  • 没问题,很高兴能帮上忙 :)
  • 如果他更改了那些标签中的内容,他将不得不重新定义他的 CSS 中的高度?
  • 没错。但考虑到当前的功能,他已经不得不这样做了。具有这些高度的类被应用于 div.content div。如果他改变了内容,这些就必须改变。此插件的更动态的解决方案将需要更多的 javascript。我不认为他在寻找动态的东西。
【解决方案2】:

在你的目标类中设置 height:auto

.your_class{
height:auto;
}

将此类添加到您要分配的元素中。

【讨论】:

  • 发布一些相关代码,而不是全部,并描述您的 html 结构的布局和您正在谈论的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
相关资源
最近更新 更多