2014-09-11 1 views
1

Я не уверен, как справиться с этим больше - пожалуйста, смотрите скриншот:Установите вертикальный текст правильно на ячейки заголовка таблицы

Screenshot

ячейки заголовка таблицы имеет один стиль - высота: 166px;

затем каждый заголовок ячейки таблицы содержит оболочку с этим свойства стиля

margin-bottom: 10px; 
padding: 0 .5em; 
writing-mode: tb-rl; 
filter: flipv fliph; 
-webkit-transform: rotate(-90deg); 
-moz-transform: rotate(-90deg); 
-o-transform: rotate(-90deg); 
-ms-transform: rotate(-90deg); 
transform: rotate(-90deg); 
display: block; 
font-weight: normal; 
text-transform: uppercase; 

Я также выполнить этот JS-код, чтобы сделать их плотно:

$("table th span").each -> 
    header_height = $(this).outerWidth() if $(this).outerWidth() > header_height 
    $(this).width $(this).height() 
    return 

$("table th").height header_height 

Это была моя последняя попытка. В идеале не должно быть пустого пространства, если в одной строке может быть помещено 2 слова, а затем все должно быть центрировано/выровнено.

+3

Поместите это в [jsfiddle] (http://www.jsfiddle.net) и поставить все CSS и HTML, необходимые для воссоздания этого в вашем вопросе. Намного легче исправить, когда у нас есть все части! – misterManSam

+0

Пожалуйста, добавьте некоторые HTML, контекст всегда полезен. Вы уверены, что вам нужны 'span' и' th', не было бы 'th' достаточно? –

ответ

2

Я воссоздал это для вас. В следующий раз, пожалуйста, включите все соответствующие HTML и CSS.

Чтобы получить эту работу:

  • Установите правую min-width на th, чтобы остановить заголовки из перекрывая друг друга. Он должен быть достаточно большим, чтобы содержать самую длинную строку текста, которую вы будете иметь в заголовках.

  • Установить max-width на span, чтобы содержать его внутри th. Он должен соответствовать высоте th минус любое заполнение.

  • Вы можете поменять min-width на заголовки, содержащие меньше текста, если хотите, путем присоединения класса к меньшим заголовкам и указания для них меньшего min-width.

Невозможно использовать javascript/jQuery.

Have an example!

Screenshot

CSS

th { 
    background: red; 
    height: 166px; 
    min-width: 90px; 
    /* 
     min-width is large enough to stop 
     the longest header text you will have from 
     overlapping when the table is the smallest it will be 
    */ 
} 

th span { 
    display: block; 
    -webkit-transform: rotate(-90deg); 
    -moz-transform: rotate(-90deg); 
    -o-transform: rotate(-90deg); 
    -ms-transform: rotate(-90deg); 
    transform: rotate(-90deg); 
    font-weight: normal; 
    text-transform: uppercase; 
    max-width: 156px; 
    color: #FFF; 
    /* 
     max-width contains the span and 
     must match the height of the th minus 
     any padding you want 
    */ 
} 

.shorty { 
    min-width: 70px; 
} 

/* 
    You could give a class like this 
    to your shorter headers if you wanted 
    maybe apply it with javascript or 
    if you use PHP/whatever you could 
    apply it to strings of a certain size. 
*/ 

HTML

<table> 
    <thead> 
    <tr> 
     <th><span>This is my really long text</span></th> 
     <th class="shorty"><span>Shorty!</span></th> 
     <th><span>This is my really long text</span></th> 
     <th><span>This is my really long text</span></th> 
     <th><span>This is my really long text</span></th> 
    </tr> 
    </thead> 
</table> 
+0

гений! еще несколько, если вы все еще можете помочь - я отредактировал ваш jsbin: http://jsbin.com/wonoxuvikini/1/edit. Очевидно, что первая ячейка может отображать весь текст внутри ячейки, заставляя некоторые слова делиться в одной строке. я не могу расширить ширину ячейки больше, так как она уже достаточно широка. 2. Это введенный пользователем текст, поэтому он может иметь произвольную длину, я пытался использовать переполнение: скрытый, переполненный текстом: многоточие, однако верхняя и нижняя часть текста обрезаются. Нужна только последняя часть текста, который отключается ... – David

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