كيف يمكنني رسم نص عمودي باستخدام متصفح CSS المشترك؟

StackOverflow https://stackoverflow.com/questions/1080792

  •  22-08-2019
  •  | 
  •  

سؤال

أريد تدوير كلمة واحدة من النص بمقدار 90 درجة، مع دعم المتصفحات المشتركة (>= IE6، >= Firefox 2، أو أي إصدار من Chrome أو Safari أو Opera).كيف يمكن القيام بذلك؟

هل كانت مفيدة؟

المحلول

تم تحديث هذه الإجابة بمعلومات حديثة (من حيل CSS).مجد لمات ودوغلاس للإشارة إلى تنفيذ عامل التصفية.

.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-تحويل (و -تحويل webkit).آي إي لديه مرشح المصفوفة(الإصدار 5.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... */
}

نصائح أخرى

وأنا باستخدام التعليمات البرمجية التالية لكتابة النص العمودي في الصفحة. فايرفوكس 3.5+، بكت، أوبرا 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);
}

الحل الآخر هو استخدام عقدة نص 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

حدة 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>

وأنا تكييف هذا من http://snook.ca/archives/html_and_css/css- نص دوران :

<style>
    .Rotate-90
    {
        display: block;
        position: absolute;
        right: -5px;
        top: 15px;
        -webkit-transform: rotate(-90deg);
        -moz-transform: rotate(-90deg);
    }
</style>
<!--[if IE]>
    <style>
        .Rotate-90 {
            filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
            right:-15px; top:5px;
        }
    </style>
    <![endif]-->

ولقد كان لي مشاكل تحاول أن تفعل ذلك في CSS النقي - اعتمادا على الخط يمكن أن تبدو القمامة قليلا. وكبديل لذلك يمكنك استخدام SVG / VML للقيام بذلك. هناك مكتبات التي تساعد على جعلها عبر متصفح بكل سهولة على سبيل المثال رافائيل و <لأ href = "http://docs.sencha.com/ext-js/4- 0 / "يختلط =" نوفولو "> ExtJS . في 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.

إذا كنت تستخدم التمهيد 3، يمكنك استخدام واحدة من انها mixins:

.rotate(degrees);

مثال:

.rotate(-90deg);

وبلدي حل من شأنه أن يعمل على كروم، فايرفوكس، 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*/      
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top