Quản lý vụ nổ CSS


682

Tôi đã phụ thuộc rất nhiều vào CSS cho một trang web mà tôi đang làm việc. Ngay bây giờ, tất cả các kiểu CSS đang được áp dụng trên cơ sở mỗi thẻ, và vì vậy bây giờ tôi đang cố gắng chuyển nó sang nhiều kiểu dáng bên ngoài hơn để giúp thay đổi trong tương lai.

Nhưng bây giờ vấn đề là tôi đã nhận thấy tôi đang nhận được một "Vụ nổ CSS". Tôi trở nên khó khăn khi quyết định cách tổ chức tốt nhất và dữ liệu trừu tượng trong tệp CSS.

Tôi đang sử dụng một số lượng lớn các divthẻ trong trang web, chuyển từ một trang web dựa nhiều vào bảng. Vì vậy, tôi nhận được rất nhiều bộ chọn CSS trông như thế này:

div.title {
  background-color: blue;
  color: white;
  text-align: center;
}

div.footer {
  /* Styles Here */
}

div.body {
  /* Styles Here */
}

/* And many more */

Nó không quá tệ, nhưng vì tôi là người mới bắt đầu, tôi đã tự hỏi liệu các khuyến nghị có thể được đưa ra về cách tốt nhất để tổ chức các phần khác nhau của tệp CSS hay không. Tôi không muốn có một thuộc tính CSS riêng cho mọi thành phần trên trang web của mình và tôi luôn muốn tệp CSS khá trực quan và dễ đọc.

Mục tiêu cuối cùng của tôi là làm cho nó dễ dàng sử dụng các tệp CSS và thể hiện sức mạnh của chúng để tăng tốc độ phát triển web. Bằng cách này, các cá nhân khác có thể làm việc trên trang web này trong tương lai cũng sẽ bắt đầu thực hành sử dụng các thực hành mã hóa tốt, thay vì phải chọn nó theo cách tôi đã làm.


122
Đây là một câu hỏi lớn nhưng đối với nhiều công ty, một vấn đề thực sự không thể giải quyết được. Chủ yếu là do CSS đã được tác giả và được quản lý bởi các nhà thiết kế đồ họa có thể không được nhận thức của các điều khoản simplicity, complexity, maintenance, structurerefactoring.
cherouvim

8
@cherouvim - Thật buồn cười, bạn nên nói điều đó bởi vì toàn bộ lý do của tôi khi hỏi câu hỏi này bắt đầu bằng việc nhìn thấy một số CSS đáng sợ được thiết kế bởi một nghệ sĩ đồ họa. Có lẽ chúng ta cần một số đào tạo tốt hơn cho họ?
JasCav

13
Giải pháp của tôi (trong một thế giới lý tưởng) là có những người tận tâm trong nhóm của bạn cắt PSD thành html + css và duy trì sau đó. Những người này nên gần gũi với các lập trình viên và nhà thiết kế.
cherouvim

@cherouvim Phải đồng ý - đó là cách các cơ quan đang thực hiện, đặc biệt là khi CSS trở nên phức tạp hơn.
John Parker

27
@JasCav, họa sĩ đồ họa không nên chạm vào CSS. Nhà thiết kế webNhà phát triển web mặt trước nên đối phó với CSS. Công việc của Nhà thiết kế đồ họa là làm đồ họa.
zzzzBov

Câu trả lời:


566

Đây là một câu hỏi rất hay. Ở mọi nơi tôi nhìn thấy, các tệp CSS có xu hướng mất kiểm soát sau một thời gian, đặc biệt là, nhưng không chỉ khi làm việc trong một nhóm.

Sau đây là những quy tắc mà bản thân tôi đang cố gắng tuân thủ (không phải là tôi luôn quản lý.)

  • Tái cấu trúc sớm, tái cấu trúc thường xuyên. Thường xuyên dọn sạch các tệp CSS, hợp nhất nhiều định nghĩa của cùng một lớp. Loại bỏ các định nghĩa lỗi thời ngay lập tức .

  • Khi thêm CSS trong khi sửa lỗi, hãy để lại nhận xét về những thay đổi đó ("Điều này là để đảm bảo hộp được căn trái trong IE <7")

  • Tránh dư thừa, ví dụ như xác định điều tương tự trong .classname.classname:hover.

  • Sử dụng ý kiến /** Head **/để xây dựng một cấu trúc rõ ràng.

  • Sử dụng một công cụ prettifier giúp duy trì một phong cách không đổi. Tôi sử dụng Pol Phong , với điều đó tôi khá hài lòng (chi phí 15 đô la nhưng là tiền chi tiêu tốt). Cũng có những cái miễn phí xung quanh (ví dụ Code Beautifier dựa trên CSS Tidy , một công cụ nguồn mở).

  • Xây dựng các lớp học hợp lý. Xem dưới đây cho một vài lưu ý về điều này.

  • Sử dụng ngữ nghĩa, tránh súp DIV - <ul>ví dụ sử dụng s cho các menu.

  • Xác định mọi thứ ở mức càng thấp càng tốt (ví dụ: họ phông chữ mặc định, màu sắc và kích thước trong body) và sử dụng inheritnếu có thể

  • Nếu bạn có CSS ​​rất phức tạp, có thể trình biên dịch CSS sẽ giúp. Tôi dự định sớm xem xét xCSS vì lý do tương tự. Có một vài người khác xung quanh.

  • Nếu làm việc trong một nhóm, hãy làm nổi bật sự cần thiết về chất lượng và tiêu chuẩn cho các tệp CSS. Mọi người đều lớn về các tiêu chuẩn mã hóa trong (các) ngôn ngữ lập trình của họ, nhưng có rất ít nhận thức rằng điều này cũng cần thiết cho CSS.

  • Nếu làm việc trong một nhóm, hãy xem xét sử dụng Kiểm soát phiên bản. Nó làm cho mọi thứ dễ theo dõi hơn và chỉnh sửa xung đột dễ giải quyết hơn nhiều. Nó thực sự đáng giá, ngay cả khi bạn "chỉ" vào HTML và CSS.

  • Đừng làm việc với !important. Không chỉ vì IE = <7 không thể đối phó với nó. Trong một cấu trúc phức tạp, việc sử dụng !importantthường rất hấp dẫn để thay đổi một hành vi mà nguồn không thể tìm thấy, nhưng nó là chất độc để bảo trì lâu dài.

Xây dựng các lớp học hợp lý

Đây là cách tôi thích để xây dựng các lớp hợp lý.

Tôi áp dụng cài đặt toàn cầu trước:

body { font-family: .... font-size ... color ... }
a { text-decoration: none; }

Sau đó, tôi xác định các phần chính của bố cục của trang, ví dụ khu vực trên cùng, menu, nội dung và chân trang. Nếu tôi viết đánh dấu tốt, các khu vực này sẽ giống hệt với cấu trúc HTML.

Sau đó, tôi bắt đầu xây dựng các lớp CSS, chỉ định càng nhiều tổ tiên càng lâu càng tốt, và nhóm các lớp liên quan càng chặt chẽ càng tốt.

