2013-04-19 33 views
12

Ok, giả sử tôi có CSS ​​truyền thống sauNối chọn cha mẹ đến cuối với Sass

.social-media { /* ... */ } 
.social-media .twitter { /* ... */ } 
.social-media .facebook { /* ... */ } 
ul.social-media { /* ... */ } 

Vì vậy, tôi đã cố gắng để làm điều đó như thế này với SCSS:

.social-media { 

    /* ... */ 

    .twitter { 
     /* ... */ 
    } 
    .facebook { 
     /* ... */ 
    } 

    // Here's the problem: 
    ul& { 
     /* ... */ 
    } 
} 

Phần cuối cùng không hoạt động, vì có vẻ như ký hiệu chỉ nên xuất hiện ở đầu bộ chọn. Có cách giải quyết nào không?

+0

Bạn cần cân nhắc suy nghĩ lại cách bạn đặt tên sự vật. Tại sao bạn có một phần tử với lớp 'social-media', và sau đó một danh sách không có thứ tự bên trong nó với cùng tên lớp? – zakangelle

+0

@zakang bạn không hiểu đúng cách. Tôi có một số kiểu được định nghĩa cho các phần tử truyền thông xã hội. Và sau đó, tôi muốn áp dụng một số kiểu dáng đặc biệt cho các phần tử UL với lớp '.social-media'. Không có gì giống như '. Social-media ul.social-media' trong mã của tôi, giống như bạn đang ngụ ý. –

+0

Lỗi của tôi, quá nhiều mã quét và không đủ đọc :) – zakangelle

Trả lời

23

Sass 3.2 trở lên

Điều duy nhất bạn có thể làm là đảo ngược làm tổ của bạn hay không tổ tại tất cả: .social phương tiện truyền thông {

/* ... */ 

    .twitter { 
     /* ... */ 
    } 
    .facebook { 
     /* ... */ 
    } 
} 

ul.social-media { 
    /* ... */ 
} 

Sass 3.3 và sau đó

Bạn có thể làm điều đó bằng cách sử dụng nội suy và chỉ thị @at-root:

.social-media { 
    /* ... */ 

    // Here's the solution: 
    @at-root ul#{&} { 
     /* ... */ 
    } 
} 

Tuy nhiên, nếu chọn cha mẹ của bạn có chứa nhiều selectors, bạn sẽ cần phải sử dụng selector-append thay vì:

.social-media, .doodads { 
    /* ... */ 

    // Here's the solution: 
    @at-root #{selector-append(ul, &)} { 
     /* ... */ 
    } 
} 

Output:

.social-media, .doodads { 
    /* ... */ 
} 
ul.social-media, ul.doodads { 
    /* ... */ 
} 
+0

Đó là những gì tôi đã sợ ... Vô cùng bạn có thể làm tối và làm sáng màu từ sass của bạn và bạn không thể làm điều gì đó như thế này. Cảm ơn câu trả lời của bạn! –

+0

Nó phải làm với thực tế là sử dụng '&' không phải là thay thế chuỗi đơn giản. Nếu bộ chọn cha của bạn là 'ul.foo', bạn có thể đã kết thúc bằng' ulul.foo' nếu đúng như vậy. – cimmanon

+0

hm ... giải pháp này hoạt động tốt trên sassmeister, nhưng trên địa phương của tôi, với cùng một phiên bản của sass như sassmeister, điều này mang lại cho tôi một lỗi: ( –

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