Skip to content

السمة

يدعم UnoCSS أيضاً نظام السمة الذي قد تكون معتاداً عليه في Tailwind CSS / Windi CSS. على مستوى المستخدم، يمكنك تحديد خاصية theme في التكوين الخاص بك، وسيتم دمجها بعمق مع السمة الافتراضية.

الاستخدام

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

خلال عملية التحليل، سيكون theme موجوداً دائماً في context.

الاستخدام في rules

لاستهلاك السمة في القواعد:

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

الاستخدام في variants

لاستهلاك السمة في المتغيرات:

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

الاستخدام في shortcuts

لاستهلاك السمة في الاختصارات الديناميكية:

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

نقاط التوقف

WARNING

عند توفير كائن breakpoints مخصص سيتم تجاوز الافتراضي بدلاً من الدمج.

مع المثال التالي، ستتمكن من استخدام متغيرات نقطة التوقف sm: و md: فقط:

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

إذا كنت تريد وراثة نقاط توقف السمة الأصلية، يمكنك استخدام extendTheme:

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

INFO

verticalBreakpoints نفس breakpoints ولكن للتخطيط العمودي.

بالإضافة إلى ذلك سنرتب نقاط الشاشة حسب الحجم (نفس الوحدة). لنقاط الشاشة بوحدات مختلفة، لتجنب الأخطاء، يرجى استخدام وحدات موحدة في التكوين.

ts
theme: {
  // ...
  breakpoints: {
    sm: '320px',
    // لأن uno لا يدعم ترتيب المقارنة لأحجام الوحدات المختلفة، يرجى التحويل إلى نفس الوحدة.
    // md: '40rem',
    md: `${40 * 16}px`,
    lg: '960px',
  },
}

ExtendTheme

ExtendTheme يسمح لك بتحرير السمة المدمجة بعمق للحصول على كائن السمة الكامل.

الدوال المخصصة تغير كائن السمة.

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"
  }
}

من الممكن أيضاً إرجاع كائن سمة جديد لاستبدال الأصلي بالكامل.

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.