Advanced theme
Through the basic chapter, we learned what components @ikun-ui/preset
consists of, so in this chapter, we can fully customize the component style based on these.
Simple theme color
If you just want to simply change the theme color, then ikun-preset can be easily implemented.
e.g
typescript
// unocss.config.ts
import {
defineConfig,
presetAttributify,
presetIcons,
presetTypography,
presetWind,
transformerDirectives,
transformerVariantGroup
} from 'unocss';
import { presetIkun, getCSSPreflights, getSafeList } from '@ikun-ui/preset';
export default defineConfig({
presets: [
presetWind(),
presetAttributify(),
presetIcons({
scale: 1.2,
warn: true,
extraProperties: {
display: 'inline-block',
'vertical-align': 'middle'
}
}),
presetTypography(),
presetIkun('@ikun-ui/preset', '#5fbe5f')
],
transformers: [transformerDirectives(), transformerVariantGroup()],
safelist: [...getSafeList()],
preflights: [
{
layer: 'base',
getCSS: () => `
:root {
${getCSSPreflights()}
}
button,select,input,option {
outline: none;
-webkit-appearance: none
}`
}
]
});
Fully Custom Themes
This summary takes modifying a button style as an example, modifying and customizing a style, these methods can be extended to all components
1. Define a color variable
typescript
import { ikunColors } from '@ikun-ui/preset';
const customColors = JSON.parse(JSON.stringify(ikunColors));
customColors['custom-primary'] = '#5fbe5f';
2. Define a color in the theme
typescript
import { ikunTheme } from '@ikun-ui/preset';
const customTheme = JSON.parse(JSON.stringify(ikunTheme));
customTheme.colors['custom-color'] = 'var(--ikun-custom-primary)';
3. Shortcuts for overriding components
typescript
import { buttonShortcuts, ikunShortcuts } from '@ikun-ui/preset';
const customBtnShortcuts = JSON.parse(JSON.stringify(buttonShortcuts));
customBtnShortcuts['k-button--primary'] = 'bg-custom-color text-white';
const finalShortcuts = ikunShortcuts;
finalShortcuts.push(customBtnShortcuts);
4. Rules for overriding components
typescript
import { ikunRules } from '@ikun-ui/preset';
const customRules = JSON.parse(JSON.stringify(ikunRules));
customRules['k-btn-shadow--primary'] = { 'box-shadow': '0 0 0 2px red' };
5. Rules for overriding components
typescript
// unocss.config.ts
export default defineConfig({
presets: [
// ...
presetIkun('@ikun-ui/preset', undefined, customTheme, customColors, finalShortcuts, customRules)
]
// ...
});