Hướng dẫn pass variable from ts to scss - chuyển biến từ ts sang scss

Một tùy chọn là các biến CSS.

Đây không phải là một biến SASS có sẵn trong tiền xử lý, mà là một cái gì đó có sẵn trong trình duyệt trong thời gian chạy. Do đó, bạn có thể nhận/đặt nó với JavaScript và kiểu CSS sẽ cập nhật dựa trên giá trị biến.

Chẳng hạn, giả sử thành phần của bạn cho phép bạn đặt màu văn bản thông qua biến JavaScript

element.style.setProperty("--text-color", textColor);
7:

CSS:

p { color: var(--text-color); }

JS:

element.style.setProperty("--text-color", textColor);

Và nếu bạn muốn tính linh hoạt/khả năng duy trì của các biến trong SCSS của mình - bạn có thể có các biến trỏ đến các biến JS/CSS.

SCSS:

// _vars.scss
$text-color: var(--text-color);

// _styles.scss
p { color: $text-color }

Đảm bảo xác minh rằng tính năng này có mức độ hỗ trợ trình duyệt của bạn.

Đôi khi bạn cần chia sẻ các biến giữa CSS (hoặc SCSS) và TypeScript, ví dụ, nếu bạn có danh sách các màu trong tệp SCSS của mình và cần kiểm tra tên biến trong TypeScript để chắc chắn là màu có sẵn.

Hãy tưởng tượng một thành phần Vue có một thuộc tính để đặt màu nền:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<template>
<div :class="['component', colorClass]">
My component
div>
template>
<script>
const availableColors = ['primary', 'alert', 'my-custom-color']

export default {
name: 'my-component',
props: {
color: String
},
computed: {
colorClass () {
if (availableColors.indexOf(this.color) !== -1) {
return `color-${this.color}`
}
return null
}
}
}
script>

Trong thành phần này, nếu bạn đặt màu thuộc tính và giá trị có sẵn, hãy thêm một lớp cho màu đó, ví dụ, nếu màu prop là

element.style.setProperty("--text-color", textColor);
8 thêm lớp
element.style.setProperty("--text-color", textColor);
9, nhưng nếu giá trị của prop là
// _vars.scss
$text-color: var(--text-color);

// _styles.scss
p { color: $text-color }
0 Thêm bất kỳ lớp nào liên quan đến màu sắc vì
// _vars.scss
$text-color: var(--text-color);

// _styles.scss
p { color: $text-color }
0 không phải là một màu có sẵn.

Hãy nhớ rằng, có lẽ chúng ta có một tệp SCSS nơi chúng ta xác định rằng các lớp đó, một cái gì đó giống như:

1
2
3
4
5
6
7
8
9
10
11
12
13
$primary: #333;
$alert: #900;
$custom: #090;

.color-primary {
background: $primary;
}
.color-alert {
background: $alert;
}
.color-custom {
background: $custom;
}

Chúng tôi có thể cải thiện tệp này để tạo chương trình lớp bằng cách sử dụng sức mạnh của SCSS:

1
2
3
4
5
6
7
8
9
10
11
12
________số 8

Cách tạo ra các lớp màu này cho phép chúng ta đơn giản hóa cách chúng ta thêm một màu mới. Chúng ta chỉ nên thêm màu mới vào

// _vars.scss
$text-color: var(--text-color);

// _styles.scss
p { color: $text-color }
2 và chúng ta sẽ có lớp màu

1
2
3
4
5
6
7
8
9
10
11
12
13
$primary: #333;
$alert: #900;
$custom: #090;

.color-primary {
background: $primary;
}
.color-alert {
background: $alert;
}
.color-custom {
background: $custom;
}

Chúng tôi có thể cải thiện tệp này để tạo chương trình lớp bằng cách sử dụng sức mạnh của SCSS:😔

1
2
3
4
5
6
7
8
9
10
11
12

________số 8
We will add an

// _vars.scss
$text-color: var(--text-color);

// _styles.scss
p { color: $text-color }
3 stament to our
// _vars.scss
$text-color: var(--text-color);

// _styles.scss
p { color: $text-color }
6 file

Cách tạo ra các lớp màu này cho phép chúng ta đơn giản hóa cách chúng ta thêm một màu mới. Chúng ta chỉ nên thêm màu mới vào
// _vars.scss
$text-color: var(--text-color);

