I combined writing-mode and rotation:
.rotated {
writing-mode: tb-rl;
transform: rotate(-180deg);
}
<div class="rotated">Text from bottom with working width/height</div>
This works for me without bad width and height settings inside table cells.
important 2020 edit:
step 1) Look at https://developer.mozilla.org/en-US/docs/Web/CSS/writing-mode , ctrl/cmd-F for “Result”. This table will reflect your browser (which may have improper implementation). Look at the table immediately below it. That table is what things should look like.
Solution:
To make sure your solution is future proof:
- Look at the appropriate column, which will be “Horizontal Script” unless you’re coding e.g. in an Asian language.
- Find a row that suits your needs in terms of sizing the HTML element, AND is properly implemented (appears roughly the same) in the second table below it. For example
writing-mode:vertical-rl;would currently work on Chrome until others are properly implemented in the Blink engine (but if you based your answer off ofsideways-lrit would break once Blink properly implements this behavior, since the two rows are not the same.). - optional: set
transform-originto something, maybe usecalc(...), based on percentages and/or something else - perform
transform:rotate(180deg)or something. This should fix issues with layout that most people would have, causing them to look up this answer. If one has animation problems, that’s a separate issue.
(also tb-rl is deprecated now)