So machen Sie div auf dieselbe Höhe wie das übergeordnete Element (als Tabellenzelle angezeigt)

Lesezeit: 5 Minuten

Ich habe ein Container-Div mit drei untergeordneten Divs (mit unterschiedlichem Inhalt) – jedes so groß wie das größte. Ich habe dies geschafft, indem ich den Container auf display:table und die untergeordneten divs auf display:table-cell usw. gesetzt habe.

Alles funktionierte einwandfrei, bis…

Ich habe ein neues div in eines der untergeordneten divs eingefügt und versucht, es auf height:100% zu bringen – es würde sich also auf die gleiche Höhe wie seine Eltern dehnen, aber das hat nicht funktioniert.

Bitte sehen Sie sich meine JSFiddle an: http://jsfiddle.net/bkG5A/

Jede Hilfe wäre sehr willkommen!

HTML

<div class="container">
    <div class="child">
        a<br />a<br />a
    </div>
    <div class="child">
        a<br />a<br />a<br />a<br />a<br />a<br />a
    </div>
    <div class="child">
        <div class="content">
            a<br />a<br />a
        </div>
    </div>
</div>

CSS

.container {
    display: table;
}
.child {
    width: 30px;
    background-color: red;
    display: table-cell;
    vertical-align: top;
}
.content {
    height: 100%;
    background-color: blue;
}

Benutzer-Avatar
Rentner

Eine andere Möglichkeit besteht darin, Ihr Kind auf div zu setzen display: inline-block;

.content {
    display: inline-block;
    height: 100%;
    width: 100%;
    background-color: blue;
}

.container {
  display: table;
}
.child {
  width: 30px;
  background-color: red;
  display: table-cell;
  vertical-align: top;
}
.content {
  display: inline-block;
  height: 100%;
  width: 100%;
  background-color: blue;
}
<div class="container">
  <div class="child">
    a
    <br />a
    <br />a
  </div>
  <div class="child">
    a
    <br />a
    <br />a
    <br />a
    <br />a
    <br />a
    <br />a
  </div>
  <div class="child">
    <div class="content">
      a
      <br />a
      <br />a
    </div>
  </div>
</div>

JSFiddle-Demo

  • interessanterweise funktioniert dies nicht in IE 10 und FF 28 (sogar meine Lösung funktioniert nicht in IE 10 und FF), kann diese 2 Browser überhaupt nicht verstehen.

    – König König

    28. März 2014 um 12:54 Uhr


  • Ich habe das gleiche Problem. Anzeigetabelle funktioniert nicht in allen Browsern.

    – Ana DEV

    1. Februar 2017 um 13:53 Uhr

Sie müssen die einstellen height für die Eltern (Container und Kind) explizit, hier ist eine weitere Problemumgehung (wenn Sie diese Höhe nicht explizit festlegen möchten):

.child {
  width: 30px;
  background-color: red;
  display: table-cell;
  vertical-align: top;
  position:relative;
}

.content {
  position:absolute;
  top:0;
  bottom:0;
  width:100%;
  background-color: blue;
}

Geige

  • Außerdem halte ich es für eine schlechte Idee, die absolute Positionierung zu verwenden, um dies zu lösen.

    – Chris

    28. März 2014 um 12:41 Uhr

  • @Chris verstehe nicht, warum es bei dir nicht funktioniert hat, ich habe es natürlich getestet. Und es ist überhaupt keine schlechte Idee, Sie verstehen vielleicht überhaupt nicht, wie die absolute Positionierung funktioniert

    – König König

    28. März 2014 um 12:46 Uhr

  • Sie haben Recht, dass der Code gut funktioniert – hat bei mir aufgrund eines schrecklichen Cachings in Firefox nicht funktioniert. Aber ich bin immer noch nicht davon überzeugt, dass die absolute Positionierung eine gute Lösung ist. Hier ist ein Grund dafür: jsfiddle.net/bkG5A/5 – Polsterung zum div hinzugefügt.

    – Chris

    28. März 2014 um 13:05 Uhr


  • @Chris sieht so aus, als wäre die absolute Positionierung einfach nicht gut in diesem Fall wo wir uns damit befassen müssen table-cell Layout, das ist meiner Meinung nach sehr kompliziert. Die Lösung, die Sie haben, funktioniert tatsächlich nicht in FireFox 28 und IE 10 (nicht sicher, welche Versionen Sie haben, aber diese Version sind die neuesten). Es gibt nur eine Lösung, bei der wir das einstellen height ausdrücklich für die container und child (wie ich in der Antwort erwähnt habe), die für Chrome, Opera und FireFox funktionieren kann, aber nicht für IE 10 (so seltsam), ist dieses Problem schwer browserübergreifend zu lösen, obwohl es in der Tat so einfach aussieht.

    – König König

    28. März 2014 um 13:19 Uhr

  • Ja, du hast vollkommen recht. Ich stimme zu, dass dies eine sehr einfache Aufgabe ist, aber in CSS schwer zu lösen ist. Ich denke, das muss doch in JS gelöst werden? Wie beim jQuery.equalHeights-Plugin.

    – Chris

    31. März 2014 um 9:33 Uhr

Sie können dieses CSS verwenden:

.content {
    height: 100%;
    display: inline-table;
    background-color: blue;
}

JSFiddle

  • Das hat gut funktioniert 🙂 Aber ich bevorzuge Reinders Lösung besser, da das div bereits in einer Tabelle ist – und dann ist es vielleicht nicht die beste Lösung, es zu einer Tabelle in einer Tabelle zu machen.

    – Chris

    28. März 2014 um 12:43 Uhr

Das Kind kann nur dann eine Größe nehmen, wenn die Eltern bereits eine eingestellt haben. Siehe dieses Beispiel: Vertikales Scrollen 100 % Höhe

 html, body {
        height: 100%;
        margin: 0;
    }
    .header{
        height: 10%;
        background-color: #a8d6fe;
    }
    .middle {
        background-color: #eba5a3;
        min-height: 80%;
    }
    .footer {
        height: 10%;
        background-color: #faf2cc;
    }

    $(function() {
      $('a[href*="#nav-"]').click(function() {
        if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
          var target = $(this.hash);
          target = target.length ? target : $('[name=" + this.hash.slice(1) + "]');
          if (target.length) {
            $('html, body').animate({
              scrollTop: target.offset().top
            }, 500);
            return false;
          }
        }
      });
    });
html,
body {
  height: 100%;
  margin: 0;
}
.header {
  height: 100%;
  background-color: #a8d6fe;
}
.middle {
  background-color: #eba5a3;
  min-height: 100%;
}
.footer {
  height: 100%;
  background-color: #faf2cc;
}
nav {
  position: fixed;
  top: 10px;
  left: 0px;
}
nav li {
  display: inline-block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<body>
  <nav>
    <ul>
      <li>
        <a href="#nav-a">got to a</a>
      </li>
      <li>
        <a href="#nav-b">got to b</a>
      </li>
      <li>
        <a href="#nav-c">got to c</a>
      </li>
    </ul>
  </nav>
  <div class="header" id="nav-a">

  </div>
  <div class="middle" id="nav-b">

  </div>
  <div class="footer" id="nav-c">

  </div>
1120390cookie-checkSo machen Sie div auf dieselbe Höhe wie das übergeordnete Element (als Tabellenzelle angezeigt)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy