Как сделать так, чтобы дочерний div был равен 100% высоты родительского div без указания высоты родителя?

Вам нужно будет сделать что-то вроде этого:

def your_view(request):
    if request.method == 'GET':
        form = SolutionForm()
    elif request.method == 'POST':
        problem = ... # logic to find the problem instance
        solution = Solution(problem=problem) # or solution.problem = problem
        form = SolutionForm(request.POST, instance=solution)
        # the form will validate because the problem has been provided on solution instance
        if form.is_valid():
            solution = form.save()
            # redirect or return other response
    # show the form
484
задан TylerH 3 January 2019 в 20:20
поделиться

12 ответов

ПРИМЕЧАНИЕ : Этот ответ применим к устаревшим браузерам без поддержки стандарта Flexbox. О современном подходе см .: https://stackoverflow.com/a/23300532/1155721


Я предлагаю вам взглянуть на Столбцы одинаковой высоты с кроссбраузерным CSS и без хаков .

По сути, сделать это с помощью CSS совместимым с браузером способом - нетривиально (но тривиально с таблицами), поэтому найдите себе подходящее готовое решение.

Кроме того, ответ зависит от того, хотите ли вы 100% высоты или равная высота. Обычно это равная высота. Если это 100% высота, ответ немного отличается.

154
ответ дан 22 November 2019 в 22:35
поделиться

Здесь старомодная демоверсия на основе position: absolute контейнера содержимого и position: relative родительского контейнера.

Демо

Что касается современного способа сделать это - Flex Box являются лучшими.

0
ответ дан WebBrother 3 January 2019 в 20:20
поделиться

Как показано ранее, flexbox является самым простым. например.

#main{ display: flex; align-items:center;}

это выровняет все дочерние элементы по центру внутри родительского элемента.

0
ответ дан Chandan Purohit 3 January 2019 в 20:20
поделиться

В названии вопроса и его содержании есть некоторое противоречие. Название говорит о родительском div, но вопрос заставляет его звучать так, как будто вы хотите, чтобы два родственных div (навигация и контент) были одинаковой высоты.

Вы (а) хотите, чтобы навигация и контент были на 100% выше основной, или (б) хотите, чтобы навигация и контент были на одной высоте?

Я буду считать (б). ..если это так, я не думаю, что вы сможете сделать это, учитывая вашу текущую структуру страницы (по крайней мере, не с чистым CSS и без сценариев). Вам, вероятно, потребуется сделать что-то вроде:

<main div>
    <content div>
         <navigation div></div>
    </div>
</div>

и установить для div содержимого значение с левым полем, равным ширине навигационной панели. Таким образом, контент находится справа от навигации, и вы можете установить div навигации равным 100% высоты контента.

РЕДАКТИРОВАТЬ: я делаю это полностью в моей голове, но вам, вероятно, также потребуется установить левое поле навигационного элемента в отрицательное значение или установить его абсолютное левое значение равным 0, чтобы переместить его обратно в крайнее левое положение. Проблема в том, что есть много способов сделать это, но не все они будут совместимы со всеми браузерами.

1
ответ дан Paul Abbott 3 January 2019 в 20:20
поделиться

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

CSS

.main, .sidebar {
    float: none;
    padding: 20px;
    vertical-align: top;
}
.container {
    display: table;
}
.main {
    width: 400px;
    background-color: LightSlateGrey;
    display: table-cell;
}
.sidebar {
    width: 200px;
    display: table-cell;
    background-color: Tomato;
}

HTML

<div class="container clearfix">
    <div class="sidebar">
        simple text here
    </div>
    <div class="main">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam congue, tortor in mattis mattis, arcu erat pharetra orci, at vestibulum lorem ante a felis. Integer sit amet est ac elit vulputate lobortis. Vestibulum in ipsum nulla. Aenean erat elit, lacinia sit amet adipiscing quis, aliquet at erat. Vivamus massa sem, cursus vel semper non, dictum vitae mi. Donec sed bibendum ante.
    </div>
</div>

Простой пример. Обратите внимание, что вы можете превратиться в отзывчивость.

2
ответ дан Paula Fleck 3 January 2019 в 20:20
поделиться
#main {
   display: table;
} 
#navigation, #content {
   display: table-cell;
}

Посмотрите на этот пример .

10
ответ дан Nobita 3 January 2019 в 20:20
поделиться

с использованием jQuery:

$(function() {
    function unifyHeights() {
        var maxHeight = 0;
        $('#container').children('#navigation, #content').each(function() {
            var height = $(this).outerHeight();
            // alert(height);
            if ( height > maxHeight ) {
                maxHeight = height;
            }
        });
        $('#navigation, #content').css('height', maxHeight);
    }
    unifyHeights();
});
15
ответ дан flavius 3 January 2019 в 20:20
поделиться

У меня была та же проблема, она работала на основе ответа Hakam Fostok, я создал небольшой пример, в некоторых случаях она могла бы работать, не имея необходимость добавлять display: flex; и flex-direction: column; на родительском контейнере

.row {
    margin-top: 20px;
}

.col {
    box-sizing: border-box;
    border: solid 1px #6c757d;
    padding: 10px;
}

.card {
    background-color: #a0a0a0;
    height: 100%;
}

JSFiddle

1
ответ дан 22 November 2019 в 22:35
поделиться

Самый простой способ сделать это - просто подделать его. A List Apart подробно освещал это на протяжении многих лет, как в этой статье Дэна Седерхольма от 2004 года .

Вот как я обычно это делаю:

<div id="container" class="clearfix" style="margin:0 auto;width:950px;background:white url(SOME_REPEATING_PATTERN.png) scroll repeat-y center top;">
    <div id="navigation" style="float:left;width:190px;padding-right:10px;">
        <!-- Navigation -->
    </div>
    <div id="content" style="float:left;width:750px;">
        <!-- Content -->
    </div>
</div>

Вы можете легко добавить заголовок в этот дизайн, обертывание #container в другой div, встраивание заголовка div в качестве родственного элемента # контейнера и перемещение стилей полей и ширины в родительский контейнер. Кроме того, CSS следует переместить в отдельный файл, а не хранить в встроенном виде и т. Д. И, наконец, класс clearfix можно найти на positioniseverything .

-3
ответ дан 22 November 2019 в 22:35
поделиться

[Ссылаясь на код Less Dmity в другом ответе] Я предполагаю, что это какой-то «псевдокод»?

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

http://www.alistapart.com/articles/fauxcolumns/

Надеюсь, это поможет :)

1
ответ дан 22 November 2019 в 22:35
поделиться

Если вы не возражаете, чтобы div навигации был обрезан в случае неожиданно короткого содержимого div, есть по крайней мере один простой способ:

#main {
position: relative;
}

#main #navigation {
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 10em; /* or whatever */
}

#main #content {
margin: 0;
margin-left: 10em; /* or whatever width you set for #navigation */
}

В противном случае есть faux- колонки техника.

55
ответ дан 22 November 2019 в 22:35
поделиться

Это неприятная проблема, с которой постоянно сталкиваются дизайнеры. Хитрость в том, что вам нужно установить высоту 100% для BODY и HTML в вашем CSS.

html,body {
    height:100%;
}

Этот, казалось бы, бессмысленный код должен определить для браузера, что означает 100%. Обидно, да, но это самый простой способ.

98
ответ дан 22 November 2019 в 22:35
поделиться