Как сделать так, чтобы столбец увеличивался с размером содержимого в параллельном столбце - PullRequest
1 голос
/ 18 марта 2019

Привет, как мне сделать так, чтобы боковое меню увеличивалось с содержимым параллельного контейнера, которое должно расширяться вместе с его содержимым.

Я пытаюсь убедиться, что левый столбец, заключенный в тег aside, имеет тот же размер, что и содержимое справа, заключенное в div столбец .right_panel.Я смог сделать это, установив размер тега html и body, а также класса .wrapper равным height: 100% согласно аналогичным запросам в stackoverflow.

Однако теперь .wrapper не расширяется, когда я добавляю больше контента в main.Я попытался изменить height на min-height, но это сократило его до размера контента.

Я знаю, что могу добиться этого с помощью гибкого макета, но потому что flex выходит за рамки моего курса, а также потому, что яЯ хочу изучить альтернативные подходы на случай, если в будущем мне понадобится использовать их для совместимости со старыми браузерами. Я ищу решение , в котором не использовалась бы гибкая компоновка.

Фрагмент ниже и JSFiddle link :

html,
body {
    height: 100%;
}

body {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 16px;
    background-color: blue;
}

h1,
h2,
h3,
h4,
h5,
h6 {
    font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;
}

.wrapper {
    margin: 10px auto 30px;
    padding: 0;
    width: 80%;
    background-color: white;
    height: calc(100% - 40px);
    max-height: 100%;
}

aside.left_panel {
    float: left;
    min-height: 100%;
    width: 130px;
    background-color: #9eb9f1;
    padding-left: 30px;
    overflow: auto;
}

.right_panel {
    margin-left: 160px;
}

nav ul {
    list-style-type: none;
    padding: 0;
}

header {
    background-color: #6f90d1;
    padding: 20px;
}

header h1 {

    font-size: 60px;
    color: darkblue;
}

main {
    padding: 20px 20px 0;
}

main h2 {
    color: #6f90d1;
}

main #lantern {
    height: 400px;
    width: 200px;
}

main img {
    margin: 10px;
}

main h2{
    margin-bottom: 30px;
}
main p {
    margin-bottom: 30px;
}

footer {
    text-align: center;
    margin: 10px 0;
}

.f-right {
    float: right;
    overflow: auto;
}

.f-left {
    float: left;
    overflow: auto;
}
<!DOCTYPE html>
<html lang="en">

<head>
    <title>Title</title>
    <link rel="stylesheet" type="text/css" href="styles/styles.css">
</head>

<body>
    <div class="wrapper">
        <aside class="left_panel">
            <nav>
                <ul>
                    <li>Home</li>
                    <li>Manu item 1</li>
                    <li>Manu item 2</li>
                    <li>Manu item 3</li>
                </ul>
            </nav>
        </aside>
        <div class="right_panel">
            <header>
                <h1>Name of the website</h1>
            </header>
            <main>
                <img id="lantern" class="f-right" src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/PlaceholderLC.png/600px-PlaceholderLC.png" alt="">
                <h2>Subheading 1</h2>
                <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius. Orci varius natoque penatibus et magnis dis parturient. </p>
                <h2>Subheading 2</h2>
                <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius. </p>
                <h2>Subheading 3</h2>
                <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius. Orci varius natoque penatibus et magnis dis parturient. </p>
                <h2>Subheading 4</h2>
                <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius.</p>
                
            </main>
            <footer>
                <p>Copyright &copy; 2019</p>
            </footer>
        </div>
    </div>
</body>

</html>

Ответы [ 2 ]

2 голосов
/ 18 марта 2019

Использование макета таблицы

Одним из решений является использование макета таблицы с использованием display: table на wrapper и создание ваших left-section и right-section в table-cell - см. демо ниже:

html,body {
  height: 100%;
}
body {
  font-family: Arial, Helvetica, sans-serif;
  font-size: 16px;
  background-color: blue;
}
h1,h2,h3,h4,h5,h6 {
  font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;
}
.wrapper {
  margin: 10px auto 30px;
  padding: 0;
  width: 80%;
  background-color: white;
  height: calc(100% - 40px);
  max-height: 100%;
  display: table; /* added */
}
aside.left_panel {
  /* float: left; */
  min-height: 100%;
  width: 130px;
  background-color: #9eb9f1;
  padding-left: 30px;
  overflow: auto;
  display: table-cell; /* added */
  vertical-align: top; /* added */
}
.right_panel {
  /*margin-left: 160px;*/
  display: table-cell; /* added */
}
nav ul {
  list-style-type: none;
  padding: 0;
}
header {
  background-color: #6f90d1;
  padding: 20px;
}
header h1 {
  font-size: 60px;
  color: darkblue;
}
main {
  padding: 20px 20px 0;
}
main h2 {
  color: #6f90d1;
}
main #lantern {
  height: 400px;
  width: 200px;
}
main img {
  margin: 10px;
}
main h2 {
  margin-bottom: 30px;
}
main p {
  margin-bottom: 30px;
}
footer {
  text-align: center;
  margin: 10px 0;
}
.f-right {
  float: right;
  overflow: auto;
}
.f-left {
  float: left;
  overflow: auto;
}
<div class="wrapper">
  <aside class="left_panel">
    <nav>
      <ul>
        <li>Home</li>
        <li>Manu item 1</li>
        <li>Manu item 2</li>
        <li>Manu item 3</li>
      </ul>
    </nav>
  </aside>
  <div class="right_panel">
    <header>
      <h1>Name of the website</h1>
    </header>
    <main>
      <img id="lantern" class="f-right" src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/PlaceholderLC.png/600px-PlaceholderLC.png" alt="">
      <h2>Subheading 1</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius. Orci varius natoque penatibus et magnis dis parturient. </p>
      <h2>Subheading 2</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius. </p>
      <h2>Subheading 3</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius. Orci varius natoque penatibus et magnis dis parturient. </p>
      <h2>Subheading 4</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius.</p>

    </main>
    <footer>
      <p>Copyright &copy; 2019</p>
    </footer>
  </div>
</div>

Использование Float

Вы можете попробовать это - но вы не получите переполнение Правильно или не сможет сделать высоту столбцов одинаковыми - см. пример с этим:

html,body {
  height: 100%;
}
body {
  font-family: Arial, Helvetica, sans-serif;
  font-size: 16px;
  background-color: blue;
}
h1,h2,h3,h4,h5,h6 {
  font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;
}
.wrapper {
  margin: 10px auto 30px;
  padding: 0;
  width: 80%;
  background-color: white;
  height: calc(100% - 40px);
  max-height: 100%;
  overflow: hidden; /* to clear the float */
}
aside.left_panel {
  float: left;
  min-height: 100%;
  width: 130px;
  background-color: #9eb9f1;
  padding-left: 30px;
  overflow-y: auto; /*changed to overflow-y */
}
.right_panel {
  float: left; /* added */
  width: calc(100% - 160px); /* added */
  /*margin-left: 160px;*/
}
nav ul {
  list-style-type: none;
  padding: 0;
}
header {
  background-color: #6f90d1;
  padding: 20px;
}
header h1 {
  font-size: 60px;
  color: darkblue;
}
main {
  padding: 20px 20px 0;
}
main h2 {
  color: #6f90d1;
}
main #lantern {
  height: 400px;
  width: 200px;
}
main img {
  margin: 10px;
}
main h2 {
  margin-bottom: 30px;
}
main p {
  margin-bottom: 30px;
}
footer {
  text-align: center;
  margin: 10px 0;
}
.f-right {
  float: right;
  overflow: auto;
}
.f-left {
  float: left;
  overflow: auto;
}
<div class="wrapper">
  <aside class="left_panel">
    <nav>
      <ul>
        <li>Home</li>
        <li>Manu item 1</li>
        <li>Manu item 2</li>
        <li>Manu item 3</li>
      </ul>
    </nav>
  </aside>
  <div class="right_panel">
    <header>
      <h1>Name of the website</h1>
    </header>
    <main>
      <img id="lantern" class="f-right" src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/PlaceholderLC.png/600px-PlaceholderLC.png" alt="">
      <h2>Subheading 1</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius. Orci varius natoque penatibus et magnis dis parturient. </p>
      <h2>Subheading 2</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius. </p>
      <h2>Subheading 3</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius. Orci varius natoque penatibus et magnis dis parturient. </p>
      <h2>Subheading 4</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius.</p>

    </main>
    <footer>
      <p>Copyright &copy; 2019</p>
    </footer>
  </div>
</div>

Но для этого есть хак - с использованием large margin & padding.Обратите внимание, что вам нужно удалить height и max-height, установленные для wrapper - см. Демонстрацию ниже:

