Putar dan terjemahkan


89

Saya mengalami masalah saat memutar dan memposisikan baris teks. Sekarang hanya posisi yang berhasil. Rotasi juga berfungsi, tetapi hanya jika saya menonaktifkan pemosisian.

CSS:

#rotatedtext {
    transform-origin: left;
    transform: rotate(90deg);
    transform: translate(50%, 50%);
}

Html hanyalah teks biasa.

Jawaban:


160

Alasannya adalah karena Anda menggunakan properti transform dua kali. Karena aturan CSS dengan kaskade, deklarasi terakhir menang jika memiliki kekhususan yang sama. Karena kedua deklarasi transformasi berada dalam kumpulan aturan yang sama, inilah masalahnya.

Apa yang dilakukannya adalah ini:

  1. putar teks 90 derajat. Baik.
  2. terjemahkan 50% kali 50%. Ok, ini adalah properti yang sama seperti langkah pertama, jadi lakukan langkah ini dan abaikan langkah 1.

Lihat http://jsfiddle.net/Lx76Y/ dan buka di debugger untuk melihat deklarasi pertama ditimpa

Karena terjemahan menimpa rotate, Anda harus menggabungkannya dalam deklarasi yang sama: http://jsfiddle.net/Lx76Y/1/

Untuk melakukan ini, Anda menggunakan daftar transformasi yang dipisahkan spasi:

#rotatedtext {
    transform-origin: left;
    transform: translate(50%, 50%) rotate(90deg) ;
}

Ingat bahwa mereka ditentukan dalam rantai, jadi terjemahan diterapkan terlebih dahulu, lalu putar setelah itu.


23
Saya telah menemukan bahwa perangkaian sangat penting untuk diingat. Bandingkan terjemahan yang diikuti oleh rotasi - jsfiddle.net/Mrjm8/3 - dengan rotasi yang diikuti oleh terjemahan - jsfiddle.net/Mrjm8/2
Lukas

Bagaimana cara kerjanya saat ditulis dalam HTML, bukan CSS?
JakeTheSnake

2
@JakeThe tidak. Transformasi CSS adalah fitur CSS.
Stijn de Witt

2
Wow Terimakasih. Anda harus berani pada aspek chaining :) yang merupakan elemen kunci yang tidak pernah disebutkan oleh banyak blog dan spesifikasi!
cgatian

@ Luke Terima kasih telah menunjukkannya, urutannya sangat penting!
Yami Odymel

12

Saya tidak bisa berkomentar jadi begini. Tentang jawaban @David Storey.

Hati-hati dengan "urutan eksekusi" di rantai CSS3! Urutannya dari kanan ke kiri, bukan dari kiri ke kanan.

transformation: translate(0,10%) rotate(25deg);

The rotateOperasi dilakukan terlebih dahulu, maka translate.

Lihat: CSS3 mengubah urutan penting: operasi paling kanan dulu


4

Tidak perlu untuk itu, karena Anda dapat menggunakan 'mode penulisan' css dengan nilai 'vertikal-lr' atau 'vertikal-rl' sesuai keinginan.

.item {
  writing-mode: vertical-rl;
}

CSS: mode menulis


2

Sesuatu yang mungkin terlewatkan: dalam proyek chaining saya, ternyata daftar yang dipisahkan spasi juga membutuhkan titik koma yang dipisahkan spasi di bagian akhir.

Dengan kata lain, ini tidak berhasil:

transform: translate(50%, 50%) rotate(90deg);

tapi ini:

transform: translate(50%, 50%) rotate(90deg) ; //has a space before ";"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.