Skip to content

Chủ đề

UnoCSS cũng hỗ trợ hệ thống chủ đề mà bạn có thể đã quen thuộc trong Tailwind CSS / Windi CSS. Ở cấp độ người dùng, bạn có thể chỉ định thuộc tính theme trong cấu hình của mình, và nó sẽ được hợp nhất sâu vào chủ đề mặc định.

Sử dụng

ts
theme: {
  // ...
  colors: {
    veryCool: '#0000ff', // class="text-very-cool"
    brand: {
      primary: 'hsl(var(--hue, 217) 78% 51%)', //class="bg-brand-primary"
      DEFAULT: '#942192' //class="bg-brand"
    },
  },
}

TIP

Trong quá trình phân tích, theme sẽ luôn tồn tại trong context.

Sử dụng trong rules

Để tiêu thụ chủ đề trong quy tắc:

ts
rules: [
  [/^text-(.*)$/, ([, c], { theme }) => {
    if (theme.colors[c])
      return { color: theme.colors[c] }
  }],
]

Sử dụng trong variants

Để tiêu thụ chủ đề trong biến thể:

ts
variants: [
  {
    name: 'variant-name',
    match(matcher, { theme }) {
      // ...
    },
  },
]

Sử dụng trong shortcuts

Để tiêu thụ chủ đề trong các phím tắt động:

ts
shortcuts: [
  [/^badge-(.*)$/, ([, c], { theme }) => {
    if (Object.keys(theme.colors).includes(c))
      return `bg-${c}4:10 text-${c}5 rounded`
  }],
]

Điểm ngắt

WARNING

Khi một đối tượng breakpoints tùy chỉnh được cung cấp, mặc định sẽ bị ghi đè thay vì hợp nhất.

Với ví dụ sau, bạn sẽ chỉ có thể sử dụng các biến thể điểm ngắt sm:md::

ts
theme: {
  // ...
  breakpoints: {
    sm: '320px',
    md: '640px',
  },
}

Nếu bạn muốn kế thừa các điểm ngắt chủ đề gốc, bạn có thể sử dụng extendTheme:

ts
extendTheme: (theme) => {
  return {
    ...theme,
    breakpoints: {
      ...theme.breakpoints,
      sm: '320px',
      md: '640px',
    },
  }
}

INFO

verticalBreakpoints giống như breakpoints nhưng cho bố cục dọc.

Ngoài ra, chúng tôi sẽ sắp xếp các điểm màn hình theo kích thước (cùng đơn vị). Đối với các điểm màn hình ở các đơn vị khác nhau, để tránh lỗi, vui lòng sử dụng các đơn vị thống nhất trong cấu hình.

ts
theme: {
  // ...
  breakpoints: {
    sm: '320px',
    // Vì uno không hỗ trợ sắp xếp so sánh các kích thước đơn vị khác nhau, vui lòng chuyển đổi thành cùng đơn vị.
    // md: '40rem',
    md: `${40 * 16}px`,
    lg: '960px',
  },
}

ExtendTheme

ExtendTheme cho phép bạn chỉnh sửa chủ đề được hợp nhất sâu để lấy đối tượng chủ đề hoàn chỉnh.

Các hàm tùy chỉnh thay đổi đối tượng chủ đề.

ts
extendTheme: (theme) => {
  theme.colors.veryCool = '#0000ff' // class="text-very-cool"
  theme.colors.brand = {
    primary: 'hsl(var(--hue, 217) 78% 51%)', // class="bg-brand-primary"
  }
}

Nó cũng có thể trả về một đối tượng chủ đề mới để thay thế hoàn toàn đối tượng ban đầu.

ts
extendTheme: (theme) => {
  return {
    ...theme,
    colors: {
      ...theme.colors,
      veryCool: '#0000ff', // class="text-very-cool"
      brand: {
        primary: 'hsl(var(--hue, 217) 78% 51%)', // class="bg-brand-primary"
      },
    },
  }
}

Released under the MIT License.