2012-10-31 32 views
6

Tôi có một nút có một số văn bản trong đó. Khi bạn nhấn nó, văn bản sẽ thay đổi. Điều này làm cho chiều rộng của nút thay đổi. Nó sẽ là tuyệt vời nếu ta có thể chuyển việc thay đổi chiều rộng của một nguyên tố với một cái gì đó như thế này:Kích thước phần tử chuyển đổi do thay đổi nội dung gây ra

#el { 
    transition: width 150ms ease-out; 
} 

Tất nhiên, đó chỉ có tác dụng khi bạn thay đổi một cách rõ ràng width tài sản.

Có ai biết một số thanh lịch cách nào để đạt được hiệu ứng này không? Here's a (yet-to-function) fiddle to hack away at.

Trả lời

2

Hãy thử this fiddle bằng cách sử dụng jQuery.

$('button').click(function() { 
    var width = $(this).css('width'); 
    var height = $(this).css('height'); 
    $(this).html('Hello, World!'); 
    var newWidth = $(this).css('width'); 
    $(this).css({'width': width, 'height': height}); 
    $(this).animate({'width': newWidth}, 1000); 
});​ 
+0

Đây là kinda đi đúng hướng, nhưng nó cần phải được tinh chỉnh để các văn bản doesn' t "pop" - Tôi đang chơi với nó. Tôi muốn * thực sự * muốn xem một cái gì đó với javascript tối thiểu, mặc dù. – namuol

+0

Rất hữu ích, cảm ơn! (Trong trường hợp của tôi, tôi đã thêm 'white-space: nowrap;' để làm mịn hiệu ứng.) –

0

Tôi đoán điều này là không thể, bởi vì trình duyệt không thể có được chiều rộng mục tiêu chính xác; Giả sử nó có giá trị trước khi chuyển đổi, nhưng tại thời điểm đó, nút đã đến độ rộng! Có lẽ tansition tồn tại, và chúng ta không thể nhìn thấy nó. vì vậy bạn cần chiều rộng ban đầu và bạn cần phải biết chiều rộng mục tiêu quá, chúng tôi js

1

Với Maurice's answer, văn bản của nút tràn đến dòng thứ hai, được làm việc xung quanh bằng cách buộc chiều cao của nút Chiều cao. Thay vào đó, hãy sử dụng

button { 
    white-space: nowrap; 
} 

để văn bản của nút nằm trên một dòng và được hiển thị trong khi chuyển đổi. Sau đó, các mã không còn phải đối phó với chiều cao của nút, vì vậy nó có thể trở nên đơn giản hơn:

$('button').click(function() { 
    var width = $(this).css('width'); 
    $(this).text('Hello, World!'); 
    var newWidth = $(this).css('width'); 
    $(this).css({'width': width}); 
    $(this).animate({'width': newWidth}, 400); 
}); 

http://jsfiddle.net/2rr54vp2/1/

Các vấn đề liên quan