Использование CSS-перехода и переключения классов для отображения / скрытия строк таблицы - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть несколько таблиц, которые имеют много строк. Сначала я хочу показать только первые три строки таблицы. Когда пользователь нажимает ссылку Показать / скрыть, все скрытые строки будут переключаться. Я достиг этого до сих пор с помощью CSS3 и JavaScript ( см. Fiddle ).

CSS (по умолчанию отображаются только три строки):

.hide tr:nth-child(n+4) {
  display:none;
}

JavaScript (переключение над классом для отображения всех строк):

function ShowHide() {
  var tables = document.getElementsByClassName('foo');
  for(i=0; i<tables.length; i++) {
    tables[i].classList.toggle("hide");  
  }
}

Можно ли использовать функциональность transition CSS3, чтобы строки появлялись медленно, а не мгновенно? Например, исчезать / исчезать в течение 2 секунд?

Я знаю, что это легко сделать в JQuery, но я ищу чистое решение CSS.

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

лучший способ сделать это - поиграть с ростом и непрозрачностью.Но вы не можете установить высоту для элементов таблицы (tr / td)

, поэтому вот пример того, как сделать это только с CSS

#expand {
 /* hide the checkbox */
 display: none
}

label {
  /* style as a button (you can't use button inside label with for attribute) */
  padding: 2px 5px;
  border: 1px solid rgba(0,0,0,.2);
  border-radius: 5px;
  font-size: .7rem;
  cursor: pointer;
}

table {
  border-spacing: 0;
  border-collapse: collapse;
}

table tr:nth-child(n+4)>td {
  padding: 0;
}

table tr:nth-child(n+4)>td>div {
  opacity: 0;
  max-height: 0;
  transition: all 250ms ease-in;
}

#expand:checked + table tr:nth-child(n+4)>td {
  padding: 1px;
  /* default */
}

#expand:checked + table tr:nth-child(n+4)>td>div {
  opacity: 1;
  /* try to use something just slightly above the true height */
  max-height: 20px;
  overflow: hidden;
  transition-timing-function: ease-out;
}
<input type="checkbox" id="expand"/>
<table id="table">
  <tbody>
    <tr>
      <td>
        <div>Row 1</div>
      </td>
    </tr>
    <tr>
      <td>
        <div>Row 2</div>
      </td>
    </tr>
    <tr>
      <td>
        <div>Row 3</div>
      </td>
    </tr>
    <tr>
      <td>
        <div>Row 4</div>
      </td>
    </tr>
    <tr>
      <td>
        <div>Row 5</div>
      </td>
    </tr>
    <tr>
      <td>
        <div>Row 6</div>
      </td>
    </tr>
    <tr>
      <td>
        <div>Row 7</div>
      </td>
    </tr>
    <tr>
      <td>
        <div>Row 8</div>
      </td>
    </tr>
    <tr>
      <td>
        <div>Row 9</div>
      </td>
    </tr>
    <tr>
      <td>
        <div>Row 10</div>
      </td>
    </tr>
  </tbody>
</table>
<br/>
<label for="expand">Toggle</label>
0 голосов
/ 11 апреля 2019

Реализация моего комментария «вы можете использовать прозрачность для имитации затухающего» комментария на основе вашего кода Fiddle.

var theButton = document.getElementById("bar");
theButton.onclick = ShowHide;

function ShowHide() {
  var tables = document.getElementsByClassName('foo');
  for(i=0; i<tables.length; i++) {
  	tables[i].classList.toggle("hide");  
  }
}
td { border-bottom:1px solid #ccc; }

.foo tr:nth-child(n+4) {
  display: block;
  opacity: 1;
  transition: opacity 2s ease-in-out;
}

.foo.hide tr:nth-child(n+4) {
  opacity: 0;
  transition: opacity 2s ease-in-out;
}

.foo.gone tr:nth-child(n+4) {
  display: none;
}
<p>
 <input type="button" id="bar" value="Show/Hide" />
</p>

<h2>Table 1</h2>
<table class="foo hide">
  <tr><td>Text</td></tr>
  <tr><td>Text</td></tr>
  <tr><td>Text</td></tr>
  <tr><td>Text</td></tr>
  <tr><td>Text</td></tr>
  <tr><td>Text</td></tr>
</table>

<h2>Table 2</h2>
<table class="foo hide">
  <tr><td>Text</td></tr>
  <tr><td>Text</td></tr>
  <tr><td>Text</td></tr>
  <tr><td>Text</td></tr>
  <tr><td>Text</td></tr>
  <tr><td>Text</td></tr>
</table>

При желании вы можете включать в таблицы transitionstarts и transitionend события для переключения класса .gone после завершения перехода, чтобы переключить их свойство display.Таким образом, вы можете сохранить такие вещи, как позиционирование, поскольку элементы с непрозрачностью 0 по-прежнему будут занимать место на странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...