2015-06-03 15 views
6

Tôi đang cố gắng sử dụng hiệu ứng gợn trên danh sách các mục có thể nhấp nhưng tôi đang gặp vấn đề hiệu ứng gợn sóng trên màn hình khi tôi gói gọn danh sách đó thành một phần tử tùy chỉnh. Nó hoạt động tuyệt vời nếu tôi đặt nó trong index.html của tôi nhưng không thành công khi tôi tạo một phần tử tùy chỉnh được bao gồm ở đó. Xem hình ảnh về vấn đề này:Polymer 1.0 - giấy-gợn di chuyển trên màn hình thay vì khớp với phần tử

enter image description here

Tôi đã đọc câu hỏi tương tự mà câu trả lời là để làm cho tương container, mà phải được đưa vào thực hiện. Vì vậy, tôi tự hỏi nếu nó là cần thiết để thiết lập bất kỳ thuộc tính đặc biệt trong máy chủ khi sử dụng hiệu ứng gợn từ một yếu tố tùy chỉnh.

Mã ví dụ của tôi như sau.

index.html

<!doctype html> 
<html lang=""> 

<head> 
    <meta charset="utf-8"> 
    <meta name="description" content=""> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <title>List test</title> 
    <script src="bower_components/webcomponentsjs/webcomponents-lite.js"></script> 
    <link rel="import" href="elements/elements.html"> 
    <style> 
    paper-icon-item { 
     position: relative; 
     height: 48px; 
    } 
    </style> 
</head> 
<body unresolved class="fullbleed layout vertical"> 
    <template is="dom-bind" id="app"> 
     <my-list></my-list> 
    </template> 
    <script src="scripts/app.js"></script> 
</body> 
</html> 

my-list.html

<dom-module id="my-list"> 
    <style> 
     paper-icon-item { 
     position: relative; 
     height: 48px; 
     } 
    </style> 
    <template> 
    <section> 
    <div class="menu"> 
     <paper-icon-item> 
     <div class="label" fit>Mark as unread</div> 
     <paper-ripple></paper-ripple> 
     </paper-icon-item> 
     <paper-icon-item> 
     <div class="label" fit>Mark as important</div> 
     <paper-ripple></paper-ripple> 
     </paper-icon-item> 
     <paper-icon-item> 
     <div class="label" fit>Add to Tasks</div> 
     <paper-ripple></paper-ripple> 
     </paper-icon-item> 
     <paper-icon-item> 
     <div class="label" fit>Create event</div> 
     <paper-ripple></paper-ripple> 
     </paper-icon-item> 
    </div> 
    </section> 
    </template> 

</dom-module> 
<script> 
    (function() { 
     Polymer({ 
     is: 'my-list' 
     }); 
    })(); 
</script> 

Khi thay thế trong index.html bởi nội dung phần thẻ (tag phần bao gồm) của danh sách của tôi. html, hiệu ứng gợn hoạt động tốt. Các tài sản phù hợp trong gợn đã không giải quyết vấn đề hoặc. Tôi đang thiếu gì trong thành phần tùy chỉnh?

Trả lời

7

LƯU Ý: Nếu bạn đang gặp hành vi này, hoặc hành vi tương tự với nó, trong phiên bản mới nhất của paper-ripple, có khả năng là các vấn đề mà các địa chỉ câu trả lời này không phải là vấn đề bạn đang gặp (xem cập nhật dưới đây) .

paper-ripple có CSS ​​sau đây (chỉ dòng có liên quan được hiển thị):

:host { 
    display: block; 
    position: absolute; 
    top: 0; 
    left: 0; 
    right: 0; 
    bottom: 0; 
} 

Nếu yếu tố cha mẹ 's paper-ripple không có position: relative bộ, điều này sẽ dẫn đến việc gợn lấp đầy position: relative mẹ đầu tiên mà nó tìm thấy , có thể không phải là cha mẹ trực tiếp của nó hoặc toàn bộ tài liệu, tùy theo điều kiện nào đến trước.

Để khắc phục điều này, hãy đảm bảo rằng phần tử bạn đang sử dụng paper-ripple có trong số position: relative trong CSS của nó.

CẬP NHẬT(15 Tháng 6 2015) :paper-ripple 1.0.1 được phát hành vào ngày 11 tháng 6 2015, trong đó bao gồm the PR fixing this problem, làm cho các bản sửa lỗi được đề nghị trong câu trả lời này lỗi thời. Chỉ cần cập nhật bower.json để liên kết với PolymerElements/paper-ripple#^1.0.1.


Vấn đề này là do a current issue with paper-ripple.Điều đang xảy ra là các phần tử paper-ripple đang nhắm mục tiêu yếu tố my-list thay vì phần tử cha paper-icon-item của chúng.

Hiện tại có hai cách để sửa lỗi này:

  1. Trong khi đó, tạo ra một yếu tố tùy chỉnh mà có một yếu tố paper-ripple trong râm của nó/shadow DOM, và kích thước của nó để phù hợp với yếu tố của bạn.

    Ví dụ:

<dom-module id="ripple-wrapper"> 
    <style is="custom-style"> 
    :host { 
     display: block; 
     position: absolute; 
     top: 0; 
     left: 0; 
     right: 0; 
     bottom: 0; 
    } 
    </style> 
    <template> 
    <paper-ripple></paper-ripple> 
    </template> 
</dom-module> 
<script> 
    Polymer({ is: 'ripple-wrapper' }); 
</script> 
  1. Tôi đã đệ trình một pull request vào kho chứa một sửa chữa cho vấn đề này. Hiện tại, tuy nhiên, nó vẫn chưa được hợp nhất. Hiện tại, bạn có thể yêu cầu người lắp đặt bản sao được vá của paper-ripple bằng cách đặt phiên bản paper-ripple trong tệp bower.json của bạn thành vsimonian/paper-ripple#containment-fix.

    Nếu bạn làm điều này, tôi khuyên bạn nên giữ các tab trên issuepull request để bạn có thể hoàn nguyên các thay đổi tạm thời trong bower.json khi chúng không còn cần thiết nữa.

+1

tôi cập nhật các giấy gợn lên phiên bản 1.0.1 nhưng nó didnt giải quyết vấn đề này –

+1

@WaleedAsender OP đã gặp một vấn đề khác với một bạn chạy ngang qua. Giống như @zerodevx được đề cập, nếu phần tử 'position: absolute' được kéo dài thành' top: 0; trái: 0; dưới cùng: 0; right: 0; ', chẳng hạn như gợn, không nằm trong vùng chứa' position: relative', sau đó nó sẽ lấp đầy cửa sổ thay vì phần tử cha của nó. Điều này dẫn đến một vấn đề tương tự, nhưng nó thực sự là, như bạn đã chỉ ra, khác với những gì tôi giải quyết được với câu trả lời của tôi. Tôi sẽ tiếp tục và cập nhật câu trả lời, vì lỗi đã được vá từ lâu, đối với bất kỳ ai khác chạy qua câu hỏi này. –

0

Thẻ mở <style> bị thiếu trong my-list.html.

Dường như nếu kích hoạt các hiệu ứng gợn trên một yếu tố gây nên <paper-ripple> nó trên tất cả các <paper-ripple> yếu tố khác bên trong đó yếu tố tùy chỉnh là tốt. Tạo một phần tử tùy chỉnh cho các mục hoặc di chuyển mọi thứ bên ngoài một phần tử tùy chỉnh dường như giải quyết vấn đề cho tôi.

3

Nó có lẽ là với lưu ý rằng - như một Gotcha tiềm năng - điều quan trọng là để thiết lập các yếu tố container gợn để position: relative;

tôi đã tự hỏi tại sao gợn sóng lấp đầy các thùng chứa gốc mặc dù đã xác định kích thước hộp của tôi.

http://jsbin.com/zijumuhege/edit?html,output

+0

Điều này đã giải quyết được vấn đề, cảm ơn bạn rất nhiều –

+0

@kctang, bắt tốt! tôi đã thực sự viết 'display: relative' ??! Cảm ơn bạn đã chỉnh sửa! :) – zerodevx

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