div.content ul.table_of_contents 
div.content ul.table_of_contents li 
div.content ul.table_of_contents li h1
div.content ul.table_of_contents li h2
div.content ul.table_of_contents li span.pagenumber

Hãy nghĩ về toàn bộ cấu trúc CSS như một cái cây với các định nghĩa ngày càng cụ thể càng xa gốc bạn. Bạn muốn giữ số lượng lớp học càng thấp càng tốt và bạn muốn lặp lại chính mình càng hiếm khi càng tốt.

Ví dụ: giả sử bạn có ba cấp menu điều hướng. Ba menu này trông khác nhau, nhưng chúng cũng chia sẻ một số đặc điểm nhất định. Ví dụ, tất cả <ul>chúng đều có cùng kích thước phông chữ và các mục đều nằm cạnh nhau (trái ngược với kết xuất mặc định của một ul). Ngoài ra, không có menu nào có bất kỳ dấu đầu dòng ( list-style-type).

Đầu tiên, xác định các đặc điểm chung trong một lớp có tên menu:

div.navi ul.menu { display: ...; list-style-type: none; list-style-image: none; }
div.navi ul.menu li { float: left }

sau đó, xác định các đặc điểm cụ thể của từng trong ba menu. Cấp 1 cao 40 pixel; cấp 2 và 3, 20 pixel.

Lưu ý: bạn cũng có thể sử dụng nhiều lớp cho việc này nhưng Internet Explorer 6 có vấn đề với nhiều lớp , vì vậy ví dụ này sử dụng ids.

div.navi ul.menu#level1 { height: 40px; }
div.navi ul.menu#level2 { height: 20px; }
div.navi ul.menu#level3 { height: 16px; }

Đánh dấu cho menu sẽ như thế này:

<ul id="level1" class="menu"><li> ...... </li></ul>
<ul id="level2" class="menu"><li> ...... </li></ul>
<ul id="level3" class="menu"><li> ...... </li></ul>

Nếu bạn có các yếu tố tương tự về mặt ngữ nghĩa trên trang thì giống như ba menu này, hãy cố gắng tìm ra điểm tương đồng trước và đưa chúng vào một lớp; sau đó, tìm ra các thuộc tính cụ thể và áp dụng chúng cho các lớp hoặc, nếu bạn phải hỗ trợ Internet Explorer 6, ID.

Mẹo HTML khác

Nếu bạn thêm các ngữ nghĩa này vào đầu ra HTML của mình, các nhà thiết kế sau đó có thể tùy chỉnh giao diện của các trang web và / hoặc ứng dụng bằng CSS thuần, đây là một lợi thế lớn và tiết kiệm thời gian.

  • Nếu có thể, hãy cung cấp cho cơ thể mỗi trang một lớp duy nhất: <body class='contactpage'>điều này giúp dễ dàng thêm các chỉnh sửa dành riêng cho trang vào biểu định kiểu:

    body.contactpage div.container ul.mainmenu li { color: green }
  • Khi xây dựng các menu tự động, hãy thêm càng nhiều bối cảnh CSS càng tốt để cho phép tạo kiểu rộng rãi sau này. Ví dụ:

    <ul class="mainmenu">
     <li class="item_first item_active item_1"> First item </li> 
     <li class="item_2"> Second item </li> 
     <li class="item_3"> Third item </li> 
     <li class="item_last item_4"> Fourth item </li> 
    </ul>

    Bằng cách này, mọi mục menu có thể được truy cập để tạo kiểu theo ngữ cảnh ngữ nghĩa của nó: Cho dù đó là mục đầu tiên hay cuối cùng trong danh sách; Cho dù đó là mặt hàng đang hoạt động; và theo số lượng.

Lưu ý rằng việc gán nhiều lớp như được nêu trong ví dụ trên không hoạt động đúng trong IE6 . Có một cách giải quyết để làm cho IE6 có thể xử lý nhiều lớp. Nếu cách giải quyết không phải là một tùy chọn, bạn sẽ phải đặt lớp quan trọng nhất đối với bạn (số mục, hoạt động hoặc đầu tiên / cuối) hoặc sử dụng ID.


3
@Andrew chủ yếu vì trong môi trường động (như CMS) sử dụng ID có thể dễ dàng dẫn đến va chạm (giả sử người dùng đổi tên trang thành "liên hệ", dẫn đến tên đó được sử dụng làm ID của cơ thể, va chạm với biểu mẫu liên hệ cũng được đặt tên là "liên hệ"). Tôi thường khuyên bạn nên sử dụng ID càng ít càng tốt vì lý do đó.
Pekka

4
@Pekka bạn nên xem www.oocss.org rất nhiều điều đi ngược lại với những gì bạn đã đề cập ở đây nhưng đó là cách tốt nhất tôi từng thấy để quản lý sự phình to CSS. Cũng xem câu trả lời của tôi dưới đây: stackoverflow.com/questions/2253110/how-to-manage-css-explumping/ chủ
Moin Zaman

2
@Sam cảm ơn! Tôi thích nó khá tốt, mặc dù tôi thỉnh thoảng thấy những hướng dẫn này rất khó để làm theo bản thân mình. Các tấm phong cách CSS rất dễ bị hỏng theo thời gian - thay đổi màu sắc ở đây, font-weight: boldở đó .... kỷ luật là liều thuốc duy nhất :)
Pekka

1
Nói như một người mới tham gia nghiên cứu về vụ nổ css, cụm từ "lớp duy nhất" thật khó hiểu. Tôi đang có cảm giác đó không phải là một idnhưng nó chắc chắn nghe giống như vậy. Có lẽ khái niệm này có thể được làm rõ?
vàng ari

2
@ari bạn đúng mà về mặt kỹ thuật cũng có thể là một id.
Pekka

89

Đây chỉ là 4 ví dụ:

Trên tất cả 4 câu trả lời của tôi đã bao gồm lời khuyên để tải xuống và đọc PDF CSS Systems của Natalie Downe . (PDF bao gồm hàng tấn ghi chú không có trong các trang trình bày, vì vậy hãy đọc PDF!). Hãy lưu ý những gợi ý của cô ấy cho tổ chức.

EDIT (2014/02/05) bốn năm sau, tôi muốn nói:

  • Sử dụng bộ xử lý trước CSS và quản lý các tệp của bạn dưới dạng partials (Cá nhân tôi thích Sass với La bàn, nhưng Less cũng khá tốt và có những thứ khác)
  • Đọc các khái niệm như OOCSS , SMACSSBEM hoặc getbem .
  • Hãy xem cách các khung CSS phổ biến như BootstrapZurb Foundation được cấu trúc. Và đừng giảm giá các khung ít phổ biến hơn - Inuit là một khung thú vị nhưng có nhiều khung khác.
  • Kết hợp / thu nhỏ các tệp của bạn với bước xây dựng trên máy chủ tích hợp liên tục và / hoặc trình chạy tác vụ như Grunt hoặc Gulp.

