2017-02-22 4 views
0

Это может показаться очень простым вопросом, но я застрял во время анимации высоты div. Есть несколько div с css float:left. Когда я click, конкретный div его высота должна увеличиться. Но с тех пор его высота увеличивается, все остальные позиции div также меняются. Я не хочу, чтобы они меняли свое положение. Что я хочу, так это то, что div чуть ниже target div должен двигаться вниз, не затрагивая других div.Высота анимации onclick inline div

Fiddle

Вот код.

$("div").click(function() { 
 
    if ($(this).height() != 100) 
 
    $(this).animate({ 
 
     height: 100 
 
    }, 1000); 
 
    else 
 
    $(this).animate({ 
 
     height: 150 
 
    }, 1000); 
 
});
div { 
 
    height: 100px; 
 
    width: 100px; 
 
    border: 2px solid; 
 
    float: left; 
 
    margin: 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    HELLO WORLD 1 
 
</div> 
 
<div> 
 
    HELLO WORLD 2 
 
</div> 
 
<div> 
 
    HELLO WORLD 3 
 
</div> 
 
<div> 
 
    HELLO WORLD 4 
 
</div> 
 
<div> 
 
    HELLO WORLD 5 
 
</div> 
 
<div> 
 
    HELLO WORLD 6 
 
</div> 
 
<div> 
 
    HELLO WORLD 7 
 
</div> 
 
<div> 
 
    HELLO WORLD 8 
 
</div> 
 
<div> 
 
    HELLO WORLD 9 
 
</div> 
 
<div> 
 
    HELLO WORLD 10 
 
</div>

+0

я видел, будет, как вы говорите с использованием поплавков, лучше в содержании HTML группы по столбцу inyto в одном DIV для одной колонки –

ответ

0

Хм я думаю, вы могли бы сделать это, добавив еще один DIV внутри, и расширить размер этого Div вместо:

$(".inner-div").click(function() { 
 
    if ($(this).height() != 100) 
 
    $(this).animate({ 
 
     height: 100 
 
    }, 1000); 
 
    else 
 
    $(this).animate({ 
 
     height: 150 
 
    }, 1000); 
 
});
div { 
 
    height: 100px; 
 
    width: 100px; 
 
} 
 

 
.outter-div{ 
 
    float: left; 
 
    margin: 10px; 
 
    overflow: visible; 
 
} 
 

 
.inner-div{ 
 
    border: 2px solid; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="outter-div"> 
 
    <div class="inner-div"> 
 
    HELLO WORLD 1 
 
    </div> 
 
</div> 
 
<div class="outter-div"> 
 
    <div class="inner-div"> 
 
    HELLO WORLD 2 
 
    </div> 
 
</div> 
 
<div class="outter-div"> 
 
    <div class="inner-div"> 
 
    HELLO WORLD 3 
 
    </div> 
 
</div> 
 
<div class="outter-div"> 
 
    <div class="inner-div"> 
 
    HELLO WORLD 4 
 
    </div> 
 
</div> 
 
<div class="outter-div"> 
 
    <div class="inner-div"> 
 
    HELLO WORLD 5 
 
    </div> 
 
</div> 
 
<div class="outter-div"> 
 
    <div class="inner-div"> 
 
    HELLO WORLD 6 
 
    </div> 
 
</div> 
 
<div class="outter-div"> 
 
    <div class="inner-div"> 
 
    HELLO WORLD 7 
 
    </div> 
 
</div> 
 
<div class="outter-div"> 
 
    <div class="inner-div"> 
 
    HELLO WORLD 8 
 
    </div> 
 
</div> 
 
<div class="outter-div"> 
 
    <div class="inner-div"> 
 
    HELLO WORLD 9 
 
    </div> 
 
</div> 
 
<div class="outter-div"> 
 
    <div class="inner-div"> 
 
    HELLO WORLD 10 
 
    </div> 
 
</div>

+0

Спасибо за ответ но проблема заключается в том, что divs перекрываются при увеличении высоты. Я хочу, чтобы divs ниже целевого div перемещались вниз, чтобы не перекрываться. –

+0

Я вижу, поэтому я предлагаю вам использовать http://masonry.desandro.com/ для pinterest-подобной раскладки. – AVAVT

+0

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

1

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

Jsfiddle example

$(".container").find('div').click(function() { 
 
    $(this).toggleClass('show'); 
 
});
.container div { 
 
    height: 100px; 
 
    width: 100px; 
 
    border: 2px solid; 
 
    margin: 10px; 
 
    transition: .5s ease height; 
 
} 
 

 
.container { 
 
    display: flex; 
 
    flex-direction: row; 
 
    flex-wrap: wrap; 
 
    justify-content: flex-start; 
 
    align-content: flex-start; 
 
    align-items: flex-start; 
 
} 
 

 
.show { 
 
    height: 150px !important; 
 
    transition: .5s ease height; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class='container'> 
 
    <div> 
 
    HELLO WORLD 1 
 
    </div> 
 
    <div> 
 
    HELLO WORLD 2 
 
    </div> 
 
    <div> 
 
    HELLO WORLD 3 
 
    </div> 
 
    <div> 
 
    HELLO WORLD 4 
 
    </div> 
 
    <div> 
 
    HELLO WORLD 5 
 
    </div> 
 
    <div> 
 
    HELLO WORLD 6 
 
    </div> 
 
    <div> 
 
    HELLO WORLD 7 
 
    </div> 
 
    <div> 
 
    HELLO WORLD 8 
 
    </div> 
 
    <div> 
 
    HELLO WORLD 9 
 
    </div> 
 
    <div> 
 
    HELLO WORLD 10 
 
    </div> 
 
</div>

+0

Это почти похоже, но проблема заключается в том, что все нижеперечисленные divs перемещаются не только в div ниже целевого div. –

+0

@shubhamagrawal Я знаю своего друга, но, как я сказал выше, его будет очень сложно достичь, потому что сценарий должен будет каким-то образом проверить, какие divs находятся под ним, и он уверен, что это будет статический метод без возможности работать с полный ответственный веб-дизайн. Попытайтесь уменьшить окно до максимума, и он все равно будет работать нормально. –

+0

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