2017-02-22 6 views
0

У меня есть количество столбцов, и при каждом щелчке по столбцу содержимое этого столбца показано ниже. Как я могу заставить отображаемый контент занимать оставшуюся высоту, когда она видна, чтобы макет был отзывчивым? Можно ли использовать только css или мне нужно использовать js?Сделать загружаемое содержимое занимает оставшуюся высоту

$(document).ready(function() { 
 
    $('.column').on('click', function(e) { 
 
    $(this).find('.content').toggle(); 
 
    $(this).toggleClass('active', 400); 
 
    }); 
 
});
#wrapper { 
 
    width: 100%; 
 
    margin: 0 auto; 
 
    position: relative; 
 
} 
 

 
.content { 
 
    position: absolute; 
 
    width: 100%; 
 
    color: #000; 
 
    left: 0; 
 
    top: auto; 
 
    display: none; 
 
    text-align: left; 
 
    border: 1px solid #000; 
 
} 
 

 
.column { 
 
    display: inline-block; 
 
    border: 1px solid #000; 
 
    width: 20%; 
 
} 
 

 
.column.active { 
 
    margin-bottom: 100px; 
 
} 
 

 
.toggle { 
 
    width: 25%; 
 
    height: 64px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="wrapper"> 
 
    <div class="column"> 
 
    <div class="toggle">1</div> 
 
    <div class="content"> 
 
     <p>content 1</p> 
 
    </div> 
 
    </div> 
 

 
    <div class="column"> 
 
    <div class="toggle">2</div> 
 
    <div class="content"> 
 
     <p>content 2</p> 
 
    </div> 
 
    </div> 
 

 
    <div class="column"> 
 
    <div class="toggle">3</div> 
 
    <div class="content"> 
 
     <p>content 3</p> 
 
    </div> 
 
    </div> 
 
</div>

Я создал fiddle того, что я сделал до сих пор.

+0

Что вы имеете в виду под «оставшейся высоты»? Разделы контента будут расширяться, чтобы соответствовать размеру их содержимого. –

+0

если вы установили '.column.active { margin-bottom: 100px; } ', тогда вы хотите установить' height: 100px; 'for' .content'? – Banzay

+0

Я имею в виду высоту между каждой строкой с колонками. – jdo

ответ

0

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

Вам нужен javascript или jsfiddle или что-то в этом роде для этого, чтобы работать отлично.

так что если это была ваша проблема. google что-то вроде: «как сделать меню аккордеона». Могут быть способы сделать это чистым css, но я не уверен в этом.

извините, если это не ваша проблема

+0

Да, я это сделал, но все примеры представлены с полным меню ширины, а не как столбец или сетчатое меню. Я знаю, как делать аккордеон с содержимым ниже, но моя проблема заключается в обработке столбцов и позиции перегружаемого контента. – jdo

+0

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

+0

попробуйте установить свой тег позиции в поле содержимого в положение: относительное; –

0

Это то, что вы хотите?

$(document).ready(function() { 
 
    $('.column').on('click', function(e) { 
 
    $(this).find('.content').toggle(); 
 
    $(this).toggleClass('active', 400); 
 
    }); 
 
});
#wrapper { 
 
    width: 100%; 
 
    margin: 0 auto; 
 
    position: relative; 
 
} 
 

 
.content { 
 
    position: absolute; 
 
    width: 100%; 
 
    color: #000; 
 
    left: 0; 
 
    top: auto; 
 
    display: none; 
 
    text-align: left; 
 
    border: 1px solid #000; 
 
    height: calc(100vh - 100px); 
 
} 
 

 
.column { 
 
    display: inline-block; 
 
    border: 1px solid #000; 
 
    width: 20%; 
 
} 
 

 
.column.active { 
 
    margin-bottom: 100px; 
 
} 
 

 
.toggle { 
 
    width: 25%; 
 
    height: 64px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="wrapper"> 
 
    <div class="column"> 
 
    <div class="toggle">1</div> 
 
    <div class="content"> 
 
     <p>content 1</p> 
 
    </div> 
 
    </div> 
 

 
    <div class="column"> 
 
    <div class="toggle">2</div> 
 
    <div class="content"> 
 
     <p>content 2</p> 
 
    </div> 
 
    </div> 
 

 
    <div class="column"> 
 
    <div class="toggle">3</div> 
 
    <div class="content"> 
 
     <p>content 3</p> 
 
    </div> 
 
    </div> 
 
</div>

+0

вы можете нажать на кнопку полной страницы, чтобы проверить ее ответственность –

+0

Вид, но не совсем. Если я добавлю больше столбцов в новую строку, я хочу, чтобы расширенный контент нажал следующую строку.Таким образом, расширенный контент должен быть таким высоким, каким он должен быть, и следующая строка всегда должна быть прямо под расширенным контентом. – jdo

0
  • Чтобы получить доступное пространство вычесть высоту окна ($ (окно) .height()) от смещения колонки + высота колонны.
  • Установите край нижней части активного столбца = доступное пространство (availSpace), чтобы сдвинуть вторую строку столбцов вниз.

EDIT: Если вы не хотите «.content», чтобы заполнить окно просмотра просто удалить вар (AvailSpace), чтобы найти свободное место, а затем установить высоту «.content» (myContent.height) к краю дна колонны

$(document).ready(function(){ 
 
    $('.column').on('click', function(){ 
 
    \t $("#wrapper").find (".column").css ({"margin-bottom": 0}); 
 
     $("#wrapper").find (".content").css ({"display": "none"}); 
 
     
 
     var myContent = $(this).find('.content'); 
 
     // var availSpace = $(window).height() - ($(this).offset().top + $(this).height()); 
 
     
 
    \t myContent.addClass('active'); 
 
     myContent.css ({"display": "inline-block"}); 
 
     $(this).css ({"margin-bottom": myContent.height()}); 
 
    \t }); 
 
});
#wrapper { 
 
    width: 100%; 
 
    margin: 0 auto; 
 
    position: relative; 
 
} 
 

 
.content { 
 
    position: absolute; 
 
    width: 100%; 
 
    color: #000; 
 
    left: 0; 
 
    top: auto; 
 
    display: none; 
 
    text-align: left; 
 
    border: 1px solid #000; 
 
} 
 

 
.column { 
 
    display: inline-block; 
 
    border: 1px solid #000; 
 
    width: 20%; 
 
} 
 

 

 
      
 
.toggle { 
 
    width: 25%; 
 
    height: 64px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="wrapper"> 
 
    <div class="column"> 
 
     <div class="toggle">1</div> 
 
     <div class="content">  
 
      <p>content 1</p> 
 
     </div> 
 
    </div> 
 

 
    <div class="column"> 
 
     <div class="toggle">2</div> 
 
     <div class="content"> 
 
      <p>content 2<br> 
 
      content 2</p> 
 
     </div> 
 
    </div> 
 

 
    <div class="column"> 
 
     <div class="toggle">3</div> 
 
     <div class="content"> 
 
      <p>content 3</p> 
 
     </div> 
 
    </div> 
 

 
    <div class="column"> 
 
     <div class="toggle">4</div> 
 
     <div class="content"> 
 
      <p>content 4</p> 
 
     </div> 
 
    </div> 
 

 
    <div class="column"> 
 
     <div class="toggle">5</div> 
 
     <div class="content"> 
 
      <p>content 5</p> 
 
     </div> 
 
    </div> 
 

 
    <div class="column"> 
 
     <div class="toggle">6</div> 
 
     <div class="content"> 
 
      <p>content 6</p> 
 
     </div> 
 
    </div> 
 

 
    <div class="column"> 
 
     <div class="toggle">7</div> 
 
     <div class="content"> 
 
      <p>content 7</p> 
 
     </div> 
 
    </div> 
 
</div>

+0

Это близко к тому, что я хочу, но я хочу, чтобы высота занимала столько места, сколько необходимо для окна содержимого. Таким образом, высота не должна совпадать с окном, но такая же, как класс содержимого. Надеюсь, ты понимаешь, что я имею в виду. – jdo

+0

@jdo Я обновил код. Это то, что вы ищите? –

+0

Почти, но теперь контент попадает поверх подстилающих столбцов, если вы изменяете размер окна. Они всегда должны быть в нижней части окна содержимого. – jdo

Смежные вопросы