Bộ xử lý trước CSS là nguyên nhân của vấn đề chứ không phải là giải pháp. Nắm vững khái niệm xếp tầng thực sự và bạn sẽ giảm bớt sự phình to.
Daniel Sokolowski

@DanielSokolowski bất kỳ công cụ sử dụng không đúng cách có thể là một vấn đề chứ không phải là một giải pháp. Nhưng 100% đồng ý về quan điểm làm chủ thác.
Andy Ford

73

Đừng viết tiêu đề bằng CSS

Chỉ cần chia các phần thành các tập tin. Bất kỳ bình luận CSS, chỉ nên là, bình luận.

reset.css
base.css
somepage.css
someotherpage.css
some_abstract_component.css

Sử dụng một tập lệnh để kết hợp chúng thành một; Nếu cần. Bạn thậm chí có thể có một cấu trúc thư mục đẹp, và chỉ cần tập lệnh của bạn quét đệ quy .csscác tệp.

Nếu bạn phải viết tiêu đề, hãy có TOC ở đầu tệp

Các tiêu đề trong TOC phải hoàn toàn bằng với các tiêu đề bạn viết sau này. Đó là một nỗi đau để tìm kiếm các tiêu đề. Để thêm vào vấn đề, làm thế nào chính xác là bất cứ ai giả sử biết bạn có một tiêu đề khác sau tiêu đề đầu tiên của bạn? ps. không thêm doc-like * (sao) ở đầu mỗi dòng khi viết TOC, điều này chỉ khiến việc chọn văn bản trở nên khó chịu hơn.

/* Table of Contents
   - - - - - - - - -
   Header stuff
   Body Stuff
   Some other junk
   - - - - - - - - -
 */
...
/* Header Stuff 
 */
...
/* Body Stuff 
 */

Viết bình luận có hoặc trong các quy tắc, không nằm ngoài khối

Trước hết, khi bạn chỉnh sửa tập lệnh, có khả năng 50/50 bạn sẽ chú ý đến những gì nằm ngoài khối quy tắc (đặc biệt nếu đó là một khối văn bản lớn;)). Thứ hai, không có trường hợp nào bạn cần "bình luận" bên ngoài. Nếu nó ở bên ngoài, nó là 99% thời gian của một tiêu đề, vì vậy hãy giữ nó như thế.

Tách trang thành các thành phần

Các thành phần nên có position:relative, không paddingvà không margin, hầu hết thời gian. Đơn giản hoá% này cai trị rất nhiều, cũng như cho phép đơn giản hơn nhiều absolute:position'ing của các yếu tố, vì nếu có một container vị trí tuyệt đối các yếu tố vị trí tuyệt đối sẽ sử dụng container khi tính toán top, right, bottom, lefttài sản.

Hầu hết các DIV trong tài liệu HTML5 thường là một thành phần.

Một thành phần cũng là một cái gì đó có thể được coi là một đơn vị độc lập trên trang. Trong thuật ngữ của giáo dân đối xử với một cái gì đó giống như một thành phần nếu nó có ý nghĩa để đối xử với một cái gì đó như một hộp đen .

Tiếp tục với ví dụ trang QA một lần nữa:

#navigation
#question
#answers
#answers .answer
etc.

Bằng cách chia trang thành các thành phần, bạn chia công việc của mình thành các đơn vị có thể quản lý được.

Đặt quy tắc với hiệu ứng tích lũy trên cùng một dòng.

Ví dụ border, marginpadding(nhưng không outline) tất cả thêm vào kích thước và kích thước của phần tử bạn đang tạo kiểu.

position: absolute; top: 10px; right: 10px;

Nếu chúng không thể đọc được trên một dòng, ít nhất hãy đặt chúng ở gần nhau:

padding: 10px; margin: 20px;
border: 1px solid black;

Sử dụng tốc ký khi có thể:

/* the following... */
padding-left: 10px;
padding-right: 10px;
/* can simply be written as */
padding: 0 10px;

Không bao giờ lặp lại bộ chọn

Nếu bạn có nhiều phiên bản của cùng một bộ chọn, rất có thể bạn sẽ không thể tránh khỏi việc kết thúc với nhiều phiên bản của cùng một quy tắc. Ví dụ:

#some .selector {
    margin: 0;
    font-size: 11px;
}
...
#some .selector {
    border: 1px solid #000;
    margin: 0;
}

Tránh sử dụng TAG làm công cụ chọn, khi bạn có thể sử dụng id / class

Trước hết, các thẻ DIV và SPAN là ngoại lệ: bạn không bao giờ nên sử dụng chúng! ;) Chỉ sử dụng chúng để đính kèm một lớp / id.

Điều này...

div#answers div.answer table.statistics {
    border-collapse: collapsed;
    color: pink;
    border: 1px solid #000;
}
div#answers div.answer table.statistics thead {
    outline: 3px solid #000;
}

Nên viết như thế này:

#answers .answer .statistics {
    border-collapse: collapsed;
    color: pink;
    border: 1px solid #000;
}
#answers .answer .statistics thead {
    outline: 3px solid #000;
}

Bởi vì các DIV lơ lửng thêm ở đó không thêm gì vào bộ chọn. Họ cũng buộc một quy tắc thẻ không cần thiết. Nếu bạn đã thay đổi, ví dụ, .answertừ một divđến một articlephong cách của bạn sẽ phá vỡ.

Hoặc nếu bạn thích rõ ràng hơn:

#answers .answer .statistics {
    color: pink;
    border: 1px solid #000;
}
#answers .answer table.statistics {
    border-collapse: collapsed;
}
#answers .answer .statistics thead {
    outline: 3px solid #000;
}

Lý do là border-collapsetài sản là một tài sản đặc biệt chỉ có ý nghĩa khi áp dụng cho a table. Nếu .statisticskhông phải là tablenó không nên áp dụng.

Quy tắc chung là xấu xa!

  • tránh viết các quy tắc chung / ma thuật nếu bạn có thể
  • trừ khi đó là cho thiết lập lại / hủy bỏ CSS, tất cả các phép thuật chung của bạn nên áp dụng cho ít nhất một thành phần gốc

Họ không tiết kiệm thời gian của bạn, họ làm cho đầu bạn nổ tung; cũng như làm cho việc bảo trì trở thành một cơn ác mộng. Khi bạn viết quy tắc, bạn có thể biết họ áp dụng ở đâu, tuy nhiên điều đó không đảm bảo quy tắc của bạn sẽ không gây rắc rối với bạn sau này.

Để thêm vào quy tắc chung này là khó hiểu và khó đọc, ngay cả khi bạn có một số ý tưởng về tài liệu bạn đang tạo kiểu. Điều này không có nghĩa là bạn không nên viết các quy tắc chung chung, chỉ không sử dụng chúng trừ khi bạn thực sự có ý định cho chúng là chung chung và thậm chí chúng còn thêm nhiều thông tin phạm vi vào bộ chọn như bạn có thể.

Những thứ như thế này...

.badges {
    width: 100%;
    white-space: nowrap;
}

address {
    padding: 5px 10px;
    border: 1px solid #ccc;
}