// _styles.scss
p { color: $text-color }
2 và chúng ta sẽ có lớp màu
element.style.setProperty("--text-color", textColor);
0

Nhưng nếu bạn nhớ trong thành phần của chúng tôi, chúng tôi có chiều rộng mảng, danh sách các màu có sẵn, nếu chúng tôi không thêm màu sắc mới vào thành phần, chúng tôi không thể sử dụng nó 😔

Nhưng có một cách để chỉ cần thêm màu sắc trong SCSS và cũng sử dụng danh sách trong TypeScript:

// _vars.scss
$text-color: var(--text-color);

// _styles.scss
p { color: $text-color }
3.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<template>
<div :class="['component', colorClass]">
My component
div>
template>
<script>
const availableColors = ['primary', 'alert', 'my-custom-color']

export default {
name: 'my-component',
props: {
color: String
},
computed: {
colorClass () {
if (availableColors.indexOf(this.color) !== -1) {
return `color-${this.color}`
}
return null
}
}
}
script>

Trong thành phần này, nếu bạn đặt màu thuộc tính và giá trị có sẵn, hãy thêm một lớp cho màu đó, ví dụ, nếu màu prop là

element.style.setProperty("--text-color", textColor);
8 thêm lớp
element.style.setProperty("--text-color", textColor);
9, nhưng nếu giá trị của prop là
// _vars.scss
$text-color: var(--text-color);

// _styles.scss
p { color: $text-color }
0 Thêm bất kỳ lớp nào liên quan đến màu sắc vì
// _vars.scss
$text-color: var(--text-color);

// _styles.scss
p { color: $text-color }
0 không phải là một màu có sẵn.

Hãy nhớ rằng, có lẽ chúng ta có một tệp SCSS nơi chúng ta xác định rằng các lớp đó, một cái gì đó giống như:
1
2
3
4
5
6
7
8
9
10
11
12
13

$primary: #333;
$alert: #900;
$custom: #090;

.color-primary {
background: $primary;
}
.color-alert {
background: $alert;
}
.color-custom {
background: $custom;
}

Chúng ta có thể sử dụng biến TS trong SCSS không?

Đôi khi bạn cần chia sẻ các biến giữa CSS (hoặc SCSS) và TypeScript, ví dụ, nếu bạn có danh sách các màu trong tệp SCSS của mình và cần kiểm tra tên biến trong TypeScript để chắc chắn là màu có sẵn., for example, if you have a list of colors in your SCSS file and need to check the variable names in typescript to be sure is an available color.

Làm cách nào để sử dụng các biến SCSS trong TypeScript?

Tạo một dự án React mới với TypeScript và SCSS OK, tốt thôi bạn có ứng dụng React của mình với TypeScript, bây giờ chúng tôi sẽ thêm vào Sass Sass vì Node-Sass hiện không bị phản đối, đổi tên tệp CSS cơ bản. Đổi tên tất cả các chỉ mục. CSS thành chỉ mục. SCSS, cập nhật các tệp khác và các câu lệnh nhập trong tất cả các tệp liên quan. Ok, fine you have your React app with Typescript, now we will add “sass” as node-sass is now deprecated, rename the basic css file. Rename all index. css into index. scss, update as well other files and import statements in all concerned files.

Bạn có thể thay đổi giá trị biến SCSS tự động không?

Các biến CSS cho các biến CSS cứu hộ là một tiêu chuẩn cho phép bạn có các biến trong CSS.SCSS được biên dịch thành CSS trong thời gian biên dịch và các biến SCSS được thay thế bằng giá trị được giải quyết trong thời gian biên dịch, điều đó có nghĩa là không có cách nào để thay đổi biến trong thời gian chạy.there is no way to change the variable during run time.

Làm thế nào để tôi xuất các biến trong SCSS?

Xuất các biến từ SCSS StyleSheet $ myCustomVarable: #424242;Sau khi chúng tôi xác định bất cứ nơi nào trong Kiểu SCSS của chúng tôi, biến biến này, chúng tôi đang làm việc với hai chức năng SCSS tùy chỉnh.Bạn nên sử dụng DEFINE-CUSTOM-PROPERTY ($ name, $ value) chấp nhận 2 tham số để xác định một biến tùy chỉnh mới để xuất.use the define-custom-property($name, $value) which accepts 2 parameters to define a new custom variable for export.