Why does this line 'jump' when I call slideDown?
Asked Answered
C

3

10

Since there's a lot of code, I won't post it here. Rather, you can find it all here. That way you can play around with it and run it:

function P_Expand(item_id) {
  $('#p_' + item_id).slideToggle();
}
.data_table {
  width: 650px;
  margin-left: auto;
  margin-right: auto;
  border-collapse: collapse;
}
.data_table tbody th {
  border-bottom: 1px solid #555;
  text-align: left;
}
.data_table tbody tr td a {
  color: #8b9cb0;
  text-decoration: none;
}
.hidden_data {
  display: none;
  padding: 10px;
  font-style: italic;
  color: #777;
}
<table class='data_table'>
  <tbody>
    <tr>
      <td>
        <a href='javascript:void(0)' onclick='P_Expand(9)'>Drop me down!</a>
      </td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr>
      <td colspan='3' style='background-color: #eee'>
        <div id='p_9' class='hidden_data'>
          <p style="margin: 0px;">Donec dolor urna, vehicula in elementum eget, auctor dignissim nibh. Morbi et augue et nisi.</p>
        </div>
      </td>
    </tr>
    <tr>
      <td>Line number 2...</td>
      <td>...</td>
      <td>...</td>
    </tr>
  </tbody>
</table>

The problem happens when the 'Drop me down!' link is clicked. The DIV slides down as expected, but makes a sudden 'jump' right at the end.

Why does it do this, and how can I make it go away?

Chow answered 27/7, 2010 at 5:29 Comment(0)
S
12

demo

codes link

.hidden_data {
    overflow: hidden;
    display:none; /* <--- remove this */
    padding: 10px;
    font-style: italic;
    color: #777;
}​

similar problem answered

Swayback answered 27/7, 2010 at 5:59 Comment(3)
Yes! It works! So the problem is that it needs to have an explicit height set beforehand?Chow
yeap!.. that's the problem... ;)Swayback
Wish I could give you +2 :) Thanks a million!Chow
D
23

Actually you don't need any of this. Just give your hidden element a width:

.hidden_data {
    display: none;
    padding: 10px;
    font-style: italic;
    color: #777;
    width: 300px;
}

It will just works!

PS: I spent all the weekend on this...

Dioscuri answered 24/8, 2010 at 4:58 Comment(1)
Simple solution! I need to set overflow:hidden; aswell, tnx!Spratt
S
12

demo

codes link

.hidden_data {
    overflow: hidden;
    display:none; /* <--- remove this */
    padding: 10px;
    font-style: italic;
    color: #777;
}​

similar problem answered

Swayback answered 27/7, 2010 at 5:59 Comment(3)
Yes! It works! So the problem is that it needs to have an explicit height set beforehand?Chow
yeap!.. that's the problem... ;)Swayback
Wish I could give you +2 :) Thanks a million!Chow
A
0

Give the hidden div a set height. jsfiddle


Edit. Found some answers here. You can store the height of each element, and then reapply it. Not ideal for your situation, but maybe a starting point

Abet answered 27/7, 2010 at 5:48 Comment(2)
But what if the content changes and it no longer fits on the line? The snippet in my example is part of a larger page that has lots of those lines and they're not guaranteed to be one-liners.Chow
Whoa, don't use min-height. That's just funky.. Trying other options now.Abet

© 2022 - 2024 — McMap. All rights reserved.