... Có cùng một vấn đề như sử dụng các biến toàn cục trong ngôn ngữ lập trình. Bạn cần phải cung cấp cho họ phạm vi!

#question .userinfo .badges {
    width: 100%;
    white-space: nowrap;
}

#answers .answer .userinfo address {
    padding: 5px 10px;
    border: 1px solid #ccc;
}

Về cơ bản có nghĩa là:

components                   target
---------------------------- --------
#answers .answer   .userinfo address
-------- --------- --------- --------
domain   component component selector 

Tôi thích sử dụng ID bất cứ khi nào một thành phần tôi biết là một singleton trên một trang; nhu cầu của bạn có thể khác nhau.

Lưu ý: Tốt nhất, bạn nên viết vừa đủ. Tuy nhiên, đề cập đến nhiều thành phần hơn trong bộ chọn là lỗi dễ tha thứ hơn, so với việc đề cập đến các thành phần ít hơn.

Giả sử bạn có một paginationthành phần. Bạn sử dụng nó ở nhiều nơi trên trang web của bạn. Đây sẽ là một ví dụ tốt về thời điểm bạn sẽ viết một quy tắc chung. Hãy nói với bạn display:blockcác liên kết số trang cá nhân và cung cấp cho họ một nền màu xám đậm. Để chúng được hiển thị, bạn phải có các quy tắc như thế này:

.pagination .pagelist a {
    color: #fff;
}

Bây giờ hãy nói rằng bạn sử dụng phân trang của mình cho một danh sách các câu trả lời, bạn có thể gặp phải một cái gì đó như thế này

#answers .header a {
    color: #000;
}
...
.pagination .pagelist a {
    color: #fff;
}

Điều này sẽ làm cho các liên kết màu trắng của bạn màu đen, mà bạn không muốn.

Cách khắc phục không chính xác là:

.pagination .pagelist a {
    color: #fff !important;
}

Cách khắc phục chính xác là:

#answers .header .pagination .pagelist a {
    color: #fff;
}

Những bình luận "logic" phức tạp không hoạt động :)

Nếu bạn viết một cái gì đó như: "giá trị này phụ thuộc vào blah-blah kết hợp với chiều cao của blah-blah", chắc chắn bạn sẽ phạm sai lầm và tất cả sẽ rơi xuống như một ngôi nhà thẻ.

Giữ bình luận của bạn đơn giản; nếu bạn cần "hoạt động logic", hãy xem xét một trong những ngôn ngữ tạo khuôn mẫu CSS như SASS hoặc LESS .

Làm thế nào để bạn viết một pallet màu?

Để lại điều này cho đến cuối cùng. Có một tập tin cho toàn bộ pallet màu của bạn. Với tập tin này, phong cách của bạn vẫn nên có một số bảng màu có thể sử dụng được trong các quy tắc. Pallet màu của bạn nên ghi đè lên. Bạn chọn chuỗi chọn bằng cách sử dụng thành phần cha mẹ ở mức rất cao (ví dụ #page:) và sau đó viết kiểu của bạn dưới dạng khối quy tắc tự đủ. Nó có thể chỉ là màu sắc hoặc một cái gì đó nhiều hơn.

ví dụ.

#page #header .description,
#page #categories .description,
#page #answers .answer .body
{
    color: #222; background: #fff; 
    border-radius: 10px;
    padding: 1em;
}

Ý tưởng rất đơn giản, bảng màu của bạn là một bản định kiểu độc lập với kiểu cơ sở, mà bạn xếp tầng .

Tên ít hơn, yêu cầu ít bộ nhớ hơn, làm cho mã dễ đọc hơn

Sử dụng ít tên hơn là tốt hơn. Tốt nhất là sử dụng các từ rất đơn giản (và ngắn!): Văn bản, nội dung, tiêu đề.

Tôi cũng thấy sự kết hợp của các từ đơn giản dễ hiểu hơn sau đó có một loạt các từ "thích hợp" dài: postbody, posthead, userinfo, v.v.

Giữ cho vốn từ vựng nhỏ, theo cách này ngay cả khi một người lạ nào đó đến để đọc súp kiểu của bạn (như chính bạn sau một vài tuần;)) chỉ cần hiểu nơi các từ được sử dụng thay vì sử dụng mọi công cụ chọn. Ví dụ: tôi sử dụng .thisbất cứ khi nào một yếu tố được cho là "mục được chọn" hoặc "mục hiện tại", v.v.

Dọn dẹp sau chính mình

Viết CSS giống như ăn, đôi khi bạn để lại một mớ hỗn độn phía sau. Hãy chắc chắn rằng bạn dọn dẹp mớ hỗn độn đó, nếu không mã rác sẽ chồng chất. Xóa các lớp / id bạn không sử dụng. Xóa các quy tắc CSS mà bạn không sử dụng. Hãy chắc chắn rằng mọi thứ đều chặt chẽ và bạn không có các quy tắc mâu thuẫn hoặc trùng lặp.

Nếu bạn, như tôi đã đề xuất, đã coi một số thùng chứa là hộp đen (thành phần) theo kiểu của bạn, đã sử dụng các thành phần đó trong bộ chọn của bạn và giữ mọi thứ trong một tệp chuyên dụng (hoặc tách một tệp đúng với TOC và tiêu đề), sau đó công việc dễ dàng hơn ...

Bạn có thể sử dụng một công cụ như phần mở rộng firefox Dust-Me Selector (mẹo: trỏ nó vào sitemap.xml của bạn) để giúp bạn tìm thấy một số rác ẩn trong css nukes và Carnies của bạn.

Giữ một unsorted.csstập tin

Giả sử bạn đang tạo kiểu cho trang web QA và bạn đã có biểu định kiểu cho "trang câu trả lời" mà chúng tôi sẽ gọi answers.css. Nếu bây giờ bạn cần thêm nhiều css mới, hãy thêm nó vào biểu unsorted.cssđịnh kiểu sau đó tái cấu trúc vào biểu answers.cssđịnh kiểu của bạn .

Một số lý do cho việc này:

  • tái cấu trúc nhanh hơn sau khi bạn hoàn thành, sau đó tìm kiếm các quy tắc (có lẽ không tồn tại) và tiêm mã
  • bạn sẽ viết những thứ mà bạn sẽ loại bỏ, việc tiêm mã chỉ khiến việc loại bỏ mã đó trở nên khó khăn hơn
  • việc thêm vào tệp gốc dễ dẫn đến sao chép quy tắc / bộ chọn

1
bộ chọn không gắn thẻ chậm hơn nhiều so với bộ chọn thẻ. Tất cả các trình duyệt có phương thức riêng để lấy 'div' chẳng hạn (hoặc bất kỳ thẻ nào khác). Nếu bạn để nó quá chung chung ('. Class'), công cụ kết xuất sẽ phải đi bộ tất cả các yếu tố của DOM để xem có tồn tại một trận đấu hay không.
Miguel Ping

