Đây là cách bạn làm điều đó trong Sass:
.some-element
$main-color: black
color: $main-color
.red > &
$main-color: red
color: $main-color
Kết quả CSS:
.some-element {
color: black;
}
.red > .some-element {
color: red;
}
Nhưng có vẻ như bạn đang cố gắng áp dụng một giải pháp xấu. Vui lòng mô tả những gì bạn đang cố gắng đạt được hơn là cách triển khai giải pháp cho một tác vụ không xác định. Xem XY problem.
UPD
Tôi nghĩ những gì tôi đã cố gắng để đạt được là khá rõ ràng ... nhưng giải thích thêm, tôi muốn 2 phối màu cho một trang. Một trong số đó là mặc định & chỉ khi lớp ".red" xuất hiện trên thẻ body. Những gì bạn đang trình bày trông giống như tôi sẽ phải thiết lập các biến cho mỗi lớp và sau đó lặp lại cho lớp .red. Tôi đã tìm kiếm, về cơ bản, có 1 biến (trong trường hợp này $ chính màu) được thiết lập cho mặc định và sau đó thiết lập lại bên trong lớp .red. Có lý?
Trong SASS, không có cách nào để đặt biến dựa trên việc mã hiện tại có được bao bọc trong lớp hay không. Bạn chỉ có thể khai báo biến theo cách thủ công.
Bạn cũng nên hiểu rằng những gì SASS làm là tạo CSS, không có gì khác. Vì vậy, hãy bắt đầu từ CSS bạn muốn có. Tôi cho rằng đó là một cái gì đó như thế này:
header {
background-color: black; }
#main {
background-color: black; }
body.red header {
background-color: red; }
body.red #main {
background-color: red; }
Bạn nên đã cung cấp mã như vậy ở nơi đầu tiên và đó là một sự xấu hổ mà tôi phải chắc đoán mù.
Mã này có thể được hiển thị như thế này (với các chức năng tương tự):
header {
background-color: black; }
body.red header {
background-color: red; }
#main {
background-color: black; }
body.red #main {
background-color: red; }
Bây giờ chúng ta có thể thấy một mẫu.
Mã này có thể dễ dàng tạo ra với Sass sử dụng một mixin:
=main-color()
background-color: black
body.red &
background-color: red
Sau đó, bạn áp dụng nó như thế này:
header
+main-color
#main
+main-color
Một lựa chọn khác là tạo ra một mixin có chứa tất cả các phong cách. Đây có lẽ là một giải pháp tối ưu vì nó chứa ít sự trùng lặp nhất.
=theme-styles($main-color: black)
header
background-color: $main-color
#main
background-color: $main-color
Sau đó, bạn áp dụng nó như thế này:
+theme-styles
body.red
+theme-styles(red)
Trong thực tế, bạn có thể tạo nhiều chủ đề:
+theme-styles
@each $color in red blue green
body.#{$color}
+theme-styles($color)
Demo: http://sassbin.com/gist/5812941/
Bạn đang lạm dụng cờ '! default'. Cờ này có nghĩa là "chỉ đặt một giá trị cho một biến nếu nó không có giá trị". –
Ah, bạn hoàn toàn đúng. Đã sửa. –
Cũng lưu ý rằng người đăng ký yêu cầu "nếu lớp cha mẹ có màu đỏ", không phải "nếu một biến khác có màu đỏ". : P –