Skip to content

Layers ​

ลำดับของ CSS จะส่งผลต่อความสำคัญของพวกเขา ในขณะที่ engine จะรักษาลำดับของกฎ บางครั้งคุณอาจต้องการจัดกลุ่ม utilities บางอย่างเพื่อควบคุมลำดับของพวกเขาอย่างชัดเจน

การใช้งาน ​

ไม่เหมือนกับ Tailwind CSS ที่มี layers คงที่สามอัน (base, components, utilities) UnoCSS อนุญาตให้คุณกำหนด layers ตามที่ต้องการ เพื่อตั้งค่า layer คุณสามารถส่ง metadata เป็นรายการที่สามของกฎของคุณ:

ts
rules: [
  [/^m-(\d)$/, ([, d]) => ({ margin: `${d / 4}rem` }), { layer: 'utilities' }],
  // เมื่อคุณไม่ระบุ layer จะเป็น `default`
  ['btn', { padding: '4px' }],
]

นี่จะสร้าง:

css
/* layer: default */
.btn { padding: 4px; }
/* layer: utilities */
.m-2 { margin: 0.5rem; }

Layer ยังสามารถตั้งค่าได้ในแต่ละ preflight:

ts
preflights: [
  {
    layer: 'my-layer',
    getCSS: async () => (await fetch('my-style.css')).text(),
  },
]

การจัดลำดับ ​

คุณสามารถควบคุมลำดับของ layers ได้โดย:

ts
layers: {
  'components': -1,
  'default': 1,
  'utilities': 2,
  'my-layer': 3,
}

Layers ที่ไม่มีการระบุลำดับจะถูกเรียงตามตัวอักษร

เมื่อคุณต้องการให้ CSS ที่กำหนดเองอยู่ระหว่าง layers คุณสามารถอัปเดต entry module ของคุณ:

ts
// 'uno:[layer-name].css'
import 'uno:components.css'

// layers ที่ไม่ใช่ 'components' และ 'utilities' จะ fallback มาที่นี่
import 'uno.css'

// CSS ของคุณเอง
import './my-custom.css'

// layer "utilities" จะมีความสำคัญสูงสุด
import 'uno:utilities.css'

CSS Cascade Layers ​

คุณสามารถส่งออก CSS Cascade Layers ได้โดย:

ts
outputToCssLayers: true

คุณสามารถเปลี่ยนชื่อ CSS Layer ได้ด้วย:

ts
outputToCssLayers: {
  cssLayerName: (layer) => {
    // layer เริ่มต้นจะถูกส่งออกไปยัง CSS layer "utilities"
    if (layer === 'default')
      return 'utilities'

    // layer shortcuts จะถูกส่งออกไปยัง sublayer "shortcuts" ของ CSS layer "utilities"
    if (layer === 'shortcuts')
      return 'utilities.shortcuts'

    // layers อื่นๆ ทั้งหมดจะใช้ชื่อของพวกเขาเป็นชื่อ CSS layer
  }
}

Layers โดยใช้ variants ​

Layers สามารถสร้างได้โดยใช้ variants

uno-layer-<name>: สามารถใช้เพื่อสร้าง UnoCSS layer

html
<p class="uno-layer-my-layer:text-xl">text</p>
css
/* layer: my-layer */
.uno-layer-my-layer\:text-xl{ font-size:1.25rem; line-height:1.75rem; }

layer-<name>: สามารถใช้เพื่อสร้าง CSS @layer

html
<p class="layer-my-layer:text-xl">text</p>
css
/* layer: default */
@layer my-layer{ .layer-my-layer\:text-xl{ font-size:1.25rem; line-height:1.75rem; } }

Released under the MIT License.