@Miguel Tại sao công cụ kết xuất sẽ không phải chuyển tất cả các thành phần trong DOM để xem chúng có phải là DIV không? Nếu có một số tối ưu hóa đặc biệt thì tại sao nó không được áp dụng cho các lớp / id? Bạn có một nguồn? Kẻ giết người hiệu năng có thể nhìn thấy duy nhất mà tôi nhận thấy với CSS là do spam nổi - nó có thể khiến công cụ kết xuất bị lag khủng khiếp trên một số trình duyệt khi cuộn trang (có thể là quá nhiều phép tính).
srcspider

3
Tôi sẽ bỏ phiếu này vì đã nói không nhắm mục tiêu tagNames (yay!) Nhưng sau đó có một phần về việc không chung chung (boo!)
mwilcox

1
@Miguel, nó không hoạt động theo cách đó. Các trình duyệt đọc một chuỗi CSS ngược, do đó, sẽ mất: "div .myclass" và tìm tất cả các lớp ".myclass", sau đó kiểm tra xem đó có phải là tổ tiên của div không.
mwilcox

5
So sánh các quy tắc chung với các biến toàn cục là quan niệm sai lầm lớn nhất tôi từng nghe về CSS.
gblazex

55

Hãy nhìn vào 1. SASS 2. La bàn


11
Một triệu lần này. Sử dụng Sass đã làm cho tôi trở thành một người sắp xếp css có tổ chức và mạnh mẽ hơn bao giờ hết. Nó cho phép tôi sắp xếp các kiểu trên nhiều tệp, kiểu lồng, sử dụng biến, v.v., v.v.
Alan H.

2
sass, la bàn và ít hơn tất cả tạo ra CSS bình thường vào cuối ngày mà vẫn có thể xấu và phát nổ. Nó không phải là một giải pháp cho CSS bloat trong và của chính nó.
Moin Zaman

8
@Moin_Zaman Theo ý kiến ​​khiêm tốn của tôi, thưa ông, tuyên bố của bạn là thuần túy. bạn viết bằng sass / la bàn / ít hơn và sắp xếp mã của bạn trong tệp của họ. bạn không quan tâm đến việc css đầu ra trông như thế nào. ngoài ra, ít nhất là ít hơn (thông qua ít ứng dụng hơn) có thể giảm thiểu đầu ra rất tuyệt vời.
bzx

1
@bzx bạn đang chứng minh quan điểm của tôi :) Một trình duyệt không hiểu sass / la bàn / ít hơn. tất cả những thứ này cần được biên dịch thành CSS cũ đơn giản hoặc là một phần của bản dựng của bạn. Việc sử dụng các công cụ như thế này mà không biết cuối cùng chúng tạo ra CSS là gì, rất dễ dàng lạm dụng chúng vô tình và kết thúc với các tệp CSS tối ưu.
Moin Zaman

Đó là nơi nén gzip đi vào chơi trò chơi Hầu hết các máy chủ và trình duyệt web sẽ giao tiếp với nội dung được nén khi có thể. Nếu bạn kết thúc việc lặp lại một đoạn chọn nhiều lần, nó sẽ được nén vào một mục băm duy nhất. Vấn đề thực sự duy nhất sau đó là dung lượng RAM cần thiết để phân tích các quy tắc CSS trong trình duyệt.
thứ ba

31

Cách tốt nhất tôi từng thấy để chống lại sự CSSphình to là sử dụng các nguyên tắc CSS hướng đối tượng.

Thậm chí còn có một khung OOCSS khá tốt.

Một số ý thức hệ đi ngược lại với rất nhiều điều được nói ở đây trong các câu trả lời hàng đầu nhưng một khi bạn biết cách kiến ​​trúc sư CSS theo kiểu hướng đối tượng, bạn sẽ thấy nó thực sự hoạt động trong việc giữ mã nạc & có ý nghĩa.

Điều quan trọng ở đây là xác định 'Đối tượng' hoặc xây dựng các mẫu khối trong trang web của bạn và kiến ​​trúc sư với chúng.

Facebook đã thuê người tạo ra OOCSS, Nicole Sullivan để nhận được rất nhiều tiền tiết kiệm trong mã mặt trước của họ (HTML / CSS). Có bạn thực sự có thể nhận được tiền tiết kiệm không chỉ trong CSS của bạn, nhưng trong HTML của bạn quá, mà theo âm thanh của nó, là rất có thể cho bạn khi bạn đề cập đến chuyển đổi một tablecách bố trí dựa vào rất nhiều div's

Một cách tiếp cận tuyệt vời khác tương tự ở một số khía cạnh của OOCSS, đó là lập kế hoạch và viết CSS của bạn để có thể mở rộng và mô đun hóa ngay từ đầu. Jonathan Snook đã thực hiện một bài viết tuyệt vời và sách / ebook về SMACSS - Kiến trúc mô đun và có thể mở rộng cho CSS

Hãy để tôi nối bạn với một số liên kết:
5 lỗi CSS lớn - (Video)
5 lỗi về CSS đồ sộ - (Slides)
CSS Bloat - (Slides)


16

Bạn cũng nên hiểu về tầng, và trọng lượng, và cách chúng hoạt động.

Tôi nhận thấy bạn chỉ sử dụng định danh lớp (div.title). Bạn có biết rằng bạn cũng có thể sử dụng ID và ID đó có trọng lượng lớn hơn một lớp không?

Ví dụ,

#page1 div.title, #page1 ul, #page1 span {
  // rules
}

sẽ làm cho tất cả các thành phần đó chia sẻ kích thước phông chữ, nói hoặc màu hoặc bất kỳ quy tắc nào của bạn. Bạn thậm chí có thể làm cho tất cả các DIV là hậu duệ của # page1 có được các quy tắc nhất định.

Về trọng lượng, hãy nhớ rằng các trục CSS chuyển từ hầu hết chung / nhẹ nhất sang cụ thể nhất / nặng nhất. Đó là, trong bộ chọn CSS, một bộ xác định thành phần được ghi đè bởi một bộ xác định lớp được ghi đè bởi một bộ xác định ID. Số lượng đếm, do đó, bộ chọn có hai bộ xác định phần tử (ul li) sẽ có trọng số lớn hơn số chỉ có một bộ xác định duy nhất (li).

Hãy nghĩ về nó như chữ số. Một số 9 trong cột một vẫn ít hơn một trong cột hàng chục. Bộ chọn có bộ xác định ID, bộ xác định lớp và hai bộ xác định thành phần, sẽ có trọng số lớn hơn bộ chọn không có ID, 500 bộ xác định lớp và 1.000 bộ xác định thành phần. Đây là một ví dụ vô lý, tất nhiên, nhưng bạn có ý tưởng. Vấn đề là, áp dụng khái niệm này giúp bạn dọn sạch rất nhiều CSS.

BTW, việc thêm trình xác định phần tử vào lớp (div.title) là không cần thiết trừ khi bạn gặp xung đột với các phần tử khác có class = "title". Đừng thêm trọng lượng không cần thiết, bởi vì bạn có thể cần sử dụng trọng lượng đó sau.


Sử dụng ID rất tệ giống như sử dụng các biến toàn cục trong mã Visual Basic của bạn.
alpav

