Stylify的CSS片段

本页的片段是经常使用的配置片段。 你可以把它们复制到你的配置中,这样你就不用自己写了。

自定义选择器

const compilerConfig = {
	customSelectors: {
		// 纠正了盒子的大小
		'*': 'box-sizing:border-box',
		//将排版基数设置为10,以便于rem使用。
		// 平滑滚动
		// 保留滚动条
		html: `
			font-size:62.5%
			min-width:100%
			min-height:100%
			overflow-y:scroll
			scroll-behavior:smooth
		`,
		// 设置字体的默认大小
		// 漂亮的字体渲染
		body: 'font-size:1.6rem webkit-font-smoothing:antialiased'
	}
}

变量

const compilerConfig = {
	variables: {
		// 边框半径
		radius4: '4px',
		radius8: '8px',
		radius12: '12px',
		radius16: '16px',
		radius20: '20px',
		radius24: '24px',
		circle: '50%',

		// 字体大小
		// 希望在HTML元素上设置字体大小:62.5%。
		// 行高是根据Arial字体估计的
		// => https://grtcalculator.com/
		font8: '0.8rem', // 行高1.7rem
		font12: '1.2rem', // 行高2rem
		font14: '1.4rem', // 行高2.4rem
		font18: '1.8rem', // 行高3rem
		font24: '2.4rem', // 行高4rem
		font32: '3.2rem', // 行高5.4rem
		font40: '4rem', // 行高6.7rem
		font48: '4.8rem', // 行高8.1rem
		font56: '5.6rem', // 行高9.4rem
		font64: '6.4rem', // 行高10.8rem

		// 行高
		// 适当的字体大小在上面
		font17: '1.7rem',
		font20: '2rem',
		font24: '2.4rem',
		font30: '3rem',
		font40: '4rem',
		font54: '5.4rem',
		font67: '6.7rem',
		font81: '8.1rem',
		font94: '9.4rem',
		font108: '10.8rem',

		// 字体堆栈
		systemFontStack: `-apple-system,'Segoe_UI',Roboto,Oxygen,Ubuntu,Cantarell,'Helvetica_Neue',Arial,sans-serif,'Apple_Color_Emoji','Segoe_UI_Emoji','Segoe_UI_Symbol'`,
		georgiaFontStack: `Georgia,serif`,
		monospaceFontStack: `Consolas,'Courier_New',monospace`
	}
}

宏指令

const compilerConfig = {
	macros: {
		// 这个宏将匹配例如`typo:16`,它将生成
		//它的行高。同时,它还会将数字转换为rem大小。
		// 它希望HTML元素的字体大小被设置为font-size:62.5%。
		'typo:(\\S+?)': (match) => {
			const pixelFontSize = Number(match.getCapture(0));
			return {
				'font-size': `${Number(pixelFontSize) * 0.0625}rem`,
				'line-height': `${pixelFontSize * 1.333 * 0.0625}rem`
			};
		}
	}
}

组件

const compilerConfig = {
	components: {
		// 文字在视觉上是隐藏的,但对屏幕阅读器是可见的
		'sr-only': `
			position:absolute!important
			overflow:hidden
			clip:rect(0_0_0_0)
			width:1px
			height:1px
			margin:-1px
			padding:0
			border:0
		`
	}
}

钩子

'@stylify/stylify'导入{钩子};

/*
	这个钩子会监听一个新的字体大小匹配,并添加正确的行高。
	因此,你不需要添加行高。
*/
hooks.addListener('compiler:newMacroMatch', ({selectorProperties}) => {
	const pixelUnit = selectorProperties['font-size'];

	if (typeof pixelUnit === 'undefined' || !pixelUnit.endsWith('px')) {
		return;
	}

	const pixelFontSize = Number(pixelUnit.slice(0,-2));
	const remFontSize = pixelFontSize / 10;

	// 调整下面的字体校正数字以适应你的需要
	const smallFontSizeCorrection = 1.6;
	const largeFontSizeCorrection = 1.2;
	// 32是指font-size:32px。较大的字体如标题可能不需要
	// 在一篇文章中,像16px或18px这样大的行高。
	const fontCorrection = pixelFontSize > 32 ? largeFontSizeCorrection : smallFontSizeCorrection;

	// 这将增加行高,并将字体大小重写为rem单位。
	selectorProperties['font-size'] = `${remFontSize}rem`;
	selectorProperties['line-height'] = `${remFontSize * fontCorrection}rem`;
});