2011-09-15 48 views
7

tôi xem presentation about object oriented css này, nhưng tôi nghĩ tôi hoặc là không hiểu nó một cách chính xác hoặc không hiểu được lợi ích của việc sử dụng OO CSS:Object hướng CSS

HTML mẫu:

<div class="border-1 bg-2 color-1 font-1"> 
</div> 

Ví dụ CSS :

/* borders */ 
.border-1 { border: 1px solid red; } 

/* backgrounds: */ 
.bg-2 { background: yellow; } 

/* other sections */ 

Tôi thấy một lợi thế trong việc có thể thay đổi kiểu cho nhiều phần tử một cách nhanh chóng, chẳng hạn, có thể chuyển đổi bảng màu sẽ rất hữu ích.

Nhưng thực tế, bạn đang xác định kiểu/xem bên trong HTML hoặc ít nhất là một phần của nó. Tất nhiên, nó tốt hơn là sử dụng thuộc tính style, bởi vì bạn vẫn có thể trao đổi kiểu cho một tập hợp các nhóm.

Vấn đề là bạn định nghĩa các nhóm kiểu bên trong HTML, nhưng tôi biết rằng bạn nên tạo các nhóm "hợp lý" bên trong HTML (ví dụ: class="nav-item"/class="btn submit-btn") và CSS hoàn toàn áp dụng kiểu đó và xác định yếu tố nào thuộc về nhau từ quan điểm "phong cách" (ví dụ: .nav-item, .submit-btn { background: red; }).

Có lẽ tôi hoàn toàn hiểu lầm khái niệm. Tuy nhiên, tôi vẫn không biết một cách tốt để xây dựng CSS của tôi.

Trả lời

7

CSS không hướng đối tượng. Đề xuất của tôi là quên những gì bạn đã đọc về "CSS hướng đối tượng" và thay vào đó tập trung vào các vấn đề với CSS mà bạn đang cố giải quyết. Nếu họ làm cho CSS dễ dàng hơn để viết, đọc và duy trì hoặc để có thêm nhiều tính năng hơn (như biến CSS), tôi nghĩ rằng Less hoặc Sass sẽ phù hợp với nhu cầu của bạn tốt hơn nhiều.

Sử dụng CSS như những gì được đề xuất với "CSS hướng đối tượng" chỉ dẫn đến CSS khủng khiếp, không ngữ nghĩa và vô nghĩa mà về lâu dài không dễ bảo trì hơn CSS thông thường. Cả hai idclass phải có semantic and meaningful names, do đó, bằng cách sử dụng một khuôn khổ cho phép bạn viết ngữ nghĩa CSS (mô tả ý định thay vì trình bày) là trong ý kiến ​​khiêm tốn của tôi tốt hơn nhiều.

+0

@madr, bạn đã thử [Less] (http://lesscss.org/) hoặc [Sass] (http://sass-lang.com/)? Chúng là một giải pháp tốt hơn cho vấn đề này hơn là cố gắng định hướng đối tượng bằng sừng giày thành thứ gì đó và sẽ không bao giờ hướng đối tượng. –

+0

@asbjomu Vì không có lý do gì để không, tôi kết hợp các bộ tiền xử lý với OOCSS để có được tốt nhất từ ​​cả hai. Nhóm của tôi thực sự hài lòng với thỏa thuận làm việc này. – madr

+0

@ AsbjørnUlsberg, nói về kinh nghiệm của tôi, cho một người dùng giao diện người dùng chuyển sang scss/sass mà không có kiến ​​thức về OOCSS, sẽ rất tốt, lý do chính khiến OOCSS tạo ra một dev nghĩ khi nào anh ta nên trừu tượng một phần nhất định CSS là một thành phần độc lập và nếu bạn không tự hỏi mình câu hỏi này với tư cách là một nhà phát triển CSS, thì việc chuyển sang SCSS sẽ không làm cho người đó trở nên tốt hơn! lý do này một mình có thể tiết kiệm rất nhiều mã bloat !! –

3

Đây là một cách "giảm tên", đó là phương pháp thực tế. Mã bạn đã hiển thị thường bị xúc phạm là "enterprise css", không có lý do gì cho mã đó.

Hơn thế nữa, việc có nhiều lớp học trên các yếu tố thực sự làm giảm hiệu suất.

Tôi khuyên bạn nên tuân thủ Mozilla's guidelines khi tạo CSS, cũng hoạt động tương tự cho các trình duyệt khác. Và tạo tệp .css chuyên dụng có hack cho IE6, 7 và 8.

+0

Vui lòng tham khảo một phần cho biết nhiều lớp học được xem là có hiệu suất kém. Sử dụng bộ chọn CSS phức tạp dài và không cần thiết là AFAIK còn tệ hơn nhiều so với sử dụng nhiều lớp. http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/ – madr

+0

'Tránh trình chọn con cháu, ID, phần tử refs,! Sử dụng CSS Lint và CSS lưới '. đây là OOCSS? được. khỏe. không có gì sai với nó. Khá nhiều trí thông minh. Nhưng đâu là phần "hướng đối tượng"? Kỹ thuật lập trình có thể bao gồm các tính năng như trừu tượng dữ liệu, đóng gói, nhắn tin, mô đun, đa hình, và kế thừa. [[C) wiki] (http://en.wikipedia.org/wiki/Object-oriented_programming) Bạn phải làm như thế nào đóng gói bất cứ thứ gì trong CSS? .. CSS thậm chí không có biến, và '