2
@alpav: Xin lỗi, điều đó không chính xác. ID là một cách tuyệt vời để làm cho các phần tử giống như xuất hiện khác nhau trong các phần khác nhau của trang mà không tạo ra các tên lớp mới.
Robusto

@Robusto: Tại sao việc tạo tên ID mới khó hơn tạo tên lớp mới?
alpav

@Robusto: tạo tên lớp mới thực sự dễ hơn tên ID vì với ID bạn phải lo lắng về phạm vi toàn cầu và với tên lớp, bạn chỉ cần lo lắng về tính duy nhất trong phạm vi cục bộ, cùng lợi ích với các biến cục bộ.
alpav

1
@ alpav Cảnh đó đánh bại mục đích đóng gói - để có thể đặt tên địa phương mà không cần suy nghĩ trên toàn cầu. Đúng, nhưng các bộ chọn CSS vốn là toàn cầu: khi bạn viết .myclass, bạn chọn mọi thứ với lớp myclass. Trong CSS, các lớp giống hệt với id về khía cạnh đó.
Paul D. Chờ

12

Tôi có thể đề xuất ít CSS Dynamic framework không

Nó tương tự như SASS như đã đề cập trước đó.

Nó giúp duy trì CSS cho mỗi lớp cha.

Ví dụ

 #parent{     
  width: 100%;

    #child1
    {    
     background: #E1E8F2;    
     padding: 5px;    
    }

    #child2
   {
     background: #F1F8E2;
     padding: 15px
   }
 }

Điều này làm gì: Áp dụng chiều rộng: 100% cho cả # child1 và # child2.

Ngoài ra, CSS đặc trưng của # child1 thuộc về #parent.

Điều này sẽ khiến

#parent #child1
{
 width: 100%;
 background: #E1E8F2;
 padding: 5px;
}

#parent #child2
{
 width: 100%;
 background: #F1F8E2;
 padding: 15px;
}

1
Tôi sử dụng sass và có thể đây là một sự khác biệt giữa sass và ít hơn, nhưng tôi khá chắc chắn rằng nó sẽ biên dịch thành `#parent {width: 100%; } #parent # child1 {nền: # E1E8F2; phần đệm: 5px; } #parent # child2 {nền: # F1F8E2; phần đệm: 15px; } `
emik

12

Tôi thấy điều khó khăn là dịch thiết kế cần thiết cho một trang web thành một loạt các quy tắc. Nếu thiết kế của trang web rõ ràng và dựa trên quy tắc, thì tên lớp và cấu trúc CSS của bạn có thể chảy từ đó. Nhưng nếu mọi người, theo thời gian, việc thêm ngẫu nhiên các bit nhỏ vào trang web không có ý nghĩa nhiều, thì bạn không thể làm gì nhiều về điều đó trong CSS.

Tôi có xu hướng tổ chức các tệp CSS của mình đại khái như thế này:

  1. Thiết lập lại CSS, dựa trên Eric Meyer từ . (Vì nếu không, tôi thấy rằng, đối với hầu hết các yếu tố, tôi đã có ít nhất một hoặc hai quy tắc chỉ đặt lại các kiểu trình duyệt mặc định - ví dụ: hầu hết các danh sách của tôi không giống kiểu HTML mặc định cho danh sách.)

  2. Lưới hệ thống CSS, nếu trang web gọi cho nó. (Tôi dựa trên cơ sở của tôi trên 960.gs )

  3. Kiểu cho các thành phần xuất hiện trên mỗi trang (đầu trang, chân trang, v.v.)

  4. Kiểu cho các thành phần được sử dụng ở nhiều nơi trên trang web

  5. Kiểu chỉ có liên quan trên các trang riêng lẻ

Như bạn có thể thấy, hầu hết điều đó phụ thuộc vào thiết kế cho trang web. Nếu thiết kế rõ ràng và có tổ chức, CSS của bạn có thể. Nếu không, bạn bị lừa.


7

Câu trả lời của tôi là cấp cao để giải quyết các mối quan tâm cấp cao mà bạn nêu ra trong câu hỏi của mình. Có thể có các thủ thuật tổ chức cấp thấp và tinh chỉnh bạn có thể làm để làm cho nó đẹp hơn, nhưng không ai trong số chúng có thể khắc phục thiếu sót về phương pháp. Có một số điều ảnh hưởng đến vụ nổ CSS. Rõ ràng là sự phức tạp tổng thể của trang web, nhưng cũng có những thứ như đặt tên ngữ nghĩa, hiệu suất CSS, tổ chức tệp CSS và khả năng kiểm tra / chấp nhận.

Bạn dường như đang đi đúng hướng với việc đặt tên ngữ nghĩa, nhưng nó có thể tiến thêm một bước. Các phần của HTML xuất hiện nhiều lần trên trang web mà không sửa đổi cấu trúc (được gọi là "mô-đun") có thể được coi là gốc chọn, và từ đó bạn có thể phạm vi bố cục bên trong liên quan đến gốc đó. Đây là nguyên lý cơ bản của CSS hướng đối tượng và bạn có thể đọc / xem thêm về nó trong bài nói chuyện này của một kỹ sư Yahoo .

Điều quan trọng cần lưu ý là cách tiếp cận rõ ràng này có thể chạy ngược lại với mối quan tâm về hiệu suất, ưu tiên các bộ chọn ngắn dựa trên id hoặc tên thẻ . Tìm kiếm sự cân bằng đó là tùy thuộc vào bạn, nhưng trừ khi bạn có một trang web lớn, đây chỉ là một hướng dẫn ở phía sau đầu nhắc nhở bạn giữ cho bộ chọn của bạn ngắn. Thêm về hiệu suất ở đây .

Cuối cùng, bạn sẽ có một tệp CSS cho toàn bộ trang web của mình hay nhiều tệp (một tệp cơ sở duy nhất được sử dụng với các tệp trên mỗi trang hoặc -section)? Tệp duy nhất tốt hơn cho hiệu suất, nhưng có thể khó hiểu / duy trì hơn với nhiều thành viên trong nhóm và có thể khó kiểm tra hơn. Để thử nghiệm, tôi khuyên bạn nên có một trang thử nghiệm CSS duy nhất bao gồm mọi mô-đun CSS được hỗ trợ để kiểm tra va chạm và xếp tầng ngoài ý muốn.

Ngoài ra, bạn có thể có một cách tiếp cận nhiều tệp , để phạm vi các quy tắc CSS cho một trang hoặc một phần. Điều này đòi hỏi trình duyệt tải xuống nhiều tệp là vấn đề về hiệu năng. Bạn có thể sử dụng lập trình phía máy chủ để chỉ định và tổng hợp (và thu nhỏ) các tệp CSS thành một tệp động. Nhưng vì các tệp này là riêng biệt và việc kiểm tra chúng sẽ riêng biệt, nên bạn giới thiệu khả năng giao diện không nhất quán trên các trang / phần. Do đó kiểm tra trở nên khó khăn hơn.