html,body {
  height: 100%;
}
body {
  font-family: Arial, Helvetica, sans-serif;
  font-size: 16px;
  background-color: blue;
}
h1,h2,h3,h4,h5,h6 {
  font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;
}
.wrapper {
  margin: 10px auto 30px;
  padding: 0;
  width: 80%;
  background-color: white;
  /*height: calc(100% - 40px);
  max-height: 100%;*/
  overflow: hidden; /* to clear the float */
}
aside.left_panel {
  float: left;
  min-height: 100%;
  width: 130px;
  background-color: #9eb9f1;
  padding-left: 30px;
  overflow-y: auto; /*changed to overflow-y */
  margin-bottom: -100000px; /* a large value */
  padding-bottom: 100000px; /* a large value */
}
.right_panel {
  float: left; /* added */
  width: calc(100% - 160px); /* added */
  /*margin-left: 160px;*/
  margin-bottom: -100000px; /* a large value */
  padding-bottom: 100000px; /* a large value */
}
nav ul {
  list-style-type: none;
  padding: 0;
}
header {
  background-color: #6f90d1;
  padding: 20px;
}
header h1 {
  font-size: 60px;
  color: darkblue;
}
main {
  padding: 20px 20px 0;
}
main h2 {
  color: #6f90d1;
}
main #lantern {
  height: 400px;
  width: 200px;
}
main img {
  margin: 10px;
}
main h2 {
  margin-bottom: 30px;
}
main p {
  margin-bottom: 30px;
}
footer {
  text-align: center;
  margin: 10px 0;
}
.f-right {
  float: right;
  overflow: auto;
}
.f-left {
  float: left;
  overflow: auto;
}
<div class="wrapper">
  <aside class="left_panel">
    <nav>
      <ul>
        <li>Home</li>
        <li>Manu item 1</li>
        <li>Manu item 2</li>
        <li>Manu item 3</li>
      </ul>
    </nav>
  </aside>
  <div class="right_panel">
    <header>
      <h1>Name of the website</h1>
    </header>
    <main>
      <img id="lantern" class="f-right" src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/PlaceholderLC.png/600px-PlaceholderLC.png" alt="">
      <h2>Subheading 1</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius. Orci varius natoque penatibus et magnis dis parturient. </p>
      <h2>Subheading 2</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius. </p>
      <h2>Subheading 3</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius. Orci varius natoque penatibus et magnis dis parturient. </p>
      <h2>Subheading 4</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius.</p>

    </main>
    <footer>
      <p>Copyright &copy; 2019</p>
    </footer>
  </div>
</div>

Использование флексбоксов

Последнее, но не менее важное;и так как во флексбоксах есть IE11 + и поддержка во всех современных браузерах, я бы предпочел его - спасибо, что позволили мне освежить свои знания.:)

html,body {
  height: 100%;
}
body {
  font-family: Arial, Helvetica, sans-serif;
  font-size: 16px;
  background-color: blue;
}
h1,h2,h3,h4,h5,h6 {
  font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;
}
.wrapper {
  margin: 10px auto 30px;
  padding: 0;
  width: 80%;
  background-color: white;
  /*height: calc(100% - 40px);*/
  /*max-height: 100%;*/
  display: flex; /* added */
}
aside.left_panel {
  /* float: left; */
  min-height: 100%;
  width: 130px;
  background-color: #9eb9f1;
  padding-left: 30px;
  overflow-y: auto; /* changed to overflow-y*/
}
.right_panel {
  /*margin-left: 160px;*/
}
nav ul {
  list-style-type: none;
  padding: 0;
}
header {
  background-color: #6f90d1;
  padding: 20px;
}
header h1 {
  font-size: 60px;
  color: darkblue;
}
main {
  padding: 20px 20px 0;
}
main h2 {
  color: #6f90d1;
}
main #lantern {
  height: 400px;
  width: 200px;
}
main img {
  margin: 10px;
}
main h2 {
  margin-bottom: 30px;
}
main p {
  margin-bottom: 30px;
}
footer {
  text-align: center;
  margin: 10px 0;
}
.f-right {
  float: right;
  overflow: auto;
}
.f-left {
  float: left;
  overflow: auto;
}
<div class="wrapper">
  <aside class="left_panel">
    <nav>
      <ul>
        <li>Home</li>
        <li>Manu item 1</li>
        <li>Manu item 2</li>
        <li>Manu item 3</li>
      </ul>
    </nav>
  </aside>
  <div class="right_panel">
    <header>
      <h1>Name of the website</h1>
    </header>
    <main>
      <img id="lantern" class="f-right" src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/PlaceholderLC.png/600px-PlaceholderLC.png" alt="">
      <h2>Subheading 1</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius. Orci varius natoque penatibus et magnis dis parturient. </p>
      <h2>Subheading 2</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius. </p>
      <h2>Subheading 3</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius. Orci varius natoque penatibus et magnis dis parturient. </p>
      <h2>Subheading 4</h2>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dignissim tristique varius.</p>

    </main>
    <footer>
      <p>Copyright &copy; 2019</p>
    </footer>
  </div>
</div>
1 голос
/ 18 марта 2019

Вы можете удалить поплавки и установить обертку на display: flex.Также удалите свойства высоты в обертке и поле слева в правом столбце.

...