2015-07-06 22 views
9

Tôi hiểu rằng khi sử dụng BEM, tên lớp không được phản ánh trực tiếp cấu trúc HTML, nhưng phải đặt tên phần tử bao bọc như thế nào? Vui lòng bỏ qua cú pháp cụ thể của tôi (gần SUIT); nó vẫn theo BEM, chỉ với một cách phân biệt các yếu tố khác nhau.Đặt tên cho một lớp phần tử bao bọc Khi sử dụng BEM

Ví dụ:

<div class="?"> 
    <footer class="PageFooter"> 
    <h4 class="PageFooter-brand>…</h4> 
    <ul class="PageFooter-contactDetails">…</ul> 
    </footer> 
<div> 

tôi sẽ hiện lớp wrapper trong trường hợp này như PageFooterWrapper, nhưng điều này cảm thấy phiền phức vì wrapper là không độc lập - nó tồn tại hoàn toàn cho PageFooter. Rõ ràng là tiền tố tất cả mọi thứ với PageFooter- là vô lý, do đó, chỉ lá điều trị wrapper như là một phần của PageFooter: PageFooter-wrapper. Điều này làm tôi khó chịu vì có một gợi ý ngụ ý được áp dụng bởi điều này.

Vậy lớp trình bao bọc phải là gì?

+0

Tại sao cần phải có một trình bao bọc xung quanh

vì tất cả các thiết bị này tự nó đại diện cho một vùng chứa hoặc trình bao bọc? – Rob

+0

@Rob Đừng quá lố bịch. Đây là một ví dụ được thực hiện cho câu hỏi. – Undistraction

+0

Hoàn toàn không phải là hình ảnh. Đó là một quan sát kỹ thuật của một người rõ ràng là có kinh nghiệm hơn bạn. Mục đích của nó là gì? – Rob

Trả lời

15

Cách tôi đã luôn coi đó là wrapper nên luôn luôn có khối như vậy:

<div class="PageFooter"> 
    <footer class="PageFooter-inner"> 
    <h4 class="PageFooter-brand">...</h4> 
    <ul class="PageFooter-contactDetails">...</ul> 
    </footer> 
</div> 

Các B khóa chứa E lements nên thay vì có một cái gì đó xung quanh tôi B khóa i chỉ theo sau với nguyên tắc lement E lement và bắt đầu sử dụng inner thay vì các thùng chứa

+1

Cảm ơn. Điều đó làm cho một số ý nghĩa, mặc dù tôi không nghĩ rằng tôi thích thực tế là wrapper bây giờ là yếu tố cấp cao nhất về các lớp học. Trình bao bọc là ví dụ hoàn hảo về thứ gì đó có thể dễ dàng trở thành không cần thiết/cần thiết như một thay đổi bố cục, do đó, ghép nối nó với chân trang như thế này có vẻ sai với tôi. Bằng cách xử lý nó như một phần tử con, nó có thể dễ dàng bị loại bỏ mà không ảnh hưởng đến bất kỳ thứ gì khác. Tóm lại, bạn đã làm cho chân trang ít bị khép kín hơn và ít di động hơn. – Undistraction

+0

Nếu đó là trường hợp thì bạn có thể tranh luận rằng trình bao bọc không cụ thể cho 'PageFooter', nó cụ thể cho nội dung xung quanh nó vì nó dựa trên cách bố trí của những thứ xung quanh nó.Vì vậy, nó có thể làm cho tinh thần để decouple họ và có wrapper gắn liền với bố trí của trang web như trái ngược với 'PageFooter'? –

+1

Có. Đó là chính xác những gì tôi đang đến. Nó phải là phần tử con của vùng chứa chứ không phải là một phần của chân trang. Tôi thường coi một yếu tố như là một container bố trí với các khe cho các phần tử con, vì vậy tôi nghĩ đây thực sự chỉ là một biến thể của nó. – Undistraction

5

Tôi đã ctually sử dụng hai lớp thành công, mô hình của tôi là như sau:

<div class='page-section bem-block'> 
    <div class='bem-block__element'> 
     <!-- etc etc --> 
    </div> 
</div> 

hiệu quả sử dụng một utility class để thực hiện chức năng wrapper nhất định. Các css có thể sẽ tương tự như thế này:

.page-section { 
    width: 100%; 
} 
@media screen and (min-width: 1200px) { 
    margin: 0 auto; 
    width: 1200px; 
} 

Tôi đã tìm thấy điều này hoạt động tốt trong thực tế. Nó cũng sẽ có thể cho .bem-block và nó đương thời kế thừa từ .page-section.

Giải pháp này bổ sung cho Dan Gamble.

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