2015-07-10 2 views
0

Любая помощь с этим была бы оценена, я не могу ее обработать.Отзывчивый дизайн для отображения: нет

У меня есть список информации, содержащейся в отдельном DIV

На странице загрузки только название каждого DIV показывает.

<div class='listing' >  

<a href="#" onclick="toggle_visibility('interactive');"> 
    <h3 class='title'>Title</h3> 
</a> 

    <div id="interactive" style="display:none;"> 
     <div class="web"><p><a href="#">#</a></p></div> 
     <div class="phone"><p><a href="Tel:#">Tel: #</a></p></div> 
     <div class="email"><p><a href="#">#</a></p></div> 
     <p>copy: ipsum blah </p> 
     <p>Blah Blah</p> 
    </div> 

function toggle_visibility(id) { 
    var e = document.getElementById(id); 
    if(e.style.display == 'block') 
     e.style.display = 'none'; 
    else 
     e.style.display = 'block'; 
} 

OnClick переключает видимость контента. Все идет нормально.

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

Скажем, у меня есть 2 колонки. Если я отключусь, чтобы переключить видимость, он, конечно, по-прежнему отображает содержимое в 4-х столбце. Но я хочу, чтобы невидимый контент теперь возвращался к полной ширине (может быть, много контента, и выглядит странно, чтобы выпустить только половину столбца). Поэтому, по сути, мне нужно, чтобы переключатель onclick отображал div, чтобы всегда быть шириной экрана.

Могу ли я сделать это в css? Я пробовал стилизовать «раскрытый» div, но не радость.

Любые указатели были бы очень желанными ??? !!!! Я уверен, что это легко, но я все пробовал, и я все еще все это изучаю!

+0

Вы используете какие-либо css-рамки или просто html и css. Добавить код в jsFiddle. – Harsh

+0

@Harsh Добавление кода _in SO snippet_, пожалуйста. – somethinghere

+0

Пожалуйста, добавьте полный код, включая стили css – Harsh

ответ

0

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

Во-первых, изменить HTML, чтобы использовать класс, а не жесткий стиль:

<div id="interactive" class="listing-item"> 

Далее измените JS для переключения класса, а не изменить стиль непосредственно:

function toggle_visibility(id) { 
    var e = document.getElementById(id); 
    // Note: classList is IE10+, so you might have to do more work 
    // to support older browsers 
    e.classList.toggle('visible'); 
} 

И, наконец, использовать CSS, чтобы справиться с магией:

.listing-item { 
    display: none; 
} 
.listing-item.visible { 
    display: block; 
} 

@media (...) { 
    .listing-item.visible { 
     ... 
    } 
} 

Если вы хотите получить фантазии, попробовать CSS3 стиль:

.listing-item { 
    overflow: hidden; 
    max-height: 0; 
    transition: all 0.2s ease-in-out; 
} 
.listing-item.visible { 
    // pick something reasonable here, to make sure your 
    // content is visible. Too high, and the animation will be off. 
    max-height: 999px; 
    overflow: visible; 
} 
+0

Большое спасибо за ваше любезное обучение. Я пробовал свой код, и он работает именно так, как моя собственная попытка сработала. Но у меня такая же проблема. Если div class = listing имеет ширину 45%, то при нажатии на него элемент listlist-item.visible все равно равен 45%. Я хочу, чтобы он стал видимым до 100% ширины! –

+0

https://jsfiddle.net/ox4Lts2c/ Макет здесь. Это дизайн для использования на мобильных устройствах/планшетах. Скажем, мы на высоте. 2 столбца идеально подходят для названия. Но при нажатии он должен вернуться к полной ширине, независимо от ширины видимого div. В настоящее время .visible будет прокладывать весь путь влево от экрана. Даже не уверен, что это возможно! –

+0

Итак, вы хотите, чтобы внешний div расширялся, когда внутренний элемент виден, или вы хотите, чтобы внутренний div расширялся за пределами родительского контейнера? – OverZealous