2015-04-12 2 views
0

Мне нужно использовать таблицу с JQuery UI Accordion. Оба заголовка и содержимого должны быть таблицами с 3 столбцами фиксированной ширины. По какой-то странной причине первый столбец содержимого потребляет все пространство, игнорируя css, хотя заголовок выглядит нормально. Вот мой JSFiddle: http://jsfiddle.net/qm12h9tL/JQuery Accordion неправильная ширина

А вот код:

<script> 
$(document).ready(function() { 
    $('#topics').accordion({ 
     collapsible:true, 
     header:'.topic', 
     content:'.lessons' 
    }); 
}); 
</script> 
<style> 
body { 
    width: 400px; 
    max-width: 400px; 
    min-width: 400px; 
} 

.accordion-container { 
    width:100%; 
} 

.topic, .lessons { 
    width: 400px; 
} 

.name { 
    width: 70%; 
} 

.cards { 
    width:15%; 
} 

.percentage { 
    width: 15%; 
} 
</style> 
<div class="accordion-container"> 
    <table id="topics"> 
     <tbody class="topic" style="display:table;" id="t1"> 
      <tr> 
       <td class="name">Topic 1</td> 
       <td class="cards">10 cards</td> 
       <td class="percentage">100%</td> 
      </tr> 
     </tbody> 
     <tbody class="lessons"> 
      <tr> 
       <td class="name">Lesson 1</td> 
       <td class="cards">10 cards</td> 
       <td class="percentage">100%</td> 
      </tr> 
     </tbody> 
    </table> 
</div> 

Edit1 Я попытался кодирования HTML как это:

<table id="topics"> 
     <tr class="topic"> 
      <td class="name">Topic 1</td> 
      <td class="cards">10 cards</td> 
      <td class="percentage">100%</td> 
     </tr> 
     <tr class='lessons'> 
      <td class="name">Lesson 1</td> 
      <td class="cards">10 cards</td> 
      <td class="percentage">100%</td> 
     </tr> 
</table> 

Не работает.

Редактировать 2 Я никогда не думал, что добавление дополнительных уроков в тему будет проблемой! http://jsfiddle.net/qm12h9tL/11/

<table id="topics"> 
    <tbody id="t1"> 
     <tr style="display: table-row;" class="topic"> 
      <td class="name">Topic 1</td> 
      <td class="cards">10 cards</td> 
      <td class="percentage">100%</td> 
     </tr> 
     <tr class="lesson"> 
      <td class="name">Lesson 1</td> 
      <td class="cards">10 cards</td> 
      <td class="percentage">100%</td> 
     </tr> 
     <tr class="lesson"> 
      <td class="name">Lesson 1</td> 
      <td class="cards">10 cards</td> 
      <td class="percentage">100%</td> 
     </tr> 
    </tbody> 
</table> 

+0

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

+0

То, что я увидел, это слова, вычеркнутые и те же слова, написанные на их месте, - смотрели на меня как на редактирование ради редактирования. Я просмотрю его. –

ответ

0

Ваш дисплей: таблица атрибутов стиля щуря макета (на ваш первый TBODY тег). Возможно, это остаток какого-то действия для копирования/вставки?

+1

даже после удаления 'display: table' столбцы, кажется, искажены. – Dhiraj

+0

Я добавил его, пытаясь исправить столбцы. Удаление его не работает. –

+0

Это то, что он закручивает расположение стола, поэтому он делает вашу проблему еще хуже. Вы можете проверить это, посмотрев на него без кода инициализации jquery. JQuery вставляет прогиб внутри элемента tbody, который не может быть там. Таким образом, вы используете аккордеон таким образом, чтобы он не был предназначен для использования. – Markus

1

На самом деле вы добавили свойство display: table в ваш заголовок (<tbody>). Это завинчивает часть макета. Когда вы удаляете его, он превращается в jQuery UI, чтобы испортить ваш макет. Он добавляет display: block в элемент <tr>, который превращается в блок. Я бы посоветовал вам установить display: table-row на ваш элемент <tr>.

Теперь вы столкнулись с другой проблемой, поскольку jQuery добавляет пробел со значком внутри вашего <tr>, который отображается как дополнительная ячейка. Добавить этот CSS:

table span 
{ 
    display: none !important; 
} 

И это исправит.

Обновлено скрипку: http://jsfiddle.net/qm12h9tL/8/


Обновление: фиксированный collapsible: true

+0

Он исправляет макет, но аккордеон не появляется, чтобы быть предназначенным для использования в заявлении tbody. По крайней мере, в Firefox и Chrome он не ведет себя так, как вы ожидали бы от аккордеона. Изменить: по крайней мере, теперь он выбирает текст повсюду, даже если он рушится и расширяется. Но в более общем плане я не думаю, что хорошей практикой является добавление отображения: none к элементам, которые не должны быть там вообще. – Markus

+0

Правильно, но это простой временный обход. И, похоже, он отлично работает в FF и в Chrome, даже если есть небольшая задержка до краха. –

+0

теперь почему углы больше не круглые? –

0

хак был сделан в виде раствора

.ui-accordion .ui-accordion-header{ 
    display: table-caption !important; 
} 

Обратите внимание display: table-caption; не поддерживается в IE7 и более ранних версий , Для IE8 требуется! DOCTYPE. IE9 поддерживает значения.

$(document).ready(function() { \t 
 
\t $('#topics').accordion({ 
 
\t \t collapsible:true, 
 
\t \t header:'.topic', 
 
\t \t content:'.lessons' 
 
\t }); 
 
});
.accordion-container { 
 
    width: 100%; 
 
    background-color: #ff0; 
 
} 
 
#topics{ 
 
    width: 400px; 
 
} 
 
.name { 
 
    width: 70%; 
 
} 
 
.cards { 
 
    width: 15%; 
 
} 
 
.percentage { 
 
    width: 15%; 
 
} 
 
.ui-accordion .ui-accordion-header{ 
 
    display: table-caption !important; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/jquery-ui.min.js"></script> 
 
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/themes/south-street/jquery-ui.css" rel="stylesheet" /> 
 
<div class="accordion-container"> 
 
    <table id="topics"> 
 
    <tbody class="topic" id="t1"> 
 
     <tr> 
 
     <th class="name">Topic 1</th> 
 
     <th class="cards">10 cards</th> 
 
     <th class="percentage">100%</th> 
 
     </tr> 
 
    </tbody> 
 
    <tbody class="lessons"> 
 
     <tr> 
 
     <td class="name">Lesson 1</td> 
 
     <td class="cards">10 cards</td> 
 
     <td class="percentage">100%</td> 
 
     </tr> 
 
    </tbody> 
 
    </table> 
 
</div>

+0

Не работает с шириной = 700 пикселей; Я установил width = 400px, потому что он выглядит лучше в JSFiddle. –

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