Tùy thuộc vào bạn để phân tích nhu cầu cụ thể của khách hàng, cân bằng những mối quan tâm này cho phù hợp.


5

Như đã nói trước tôi: Hãy vào OOCSS. Sass / Less / La bàn rất hấp dẫn để sử dụng, nhưng cho đến khi vanilla CSS được sử dụng đúng cách Sass / Less / La bàn sẽ chỉ khiến mọi thứ tồi tệ hơn.

Trước hết, đọc lên về css hiệu quả. hãy thử Google Page Speed ​​và đọc những gì Souder đã viết về css hiệu quả.

Sau đó, nhập OOCSS.

  • Học cách làm việc với các tầng. (Sau khi tất cả, chúng tôi gọi nó là Cascading Stylesheets).
  • Tìm hiểu làm thế nào để có được độ chi tiết đúng (từ dưới lên chứ không phải từ trên xuống)
  • Tìm hiểu cách tách cấu trúc và da (cái gì là duy nhất và biến thể của những vật thể này là gì?)
  • Tìm hiểu làm thế nào để tách container và nội dung.
  • Học cách yêu lưới.

Nó sẽ cách mạng hóa từng bit một về việc viết css. Tôi hoàn toàn đổi mới và yêu thích nó.

CẬP NHẬT: SMACSS tương tự như OOCSS, nhưng nói chung dễ thích nghi hơn.


2
"Sass / Less / La bàn sẽ chỉ khiến mọi thứ tồi tệ hơn" - đó là sự phụ thuộc khá chủ quan và dự án. Tôi sẽ đưa ra rằng việc sử dụng một trong số này kết hợp với OOCSS sẽ thực sự có lợi cho khả năng duy trì của nhiều dự án lớn (đặc biệt là những dự án có thể thay đổi thường xuyên)
Zach Lysobey

Zach L: OOCSS (hoặc cho vấn đề đó, SMACSS) được sử dụng một cách chính xác làm cho La bàn / Ít / Sass chỉ cần cho tiền tố của nhà cung cấp.
madr

Tôi sẽ không tranh luận điều này quá nhiều (đặc biệt là vì hiện tại tôi không sử dụng bộ xử lý trước), nhưng tôi khá chắc chắn rằng có một nhóm người KHÔNG thấy những thứ đó hữu ích, thậm chí kết hợp với OOCSS / SMACSS bên ngoài các vấn đề về tiền tố của nhà cung cấp
Zach Lysobey

4

Các nguyên tắc cốt lõi cho CSS hợp lý, được trích xuất từ Tái cấu trúc CSS: Từ chỉ nối thêm vào CSS mô đun

Viết bằng SASS. Bạn sẽ điên rồ khi từ bỏ những lợi thế của biến, mixin, v.v.

Không bao giờ sử dụng ID HTML để tạo kiểu; luôn luôn sử dụng các lớp học . ID HTML, khi được sử dụng một cách chính xác, chỉ xuất hiện một lần trong toàn bộ trang, điều này hoàn toàn trái ngược với khả năng sử dụng lại - một trong những hàng hóa cơ bản nhất trong kỹ thuật hợp lý. Hơn nữa, thật khó để ghi đè các bộ chọn có chứa ID và thường là cách duy nhất để chế ngự một ID HTML là tạo một ID khác, khiến ID lan truyền trong cơ sở mã giống như các loài gây hại. Tốt hơn là để lại ID HTML cho các móc thử nghiệm tích hợp hoặc Javascript không thay đổi.

Đặt tên các lớp CSS của bạn theo chức năng trực quan của chúng chứ không phải theo chức năng dành riêng cho ứng dụng của chúng. Ví dụ: nói ".highlight-box" thay vì ".bundle-sản phẩm-giảm giá-hộp". Mã hóa theo cách này có nghĩa là bạn có thể sử dụng lại các biểu định kiểu hiện có của mình khi bạn nhập vai vào các doanh nghiệp phụ. Ví dụ, chúng tôi bắt đầu bán các ghi chú luật nhưng gần đây đã chuyển sang làm gia sư luật. Các lớp CSS cũ của chúng tôi có các tên như ".doad_document_box", một tên lớp có ý nghĩa khi nói về các tài liệu kỹ thuật số nhưng sẽ chỉ gây nhầm lẫn khi áp dụng cho miền mới của gia sư riêng. Một tên tốt hơn phù hợp với cả các dịch vụ hiện có - và bất kỳ dịch vụ nào trong tương lai - sẽ là ".pretty_callout_box".

Tránh đặt tên các lớp CSS sau thông tin lưới cụ thể. Đã có (và vẫn là) một mô hình chống khủng khiếp trong các cộng đồng CSS, theo đó các nhà thiết kế và người tạo ra các khung CSS (ho Twitter Bootstrap ) tin rằng "span-2" hoặc "cols-8" là tên hợp lý cho các lớp CSS. Quan điểm của CSS là cung cấp cho bạn khả năng sửa đổi thiết kế của bạn mà không ảnh hưởng đến việc đánh dấu (nhiều). Hardcoding lưới kích thước vào HTML cản trở mục tiêu này, vì vậy nó được khuyên chống lại trong bất kỳ dự án nào dự kiến ​​sẽ kéo dài hơn một ngày cuối tuần. Thêm về cách chúng tôi tránh các lớp lưới sau này.

Chia CSS của bạn trên các tệp . Lý tưởng nhất là bạn sẽ chia mọi thứ thành "các thành phần" / "vật dụng" và sau đó soạn các trang từ các nguyên tử thiết kế này. Mặc dù thực tế, bạn sẽ nhận thấy rằng một số trang trên trang web của bạn có các đặc điểm riêng (ví dụ: bố cục đặc biệt hoặc bộ sưu tập ảnh kỳ lạ xuất hiện chỉ trong một bài viết). Trong những trường hợp này, bạn có thể tạo một tệp liên quan đến trang cụ thể đó, chỉ tái cấu trúc thành một tiện ích đầy đủ khi thấy rõ rằng phần tử sẽ được sử dụng lại ở nơi khác. Đây là một sự đánh đổi, một trong đó được thúc đẩy bởi các mối quan tâm ngân sách thực tế.

Giảm thiểu việc làm tổ. Giới thiệu các lớp mới thay vì các bộ chọn lồng nhau. Việc SASS loại bỏ nỗi đau của việc lặp lại các bộ chọn khi lồng không có nghĩa là bạn phải làm tổ sâu năm cấp. Không bao giờ đủ điều kiện cho bộ chọn (ví dụ: không sử dụng "ul.nav" trong đó ".nav" có thể thực hiện cùng một công việc.) Và không chỉ định các thành phần HTML cùng với tên lớp tùy chỉnh (ví dụ: "h2.highlight"). Thay vào đó, chỉ sử dụng tên lớp một mình và thả bộ chọn cơ sở (ví dụ: ví dụ trước sẽ là ".highlight"). Bộ chọn quá mức không thêm bất kỳ giá trị nào.

