2012-07-16 33 views

Trả lời

22

Đây là giải pháp của tôi rằng điều chỉnh chiều cao tự động: http://jsfiddle.net/9ccjE/

tôi đã sử dụng workaround rằng r3bel gửi: Can you use CSS3 to transition from height:0 to the variable height of content?

+7

'.measuringWrap' là không cần thiết. Bạn có thể sử dụng thuộc tính scrollHeight của '.growDiv' http://jsfiddle.net/9ccjE/293/ – Guria

+0

Thậm chí mã ngắn hơn bằng cách sử dụng toán tử bậc ba: http://jsfiddle.net/9ccjE/838/ – Robbendebiene

8

này nên làm việc, đã phải cố gắng một thời gian quá ..: D

css3 animation jsfiddle

+0

Tốt, nhưng làm cách nào để tránh đặt chiều cao trong javascript? Độ dài của nội dung bên trong lớp sẽ thay đổi. – Felix

+3

như được viết [ở đây] (http://stackoverflow.com/a/3512194/1517380) điều này là không thể atm (vì bạn muốn có một hình ảnh động phải không?) ngoại trừ [giải pháp thay thế đắt tiền được mô tả tại đây] (http://stackoverflow.com/questions/3149419/can-you-use-css3-to-transition-from-height0-to-the-variable-height-of-content) – r3bel

+0

tôi đã chỉnh sửa jsfiddle của bạn một lần nữa và thêm một "workaround" cho chiều cao động, nhưng bạn phải có chiều cao của trình đơn thả xuống mỗi lần khi chiều cao thả xuống thay đổi với javascript: [jsfiddle] (http://jsfiddle.net/Bq6eK/217 /). tôi không đảm bảo với bạn rằng điều này làm việc với tất cả các trình duyệt một cách chính xác: D – r3bel

2

http://jsfiddle.net/Bq6eK/215/

tôi không sửa đổi mã của bạn cho giải pháp này, tôi đã viết của tôi thay vào đó. Giải pháp của tôi không hoàn toàn là những gì bạn đã yêu cầu, nhưng có lẽ bạn có thể xây dựng nó với kiến ​​thức hiện có. Tôi cũng đã nhận xét mã này để bạn biết chính xác tôi đang làm gì với những thay đổi đó.

Là giải pháp để "tránh đặt chiều cao trong JavaScript", tôi vừa tạo tham số 'maxHeight' trong hàm JS có tên toggleHeight. Bây giờ nó có thể được đặt trong HTML cho mỗi div của lớp có thể mở rộng.

Tôi sẽ nói điều này, tôi không phải là siêu kinh nghiệm với các ngôn ngữ front-end, và có một vấn đề mà tôi cần phải bấm vào nút 'Hiện/ẩn' hai lần trước khi hoạt ảnh bắt đầu. Tôi nghi ngờ đó là vấn đề với sự tập trung.

Vấn đề khác với giải pháp của tôi là bạn có thể thực sự tìm ra văn bản ẩn mà không cần nhấn nút hiển thị/ẩn chỉ bằng cách nhấp vào div và kéo xuống, bạn có thể đánh dấu văn bản không hiển thị và dán đến một không gian hiển thị.

Đề xuất của tôi cho một bước tiếp theo trên đầu trang của những gì tôi đã làm là để làm cho nó để hiển thị/ẩn nút thay đổi động. Tôi nghĩ rằng bạn có thể tìm ra cách để làm điều đó với những gì bạn đã dường như biết về hiển thị và ẩn văn bản với JS.

+0

Tôi đã thực hiện hai chỉnh sửa nhỏ: http://jsfiddle.net/Bq6eK/215/. 'onclick =" ... "' phải trả về false và chiều cao phải được đặt trực tiếp cho phần tử, chứ không phải trong CSS. Nếu không, phải bấm vào nó hai lần để mở hộp, bởi vì 'elem.style' chỉ chứa tập hợp kiểu cho phần tử, nhưng không phải kiểu dáng hiệu quả. – kay

+0

Cảm ơn! Giờ thì tôi đã hiểu. – ayang9

0

Đây là giải pháp không sử dụng JS. Nó sử dụng checkboxes thay thế.

Bạn có thể ẩn các hộp kiểm bằng cách thêm này để CSS của bạn:

.container input{ 
    display: none; 
} 

Và sau đó thêm một số phong cách để làm cho nó trông giống như một button.

Here's the source code that I modded.

+2

Giải pháp không áp dụng chiều cao theo số lượng văn bản. Trong CSS, bạn phải quyết định chiều cao của div đã chọn: '.ac-container input: checked ~ article.ac-small { \t chiều cao: 140px; } 'Tôi cần một giải pháp áp dụng chiều cao theo nội dung. – Felix

0

OMG, tôi đã cố gắng để tìm một giải pháp đơn giản để này trong nhiều giờ . Tôi biết mã đơn giản nhưng không ai cung cấp cho tôi những gì tôi muốn. Vì vậy, cuối cùng đã làm việc trên một số mã ví dụ và làm một cái gì đó đơn giản mà bất cứ ai có thể sử dụng không có yêu cầu JQuery. Javascript và css và html đơn giản. Để hoạt ảnh hoạt động, bạn phải đặt chiều cao và chiều rộng hoặc hoạt ảnh sẽ không hoạt động. Tìm thấy điều đó một cách khó khăn.

<script> 
     function dostuff() { 
      if (document.getElementById('MyBox').style.height == "0px") { 

       document.getElementById('MyBox').setAttribute("style", "background-color: #45CEE0; height: 200px; width: 200px; transition: all 2s ease;"); 
      } 
      else { 
       document.getElementById('MyBox').setAttribute("style", "background-color: #45CEE0; height: 0px; width: 0px; transition: all 2s ease;"); 
      } 
     } 
    </script> 
    <div id="MyBox" style="height: 0px; width: 0px;"> 
    </div> 

    <input type="button" id="buttontest" onclick="dostuff()" value="Click Me"> 
Các vấn đề liên quan