Поворот текста заголовка таблицы с помощью CSS-преобразований - PullRequest
35 голосов
/ 04 апреля 2009

Похоже, это возможно при следующем:

.verticalText 
{           
    /* IE-only DX filter */
    writing-mode: tb-rl;
    filter: flipv fliph;

    /* Safari/Chrome function */
    -webkit-transform: rotate(270deg);

    /* works in latest FX builds */
    -moz-transform: rotate(270deg);
}

Это работает в IE.

В Safari, Chrome и FX происходит странная ошибка - размер ячейки вычисляется за до , текст поворачивается!

screenshot of bug

Вот демоверсия: http://jsfiddle.net/HSKws/

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

Кто-нибудь знает способ заставить ячейки соответствовать содержимому после применения преобразования?

Ответы [ 6 ]

18 голосов
/ 04 апреля 2009

«transform» изменяет ориентацию всего элемента, на котором вы его объявляете, а не текстового содержимого внутри него. Это больше похоже на свойство матрицы в IE, чем на режим записи.

Важно отметить, что преобразование элемента не меняет способ расчета размера его содержимого (или то, как этот размер влияет на макет его родителя). Алгоритмы CSS для определения размеров по вертикали и горизонтали различны и достаточно сложны, чтобы с ними правильно было разобраться; нет никакого реального последовательного способа, которым они могли бы приспособить контент с произвольным вращением. Таким образом, «трансформирование» похоже на использование «позиции: относительного»: оно изменяется в зависимости от того, где отображается контент, но не связано с размером макета.

Так что, если вы хотите включить один в таблицу, вам нужно явно установить «высоту» ячейки, чтобы она соответствовала ожидаемой повернутой «ширине». Если вы не знаете этого заранее, вы можете взломать его с помощью JavaScript, возможно.

FWIW: для меня на Fx3.1b3 диапазон также вращается, как и другие. Однако в Windows с его горизонтальным сглаживанием (ClearType) рендеринг выглядит не очень хорошо ... хорошо отрендеренное изображение может получиться значительно лучше.

9 голосов
/ 18 августа 2010

Возможно использование встроенного SVG в документе XHTML (я тестировал только Safari и Firefox):

<html xmlns="http://www.w3.org/1999/xhtml">
  <body>
    <table border="1">
        <tr>
            <td>&#160;</td>
            <td>
                <svg xmlns="http://www.w3.org/2000/svg" width="16" height="150">
                  <text id="thetext" transform="rotate(270, 12, 0) translate(-140,0)">Example column header</text>
                </svg>
            </td>
            <td>
                <svg xmlns="http://www.w3.org/2000/svg" width="16" height="150">
                  <text id="thetext" transform="rotate(270, 12, 0) translate(-140,0)">Example column header</text>
                </svg>
            </td>
            <td>
                <svg xmlns="http://www.w3.org/2000/svg" width="16" height="150">
                  <text id="thetext" transform="rotate(270, 12, 0) translate(-140,0)">Example column header</text>
                </svg>
            </td>
        </tr>
        <tr>
            <td>Example row header</td>
            <td>1</td>
            <td>2</td>
            <td>3</td>
        </tr>
    </table>
  </body>
</html>

К сожалению, вам нужно явно установить ширину и высоту ячеек таблицы и перевод текста, отображаемого с использованием SVG. Кроме того, расширение файла должно быть xhtml.

7 голосов
/ 07 декабря 2011

Webkit добавил:

-webkit-writing-mode:vertical-rl;

Который вы можете применить к div.

6 голосов
/ 26 августа 2012

Когда я ответил на аналогичный вопрос , я решил это, используя плагин jQuery от David Votrubec и комментарий Майка под сообщением в блоге.

Поместите это в .js-файл:

(function ($) {
  $.fn.rotateTableCellContent = function (options) {
  /*
Version 1.0
7/2011
Written by David Votrubec (davidjs.com) and
Michal Tehnik (@Mictech) for ST-Software.com
*/

var cssClass = ((options) ? options.className : false) || "vertical";

var cellsToRotate = $('.' + cssClass, this);

var betterCells = [];
cellsToRotate.each(function () {
var cell = $(this)
, newText = cell.text()
, height = cell.height()
, width = cell.width()
, newDiv = $('<div>', { height: width, width: height })
, newInnerDiv = $('<div>', { text: newText, 'class': 'rotated' });

newInnerDiv.css('-webkit-transform-origin', (width / 2) + 'px ' + (width / 2) + 'px');
newInnerDiv.css('-moz-transform-origin', (width / 2) + 'px ' + (width / 2) + 'px');
newDiv.append(newInnerDiv);

betterCells.push(newDiv);
});

cellsToRotate.each(function (i) {
$(this).html(betterCells[i]);
});
};
})(jQuery);

И это вверху вашей страницы:

<script src="rotatetablecellcontent.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function(){
        $('.yourtableclass').rotateTableCellContent();
    });
</script>

И это в вашем CSS:

/* Styles for rotateTableCellContent plugin*/
table div.rotated {
    -webkit-transform: rotate(270deg);
    -moz-transform: rotate(270deg);
    writing-mode:tb-rl;
    white-space: nowrap;
}

thead th {
    vertical-align: top;
}

table .vertical {
    white-space: nowrap;
}

Затем убедитесь, что у вашей таблицы есть класс «yourtableclass», и что все TD, которые вы хотите повернуть, имеют класс «vertical».

Вот демонстрационная программа, запущенная в jsFiddle .

Надеюсь, это кому-нибудь поможет, хотя я опоздал на два года!

4 голосов
/ 30 января 2014

Чтобы повернуть текст внутри заголовков таблицы:

  1. Поместите содержимое заголовка в div - вращайте эти div, а не сам заголовок
  2. Установите положение: относительное в заголовках таблицы th, положение: абсолютное в повернутых делениях.
  3. Установить высоту th заголовки тоже

Готово.

Вы можете увидеть это здесь:

enter image description here

Что вы можете увидеть на этой странице, если вы сделаете ваше окно тонким - менее 1000 пикселей и оно поворачивает заголовки таблицы - http://www.rugbydata.com/

Вот код, который я использовал:

div.rotatabletext {
-webkit-transform: rotate(-90deg);
/* Firefox */
-moz-transform: rotate(-90deg);
/* IE */
-ms-transform: rotate(-90deg);
/* Opera */
-o-transform: rotate(-90deg);
/* Internet Explorer */
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
width:0px;
text-align:left;
height:0px;
margin-left:0px;
margin-top:0px;
bottom:2px;
position:absolute;
}
table.tournamentresults > * > tr > td {
padding:1px;
}
table.tournamentresults > thead > tr:nth-child(1) > th:nth-child(1) {
height:70px;
position:relative;
}
table.tournamentresults > thead > tr:nth-child(2) th {
height:70px;
position:relative;
}
3 голосов
/ 14 февраля 2011

Этот инструмент заставил меня задуматься ...

http://www.boogdesign.com/examples/transforms/matrix-calculator.html

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