Chuyển đổi CSS3 không hoạt động


122

Tôi đang cố gắng biến đổi các mục menu của mình bằng cách xoay chúng 10 độ. CSS của tôi hoạt động trong Firefox nhưng tôi không thể tái tạo hiệu ứng trong Chrome và Safari. Tôi biết IE không hỗ trợ thuộc tính CSS3 này nên đó không phải là vấn đề.

Tôi đã sử dụng CSS sau:

li a {
   -webkit-transform:rotate(10deg);
   -moz-transform:rotate(10deg);
   -o-transform:rotate(10deg); 
}

Ai đó có thể vui lòng đề xuất nơi tôi đang làm sai?

Cảm ơn.


2
FYI, IE không hỗ trợ thuộc tính CSS3 này, bạn chỉ cần một tiền tố:-ms-transform:rotate(10deg);
Joshua Pinter


2
Vì chưa có ai đề cập đến vấn đề này, vì bây giờ là năm 2016, hãy đảm bảo rằng bạn đặt phiên bản chưa có tiền tố của quy tắc CSS (ví dụ transform: rotate(10deg);:) bên dưới bất kỳ phiên bản có tiền tố nào bạn chọn để hỗ trợ.
Maximillian Laumeister

Câu trả lời:


301

Đây chỉ là một phỏng đoán có học thức mà không cần xem phần còn lại của HTML / CSS của bạn:

Bạn đã áp dụng display: blockhoặc display: inline-blockđể li a? Nếu không, hãy thử nó.

Nếu không, hãy thử áp dụng các quy tắc chuyển đổi CSS3 để lithay thế.


22
Tôi mến bạn! Đã display: inline-blockgiúp.
Bugs Bunny

2
Một lời giải thích sẽ hữu ích :)
scitronboy

56

Trong các trình duyệt dựa trên webkit (Safari và Chrome), -webkit-transform được bỏ qua trên các phần tử nội tuyến. . Đặt display: inline-block;để làm cho nó hoạt động . Đối với mục đích trình diễn / thử nghiệm, bạn cũng có thể muốn sử dụng góc âm hoặc transformation-originđể văn bản bị xoay ra khỏi vùng hiển thị.


Làm việc hoàn hảo cho tôi, cảm ơn bạn! Tôi đã sử dụng nó trên <span> & copy </span> để làm biểu tượng copyleft.
Elisabeth

@Elisabeth Đó là một ứng dụng tuyệt vời. Lưu ý rằng các tham chiếu thực thể cần phải được kết thúc bằng dấu chấm phẩy (như trong <span>&copy;</span>), mặc dù hầu hết các trình duyệt hiển thị theo cả hai cách.
phihag

Một lưu ý: nếu bạn đang áp dụng các thay đổi cho một nhà nước tương tác (ví dụ, :hoverhay :active), bạn sẽ cần phải áp dụng inline-blockcho phần tử ở trạng thái mặc định của nó, ví dụ a { display: inline-block; } a:active { transform: translateY(0.125em); }. Chỉ áp dụng inline-blockcho trạng thái tương tác dường như không hiệu quả. Ít nhất là trong Chrome - nó hoạt động tốt trên Firefox.
Paul d'Aoust

1
cảm ơn vì đã chỉ ra thực tế là -webkit-transformkhông hoạt động trên các mục nội tuyến. Đã bị mắc kẹt về điều này trước đây.
pbojinov

@phihag Điểm tuyệt vời, bạn đã tiết kiệm cho tôi một số cú giật tóc lớn! Cần lưu ý rằng điều này có thể khiến các yếu tố của bạn biến mất sau khi hoạt ảnh chạy.
texelate

21

Vì không ai tham khảo tài liệu liên quan:

Mô-đun chuyển đổi CSS cấp độ 1 - Thuật ngữ - Phần tử có thể chuyển đổi

Phần tử có thể biến đổi là phần tử thuộc một trong các danh mục sau:

  • một phần tử có bố cục được điều chỉnh bởi mô hình hộp CSS, là phần tử nội tuyến cấp khối hoặc cấp nguyên tử hoặc có thuộc tính hiển thị được tính thành table-row, table-row-group, table-header-group, table-footer -nhóm, ô bảng hoặc chú thích bảng
  • một phần tử trong không gian tên SVG và không bị chi phối bởi mô hình hộp CSS có biến đổi thuộc tính, 'patternTransform' hoặc gradientTransform.

Trong trường hợp của bạn, các <a>phần tử là inlinetheo mặc định.

Thay đổi displaygiá trị của thuộc tính để inline-blockhiển thị các phần tử dưới dạng các phần tử cấp nội tuyến nguyên tử và do đó các phần tử trở nên "có thể biến đổi" theo định nghĩa.

li a {
   display: inline-block;
   -webkit-transform: rotate(10deg);
   -moz-transform: rotate(10deg);
   -o-transform: rotate(10deg); 
   transform: rotate(10deg);
}

Như đã đề cập ở trên, điều này dường như chỉ áp dụng trong -webkitcác trình duyệt dựa trên vì nó dường như hoạt động trong IE / FF bất kể.


0

Bạn có đang cố gắng chỉ xoay các liên kết không? Bởi vì làm điều đó trên các thẻ LI dường như hoạt động tốt.

Theo Snook, các phép biến đổi yêu cầu các phần tử bị ảnh hưởng phải được khối. Anh ấy cũng có một số mã ở đó để làm cho nó hoạt động cho IE bằng cách sử dụng các bộ lọc, nếu bạn muốn thêm nó vào (mặc dù dường như có một số hạn chế về giá trị).


-4

-webkit-transform không cần thiết nữa

ms đã hỗ trợ xoay ( -ms-transform: rotate(-10deg);)

thử cái này:

li a {
   ...

    -webkit-transform: rotate(-10deg);
    -moz-transform: rotate(-10deg);
    -o-transform: rotate(-10deg);
    -ms-transform: rotate(-10deg);
    -sand-transform: rotate(10deg);
    display: block;
    position: fixed;
    }

1
Trong các bài kiểm tra ngày hôm nay, tôi nhận thấy điều đó -webkit-transformthực sự không còn cần thiết trong Chrome nữa. Tuy nhiên, nó vẫn còn cần thiết trong Safari 8.
John Slegers

-Sand-biến đổi để làm gì? Một tìm kiếm ngắn trên Google không có kết quả gì.
Pete

google 'Giấy nhám CSS' có liên quan đến câu hỏi và có thể giúp mọi thứ dễ dàng hơn. nó là một bản hack triển khai hỗ trợ chuyển đổi CSS tiêu chuẩn cho các phiên bản cũ của IE
Pedro Justo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.