Skip to content

Instantly share code, notes, and snippets.

@tak-dcxi
tak-dcxi / font-size-rem.md
Last active May 10, 2025 04:21
font-size には rem を使うべきかどうかについての見解

font-size には rem を使うべきかどうかについての見解

結論

  • 可能であれば Chrome の文字拡大機能をサポートするためにremを使用する。
  • ただし、実際に Chrome の文字拡大機能を「極大」にして検証することが必須条件。これに時間的・労働的なコストを割けないのならpxを使用したほうがいい。

結論に至った背景

font-size には rem を使いましょう」という教えが独り歩きしており、実際に Chrome の文字拡大機能を「極大」にして検証していない人が多いため。

@tak-dcxi
tak-dcxi / return-to-top-button.astro
Created October 6, 2024 11:31
ベージトップへ戻るボタン
---
---
<return-button class="scoping-root">
<a href="#top" class="button">
<span class="visually-hidden">本文上部へ戻る</span>
</a>
</return-button>
@tak-dcxi
tak-dcxi / initializeCarousel.ts
Created September 25, 2024 19:20
initializeCarousel
// @sample https://codepen.io/tak-dcxi/pen/dyBbBgd
export type CarouselSelectors = {
scrollerSelector: string | undefined;
dirButtonSelector: string | undefined;
progressSelector: string | undefined;
};
const DEFAULT_MOVE = 1;
const DEFAULT_GAP = 0;
@tak-dcxi
tak-dcxi / initializeMasonry.ts
Last active January 14, 2025 09:27
Masonry Layout
const resizeMasonryItem = (
element: HTMLElement,
itemWrapper: HTMLElement
): void => {
const item = itemWrapper.firstChild;
if (!(item instanceof HTMLElement)) return;
const rowSize = parseInt(getComputedStyle(element).gridAutoRows, 10);
const gapSize = parseInt(getComputedStyle(element).rowGap, 10);
const itemSize = isWritingModeVertical(element)
@tak-dcxi
tak-dcxi / initializeViewTransitions.ts
Created June 19, 2024 15:18
initializeViewTransitions
// View Transitions API は TypeScript の型定義に含まれていないため自身で定義する
declare global {
interface ViewTransition {
finished: Promise<void>
ready: Promise<void>
updateCallbackDone: Promise<void>
}
interface Document {
startViewTransition(updateCallback: () => Promise<void> | void): ViewTransition
@tak-dcxi
tak-dcxi / ArticleLinkCard.astro
Last active September 25, 2024 19:22
AstroLinkCard
---
import { load } from 'cheerio'
import Image from 'astro/components/Image.astro'
import { writeFileSync, readFileSync } from 'node:fs'
import BaseIcon from '@/components/BaseIcon.astro'
type Props = {
href: string
}
@tak-dcxi
tak-dcxi / clamp.css
Last active September 12, 2024 13:14
clamp.css
:is(body, body *) {
&,
&::before,
&::after {
--font-size-clamp-min: calc(var(--font-size-min) * pow(var(--font-size-ratio-min), var(--font-size-level)));
--font-size-clamp-max: calc(var(--font-size-max) * pow(var(--font-size-ratio-max), var(--font-size-level)));
--font-size-clamp-preferred: calc(
(var(--font-size-clamp-max) - var(--font-size-clamp-min)) / (var(--layout-width-max) - var(--layout-width-min))
);
--font-size-clamp: clamp(
@tak-dcxi
tak-dcxi / backfaceFixed.ts
Created April 30, 2024 15:06
initializeModal
const backfaceFixed = (fixed: boolean): void => {
const scrollBarWidth = getScrollBarSize()
const scrollPosition = getScrollPosition(fixed)
document.body.style.borderInlineEnd = fixed ? `${scrollBarWidth}px solid transparent` : ''
applyStyles(scrollPosition, fixed)
if (!fixed) restorePosition(scrollPosition)
}
const isWritingModeVertical = (): boolean => {
@tak-dcxi
tak-dcxi / backfaceFixed.ts
Last active April 30, 2024 14:43
backfaceFixed
const backfaceFixed = (fixed: boolean): void => {
const scrollBarWidth = getScrollBarSize()
const scrollPosition = getScrollPosition(fixed)
document.body.style.borderInlineEnd = fixed ? `${scrollBarWidth}px solid transparent` : ''
applyStyles(scrollPosition, fixed)
if (!fixed) restorePosition(scrollPosition)
}
const isWritingModeVertical = (): boolean => {
@tak-dcxi
tak-dcxi / initializeAccordion.ts
Last active May 7, 2024 02:17
initializeAccordion
export type AccordionOptions = {
buttonSelector: string | undefined
panelSelector: string | undefined
duration?: number
easing?: string
printAll?: boolean
}
const defaultOptions: AccordionOptions = {
buttonSelector: undefined,