CSS 크로스 브라우저로 세로 텍스트를 어떻게 그릴 수 있습니까?


243

크로스 브라우저 (> = IE6,> = Firefox 2, 모든 버전의 Chrome, Safari 또는 Opera)를 지원하여 한 단어의 텍스트를 90도 회전하고 싶습니다. 어떻게 할 수 있습니까?


4
상호 호환성과 함께 사용할 수있는 순수한 CSS는 없습니다. 내가 가진 것은 전부입니다. 이미지가 더 좋습니다.
Robert K

1
세로 텍스트 크로스 브라우저는 그리 어렵지 않습니다. dns4.nl에는 오페라에서도 작동하는 솔루션이 있습니다. 나는 모든 버전, 즉 모질라와 사파리 (또한 크라운)로 테스트했습니다. 링크는 dns4.nl/pagina/html_code/vertikale_tekst.html 입니다. xkcd150에 대한 의견 :> 문제는 캔버스 요소에 의존한다는 것입니다. – xkcd150 9 월 20 일 10:13 아니오, 절차는 캔버스 요소에 의존하지 않습니다.

다음은 IE에서도 (문제에 대한 솔루션 포함) 모든 종류의 텍스트 변환을 수행하는 방법을 설명하는 자습서입니다. :) useragentman.com/blog/2010/03/09/… 도움이 되길 바랍니다 !
Juanma Guerrero

여기 내가 사용한 기술에 대한 분석이 있습니다 : scottgale.com/blog/css-vertical-text/2010/03/01

이 페이지의 지시에 따라 성공적으로 회전 할 수는 있지만 페이지를 인쇄 할 수 없습니다. 텍스트가 거꾸로 인쇄됩니다. 이 웹 사이트는 저에게 매우 유용했습니다 : sevenwires.com/play/UpsideDownLetters.html
Nahuel

답변:


213

CSS 트릭의 최신 정보로이 답변을 업데이트했습니다 . 필터 구현을 지적한 Matt와 Douglas에게 큰 도움이되었습니다.

.rotate {
  -webkit-transform: rotate(-90deg);
  -moz-transform: rotate(-90deg);
  -ms-transform: rotate(-90deg);
  -o-transform: rotate(-90deg);
  transform: rotate(-90deg);

  /* also accepts left, right, top, bottom coordinates; not required, but a good idea for styling */
  -webkit-transform-origin: 50% 50%;
  -moz-transform-origin: 50% 50%;
  -ms-transform-origin: 50% 50%;
  -o-transform-origin: 50% 50%;
  transform-origin: 50% 50%;

  /* Should be unset in IE9+ I think. */
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
}

오래된 답변 :

FF 3.5 또는 Safari / Webkit 3.1의 경우 -moz-transform (및 -webkit-transform)을 확인하십시오. IE에는 매트릭스 필터 (v5.5 이상)가 있지만 사용 방법을 잘 모르겠습니다. Opera에는 아직 변환 기능이 없습니다.

.rot-neg-90 {
  /* rotate -90 deg, not sure if a negative number is supported so I used 270 */
  -moz-transform: rotate(270deg);
  -moz-transform-origin: 50% 50%;
  -webkit-transform: rotate(270deg);
  -webkit-transform-origin: 50% 50%;
  /* IE support too convoluted for the time I've got on my hands... */
}

고스트 베어 아이콘의 경우 +1;)이 작업을 수행하는 데 많은 어려움이 있었고 DOM 구조를 변경하고 마이너스 마진으로 퍼지해야했습니다. 사용하기는 간단하지만 페이지가 인쇄 될 때 제대로 보이지 않는 IE 버전 : writing-mode : tb-rl; 필터 : flipv fliph;
RMorrisey

12
Microsoft "필터 : progid : DXImageTransform.Microsoft.BasicImage (rotation = 3);"
Matt

1
불행히도 IE9 (표준 모드에서!)는 -ms-transform- * 스타일 필터를 모두 적용 합니다 . 호환성보기에서는 필터 만 적용됩니다.
Romløk 2012 년

3
텍스트가 블록 요소인지 확인하십시오. 즉 display : inline-block 또는 이와 유사한 것을 사용하십시오
James Westgate

2
다음은 IE8 및 IE9를위한 몇 가지 필터입니다. 첫 번째는 IE8이고 두 번째는 IE8 표준 모드이며 # 3은 IE9 +에 대한 필터를 제거합니다. Arrrgh, CSS 해킹 필터링을 중지하기 위해 stackoverflow 주석을 얻을 수 없으므로 jsfiddle.net/GrPyj/9
Justin Grant

73

다음 코드를 사용하여 페이지에 세로 텍스트를 작성합니다. Firefox 3.5 이상, 웹킷, Opera 10.5 이상 및 IE

.rot-neg-90 {
    -moz-transform:rotate(-270deg); 
    -moz-transform-origin: bottom left;
    -webkit-transform: rotate(-270deg);
    -webkit-transform-origin: bottom left;
    -o-transform: rotate(-270deg);
    -o-transform-origin:  bottom left;
    filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
}

Chrome 5에서 작동합니다. IE 8 "쿼크"모드에서는 작동하지 않습니다. 않는다 "IE8 표준 모드"에 대한 작업을.
Asaf Bartov

