Растянуть относительный div на высоту его статического родителя - PullRequest
1 голос
/ 19 апреля 2019

У меня есть div (красная коробка), которая находится в горизонтальной гибкой коробке (черный контур).Его высота рассчитывается в соответствии с высотой других вещей в гибкой коробке, в данном случае это высокие синие коробки;это все хорошо.

Green box not tall enough

У красного div есть ребенок - зеленое поле на картинке.Который расположен относительно красной коробки.Я бы хотел, чтобы зеленая коробка точно покрывала красную коробку.Ширина не проблема, так как красная коробка имеет фиксированную ширину.Но как я могу сказать, что высота зеленого прямоугольника должна равняться высоте его родителя, красного прямоугольника?

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

green box expanded horizontally

Здесь есть JSFiddle

div.dropZone {
  position: relative;
  font-family: serif;
  margin: 0px;
  border-radius: 5px;
  left: 0px;
  top: 0px;
  width: 2em;
  height: inherit;
  min-height: 3ex;
  background-color: green;
}

div.dropZone:hover {
  width: 4em;
  left: -1em;
}

div.dzContainer {
  position: static;
  font-family: serif;
  margin: 0px 0px 0px 0px;
  -webkit-align-self: stretch;
  align-self: stretch;
  width: 2em;
  height: auto;
  min-height: 3ex;
  background-color: red;
}

div.tall {
  position: static;
  font-family: serif;
  margin: 0px 0px 0px 0px;
  -webkit-align-self: stretch;
  align-self: stretch;
  background-color: blue;
  width: 3em;
  height: 10ex;
}

.H {
  display: -webkit-box;
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -webkit-flex-direction: row;
  flex-direction: row;
  -webkit-flex-wrap: nowrap;
  flex-wrap: nowrap;
  -webkit-justify-content: flex-start;
  justify-content: flex-start;
  -webkit-align-items: flex-start;
  align-items: flex-start;
  border: 1px solid black;
}
<div class="H">
  <!-- black flex-->
  <div class="tall"> </div>
  <!-- blue static-->
  <div class="dzContainer">
    <!-- red static-->
    <div class="dropZone"> </div>
    <!-- green relative-->
  </div>
  <div class="tall"> </div>
  <!-- blue static-->
</div>

Ответы [ 2 ]

4 голосов
/ 19 апреля 2019

Если вы хотите, чтобы зеленая рамка заполняла родительскую высоту, добавьте высоту: 100%;к классу .dropZone.

div.dropZone {
  position: relative;
  font-family: serif;
  margin: 0px;
  border-radius: 5px;
  left: 0px;
  top: 0px;
  width: 2em;
  height: 100%;
  min-height: 3ex;
  background-color: green;
}
2 голосов
/ 19 апреля 2019

Вам просто нужно сделать одно изменение в вашем CSS. Добавьте «height: 100%» в ваш селектор div.dropZone. Я надеюсь, что это помогает.

Вы можете запустить приведенный ниже фрагмент кода, чтобы попробовать его.

div.dropZone {
    position: relative;
    font-family: serif;
    margin: 0px;
    border-radius: 5px;
    left: 0px;
    top: 0px;
    width: 2em;
    height: inherit;
    min-height: 3ex;
    background-color: green;
    height: 100%;
}

div.dropZone:hover {
  width: 4em;
  left: -1em;
}

div.dzContainer {
    position: static;
    font-family: serif;
    margin: 0px 0px 0px 0px;
    -webkit-align-self: stretch;
    align-self: stretch;
    width: 2em;
    height: auto;
    min-height: 3ex;
    background-color: red;
}

div.tall {
    position: static;
    font-family: serif;
    margin: 0px 0px 0px 0px;
    -webkit-align-self: stretch;
    align-self: stretch;
    background-color: blue;
    width: 3em;
    height: 10ex;
}

.H {
    display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
    -webkit-flex-direction: row;
    flex-direction: row;
    -webkit-flex-wrap: nowrap;
    flex-wrap: nowrap;
    -webkit-justify-content: flex-start;
    justify-content: flex-start;
    -webkit-align-items: flex-start;
    align-items: flex-start;
    border: 1px solid black;
}
   <div class="H">                      <!-- black flex-->
    <div class="tall"> </div>          <!-- blue static-->
    <div class="dzContainer">           <!-- red static-->
        <div class="dropZone"> </div>   <!-- green relative-->
    </div>
    <div class="tall"> </div>          <!-- blue static-->
   </div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...