fonts.ts
import { JetBrains_Mono } from 'next/font/google'
export const mono = JetBrains_Mono({ subsets: ['cyrillic', 'latin'], display: 'swap' }) 

Как писать стили для скроллбара в CSS
Пишем стили для скроллбара (полоски прокрутки) на странице с помощью Webkit. Также покажу несколько более менее готовых вариантов в конце. Подробный гайд с фотографиями и ссылками на песочницу.

Grid Template Areas вместо Position Absolute в CSS
Используем CSS Grid, чтобы свалить несколько элементов в одну кучу, заставляя их накладываться друг на друга, а затем располагаем их в нужных позициях. Небольшой гайд по CSS Grid.

Приятные шрифт от Vercel - Geist Sans и Geist Mono
"Geist действительно олицетворяет дух программирования и дизайна в творческом сообществе Vercel" - заявляют в Vercel.

Tailwind - лучший CSS инструмент?
Писать стили в 5 раз быстрее, не покидая файл с разметкой? Используй utility first классы Tailwind и экономь свое время.
Сперва загружается шрифт, затем экспортируется:
import { JetBrains_Mono } from 'next/font/google'
export const mono = JetBrains_Mono({ subsets: ['cyrillic', 'latin'], display: 'swap' }) Далее его className используется в классе разметки:
import { mono } from '@/fonts'
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang='ru'>
<body className={clsx(mono.className, 'h-screen bg-gray-950 p-4')}>...</body>
</html>
)
}При таком подходе, для изменения шрифта в компонент нужно будет импортировать переменную:
import { mono } from '@/fonts'
export default function Component1() {
return (
<ul className={clsx(mono.className, '...')}>
<li>...</li>
</ul>
)
}Гарантирую, что знакомым с Tailwind больше понравится следующий подход:
export default function Component1() {
return (
<ul className='... font-mono'>
<li>...</li>
</ul>
)
}Это класс Tailwind, который был создан через конфиг файл. Чтобы этот класс появился и заработал, перед настройкой конфигурации нужно повесить переменные шрифтов на какой-нибудь высокий элемент, обычно это body. Переменные можно вытащить при объявлении шрифта:
import clsx from 'clsx'
import { Finlandica, JetBrains_Mono, Prosto_One } from 'next/font/google'
const sans = Finlandica({ subsets: ['latin', 'cyrillic'], variable: '--font-sans', display: 'swap' })
const display = Prosto_One({ subsets: ['cyrillic', 'latin'], weight: ['400'], variable: '--font-display', display: 'swap' })
const mono = JetBrains_Mono({ subsets: ['cyrillic', 'latin'], variable: '--font-mono', display: 'swap' })
export const fontsVars = clsx(sans.variable, display.variable, mono.variable)После эти переменные можно экспортировать вагончиком как fontsVars и разместить их на body:
import { fontsVars } from '@/fonts.tsx'
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang='ru'>
<body className={clsx(fontsVars, 'h-screen bg-gray-950 p-4')}>...</body>
</html>
)
}После этого body будет иметь на себе 3 новых класса, каждый с причудливым названием:
<body class="__variable_44041a __variable_e4c6d8 __variable_ac086f ...">
...
</body>Каждый класс объявляет CSS переменную ...
.__variable_ac086f {
--font-mono: '__JetBrains_Mono_ac086f', '__JetBrains_Mono_Fallback_ac086f';
}
.__variable_e4c6d8 {
--font-display: '__Prosto_One_e4c6d8', '__Prosto_One_Fallback_e4c6d8';
}
.__variable_44041a {
--font-sans: '__Finlandica_44041a', '__Finlandica_Fallback_44041a';
}..., которую теперь можно использовать в конфиге Tailwind, добавив в тему новые значения для fontFamily:
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ['./src/**/*.{ts,tsx}'],
theme: {
extend: {
fontFamily: {
sans: 'var(--font-sans)',
display: 'var(--font-display)',
mono: 'var(--font-mono)',
},
},
},
}Теперь эти классы можно вставлять в компоненты, Tailwind сам подставит переменные из этих классов как семейства шрифтов:
function Component() {
return (
<article>
<h1 className='font-display'>...</h1>
<p className='font-sans'>
<code className='font-mono'>...</code>
</p>
</article>
)
}