알려 줘서 고마워. 쿼크 모드에서 IE의 세로 텍스트를 사용하는 방법을 찾으면 여기에 게시하십시오.
Choesang

15

또 다른 방법은 사용하는 것입니다 SVG 텍스트 노드 되어 대부분의 브라우저에서 지원을 .

<svg width="50" height="300">
    <text x="28" y="150" transform="rotate(-90, 28, 150)" style="text-anchor:middle; font-size:14px">This text is vertical</text>
</svg>

데모 : https://jsfiddle.net/bkymb5kr/

SVG 텍스트에 대한 추가 정보 : http://tutorials.jenkov.com/svg/text-element.html


훌륭한 솔루션, 이전 솔루션보다 훨씬 우수-회전 후 텍스트 위치 지정에 문제가 없음
Picard

9

CSS 쓰기 모드의 모듈은 수직 텍스트 직교 흐름을 소개합니다.

writing-mode원하는 값으로 속성을 사용하십시오 .

span { margin: 20px; }
#vertical-lr { writing-mode: vertical-lr; }
#vertical-rl { writing-mode: vertical-rl; }
#sideways-lr { writing-mode: sideways-lr; }
#sideways-rl { writing-mode: sideways-rl; }
<span id="vertical-lr">
  ↑ (1) vertical-lr 至<br />
  ↑ (2) vertical-lr 至<br />
  ↑ (3) vertical-lr 至
</span>
<span id="vertical-rl">
  ↓ (1) vertical-rl 至<br />
  ↓ (2) vertical-rl 至<br />
  ↓ (3) vertical-rl 至
</span>
<span id="sideways-lr">
  ↓ (1) sideways-lr 至<br />
  ↓ (2) sideways-lr 至<br />
  ↓ (3) sideways-lr 至
</span>
<span id="sideways-rl">
  ↓ (1) sideways-rl 至<br />
  ↓ (2) sideways-rl 至<br />
  ↓ (3) sideways-rl 至
</span>


2
sideways-rl은 현재 널리 지원되지 않습니다. 세로
-rl

6

나는 이것을 http://snook.ca/archives/html_and_css/css-text-rotation 에서 조정했습니다 .

<스타일>
    .Rotate-90
    {
        디스플레이 : 블록;
        위치 : 절대;
        오른쪽 : -5px;
        상단 : 15px;
        -웹킷 변환 : 회전 (-90deg);
        -moz- 변환 : 회전 (-90도);
    }
</ style>
<!-[IE의 경우]>
    <스타일>
        .Rotate-90 {
            필터 : progid : DXImageTransform.Microsoft.BasicImage (rotation = 3);
            오른쪽 : -15px; 상단 : 5px;
        }
    </ style>
    <! [엔디 프]->

5

순수한 CSS로 시도하는 데 문제가 있습니다. 글꼴에 따라 약간 졸졸 나 보일 수 있습니다. 대안으로 SVG / VML을 사용하여 수행 할 수 있습니다. RaphaelExtJS 와 같이 쉽게 브라우저를 가로 지르는 데 도움이되는 라이브러리가 있습니다 . ExtJS4에서 코드는 다음과 같습니다.

    var drawComp = Ext.create('Ext.draw.Component', {
        renderTo: Ext.getBody(), //or whatever..
        height: 100, width: 100 //ditto..
    });
    var text = Ext.create('Ext.draw.Component', {
        type: "text",
        text: "The text to draw",
        rotate: {
            x: 0, y: 0, degrees: 270
        },
        x: -50, y: 10 //or whatever to fit (you could calculate these)..
    });
    text.show(true);

이것은 IE6 + 및 모든 최신 브라우저에서 작동하지만 불행히도 적어도 FF3.0이 필요하다고 생각합니다.


1
IE6 +와 모든 최신 브라우저의 차이점을 좋아합니다. IE의 모든 버전이 최신 버전이 아니라고 읽습니다.
ClarkeyBoy

1
@ClarkeyBoy IE10만이 다른 브라우저와 거의 비슷하다고 말하고 강제 GPU 렌더링 및 그리드 레이아웃 때문에 만 가능합니다. 최신 브라우저는 다른 브라우저보다 x3-x10 배 느리게 업데이트되기 때문에 IE를 실제로 계산할 수는 없습니다.
skmasq

CSS 변환 속성을 사용하면 반응 적으로 디자인 된 페이지와 호환되지 않을 수 있으므로 SVG 파일 또는이 JS를 사용하는 것이 가장 좋습니다.
b01

5

Bootstrap 3을 사용하는 경우 믹스 인 중 하나를 사용할 수 있습니다.

.rotate(degrees);

예:

.rotate(-90deg);

1
여전히 작동하지만 다음 사항에 유의하십시오. 모든 공급 업체 믹스 인은 Gruntfile에 Autoprefixer가 도입되어 v3.2.0부터 더 이상 사용되지 않습니다. v4에서 제거됩니다.
yishaiz

4

Chrome, Firefox, IE9, IE10에서 작동하는 내 솔루션 (요구 사항에 따라 정도 변경) :

.rotate-text {
  -webkit-transform: rotate(270deg);
  -moz-transform: rotate(270deg);
  -ms-transform: rotate(270deg);
  -o-transform: rotate(270deg);
  transform: rotate(270deg);
  filter: none; /*Mandatory for IE9 to show the vertical text correctly*/      
}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.