Tạo kiểu cho các phần tử HTML (ví dụ: "h1") chỉ khi tạo kiểu cho các thành phần cơ sở phải nhất quán trong toàn bộ ứng dụng. Tránh các bộ chọn rộng như "tiêu đề ul" vì có thể bạn phải ghi đè chúng ở một số nơi. Như chúng tôi vẫn nói, hầu hết thời gian bạn muốn sử dụng một lớp cụ thể, được đặt tên tốt bất cứ khi nào bạn muốn một phong cách cụ thể.

Nắm bắt những điều cơ bản của Block-Element-Modifier. Bạn có thể đọc về nó chẳng hạn ở đây. Chúng tôi đã sử dụng nó khá nhẹ, nhưng nó vẫn giúp chúng tôi rất nhiều trong việc tổ chức các kiểu CSS.


2

Nhiều lần tôi sẽ thấy các cá nhân chia tập tin thành các phần, với một nhận xét tiêu đề giữa các phần.

Cái gì đó như

/* Headings and General Text */

.... stuff here for H1, etc..

/* Main page layout */

.... stuff here for layout page setup etc.

Nó hoạt động khá tốt và có thể giúp bạn dễ dàng quay lại sau và tìm thấy những gì bạn đang làm.


Điều này không nói gì về mối quan tâm của người hỏi về việc có "một thuộc tính CSS riêng cho mọi thứ".
G-Wiz

1

Bạn nên nhìn vào BEM .

Học thuyết

BEM là một nỗ lực để cung cấp một bộ hướng dẫn tổ chức và đặt tên cho các bộ chọn css nhằm cố gắng làm cho mọi thứ có thể sử dụng lại và mô đun hóa nhiều hơn và để tránh xung đột giữa các bộ chọn loại thường dẫn đến mã spaghetti và đau đầu về tính đặc hiệu.

Khi nó được sử dụng một cách chính xác, nó thực sự có một số tác động rất tích cực.

  • Kiểu làm những gì bạn mong đợi khi chúng được thêm vào một yếu tố
  • Kiểu không bị rò rỉ và chỉ ảnh hưởng đến những gì chúng được thêm vào
  • Kiểu được tách rời hoàn toàn khỏi cấu trúc tài liệu
  • Các kiểu dáng không cần phải ép buộc quá nhiều

BEM hoạt động tốt với SASS để mang lại một phong cách gần như hướng đối tượng cho CSS. Bạn có thể xây dựng các tệp mô-đun, xử lý việc hiển thị một thành phần UI duy nhất và chứa các biến, chẳng hạn như màu sắc và 'phương thức', chẳng hạn như cách xử lý các yếu tố bên trong. Trong khi một lập trình viên OO khó tính có thể chùn bước trước ý tưởng này, trên thực tế, các khái niệm được áp dụng mang lại rất nhiều phần đẹp hơn của các cấu trúc OO, như mô đun hóa, khớp nối lỏng lẻo và sự gắn kết chặt chẽ và khả năng tái sử dụng không ngữ cảnh. Bạn thậm chí có thể xây dựng theo cách trông giống như một đối tượng được đóng gói bằng cách sử dụng Sass và& operato r.

Một bài viết chuyên sâu hơn từ Tạp chí Smashing có thể được tìm thấy ở đây ; và một từ Harry Roberts của CCS Wizardry (những người liên quan đến css nên đọc) ở đây .

Trong thực tế

Tôi đã sử dụng điều này, nhiều lần, cùng với việc đã sử dụng SMACSS và OOCSS có nghĩa là tôi cũng có một cái gì đó để so sánh chúng. Tôi cũng đã làm việc trong một số mớ hỗn độn lớn, thường là do chính tôi tạo ra, thiếu kinh nghiệm.

Khi tôi sử dụng BEM trong thế giới thực, tôi tăng cường kỹ thuật với một vài nguyên tắc bổ sung. Tôi sử dụng các lớp tiện ích - một ví dụ điển hình là lớp bao bọc:

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

Và tôi cũng dựa một chút vào dòng thác và tính đặc hiệu. Ở đây, mô-đun BEM sẽ là .primary-box.headerbối cảnh cho một chuyến đi quá mức cụ thể

.header {
  .primary-box {
    color: #000;
  }
}

(Tôi cố gắng hết sức để làm cho mọi thứ chung chung và bối cảnh miễn phí nhất có thể, có nghĩa là một dự án tốt hầu như mọi thứ đều nằm trong các mô-đun có thể sử dụng lại)

Một điểm cuối cùng tôi đưa ra ở đây là tuy nhỏ và không phức tạp, dự án của bạn có thể xuất hiện, bạn nên làm điều này ngay từ đầu, vì hai lý do:

  • các dự án tăng về độ phức tạp, vì vậy việc đặt nền móng tốt là rất quan trọng, bao gồm css
  • ngay cả một dự án có vẻ đơn giản bởi vì nó được xây dựng trên WordPress có rất ít JavaScript vẫn có thể rất phức tạp trong CSS - OK, bạn không phải thực hiện bất kỳ mã hóa phía máy chủ nào, vì vậy phần đó đơn giản, nhưng giao diện trang phục quảng cáo có hai mươi mô-đun và ba biến thể của mỗi loại: bạn đã có một số css rất phức tạp ở đó!

Thành phần web

Trong năm 2015, chúng tôi bắt đầu xem xét các Thành phần Web. Tôi chưa biết một số lượng lớn về những điều này, nhưng họ có vẻ sẽ kết hợp tất cả các chức năng của giao diện người dùng lại với nhau trong các mô-đun khép kín, cố gắng áp dụng hiệu quả các loại nguyên tắc từ BEM cho mặt trước như một tổng thể và thành phần được phân tán nhưng được ghép hoàn toàn các phần tử như đoạn DOM, Js (MVC) và CSS đều xây dựng cùng một widget UI.

Bằng cách này, họ sẽ giải quyết một số vấn đề ban đầu tồn tại với css mà chúng tôi đã cố gắng giải quyết bằng những thứ như BEM, trong khi đó, làm cho một số kiến ​​trúc mặt trước khác trở nên lành mạnh hơn.

Có một số đọc thêm ở đây và cũng là một khung polymer ở ​​đây rất đáng xem

Cuối cùng

Tôi cũng nghĩ rằng đây là một hướng dẫn css thực hành tốt nhất, hiện đại - được thiết kế đặc biệt để ngăn chặn các dự án css lớn khỏi bị lộn xộn. Tôi cố gắng làm theo hầu hết những điều này.



0

Có một số tài liệu tuyệt vời ở đây và một số đã dành rất nhiều thời gian để trả lời câu hỏi này, tuy nhiên khi nói đến các biểu định kiểu riêng biệt hoặc riêng lẻ, tôi sẽ sử dụng các tệp riêng biệt để phát triển và sau đó chuyển sang sử dụng tất cả các css chung của bạn được hợp nhất vào một tập tin duy nhất khi được triển khai.

bằng cách này, bạn có được cả hai thế giới tốt nhất, tăng hiệu suất (yêu cầu HTTP ít hơn được yêu cầu từ trình duyệt) và tách biệt các mối quan tâm về mã trong khi phát triển.

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.