0003 · HTML·CSS·JavaScript API 표면
상태: 제안 · 명세 버전: 0.1.0-draft
공개 작성 문법
앱은 HTML 이름의 요소를 사용한다. React에서는 JSX/TSX의 className·onClick, Vue와 Svelte에서는 각자의 템플릿·이벤트 문법을 사용한다. 웹 빌드는 브라우저 DOM에 연결하고 모바일 빌드는 스피논 노드·GPU 장면에 연결한다. <view>를 기본 공개 요소로 도입하지 않는다.
첫 수직 구현 외의 요소를 조용히 일반 <div>처럼 바꾸지 않는다. 지원되지 않는 요소와 화면에 영향을 주는 속성은 빌드 또는 개발 실행에서 진단한다. id는 식별 속성일 뿐 DOM 조회 API의 존재를 뜻하지 않는다.
CSS 처리 단계
웹은 브라우저 CSS를 사용한다. 모바일은 빌드 단계에서 생성된 CSS를 읽어 지원 문법의 스타일 데이터로 변환하고 런타임에서 선택자·계단식·상속·단위·레이아웃을 계산한다. CSS 문법 파싱 성공을 렌더링 지원으로 표시하지 않는다.
첫 수직 구현의 최소 집합은 블록·Flex 배치, 크기, 패딩, 간격, 텍스트 색·크기다. 이 집합의 정확한 선택자·단위·초기값은 첫 웹·Android·iOS 화면 비교 전에 고정한다. Grid, 인라인 서식, 복합 선택자, @media, CSS 변수, @font-face, 애니메이션은 항목별 지원표와 증거가 생기기 전까지 제안 또는 미지원이다.
Tailwind는 별도 모바일 렌더러가 아니다. Tailwind가 생성한 CSS가 같은 변환 경로에 들어간다. 유틸리티 하나가 사용하는 선택자·선언·값·변수·계층이 모두 지원될 때만 그 유틸리티를 지원이라고 표시한다. Preflight, 테마 변수, 반응형·상태 변형은 별도 항목으로 판정한다.
JavaScript와 호스트 API
V8의 ECMAScript 언어 기능과 스피논이 제공해야 하는 호스트 기능을 구분한다. Promise, Map, ArrayBuffer, globalThis 같은 언어 기능의 존재가 fetch, 타이머, URL, console, DOM을 자동으로 제공하지 않는다.
첫 수직 구현은 JS 이벤트 콜백, 마이크로태스크 체크포인트, 타이머, 예외·콘솔 출력을 목표로 한다. fetch, 저장소, 바이너리·네트워크 객체는 각각 입력·결과·오류·취소·백그라운드 동작을 정의한 뒤 지원 여부를 표시한다. document, 전체 window, 서비스 워커, Canvas/WebGL/WebGPU는 모바일 기본 API로 약속하지 않는다. GPU 내부 구현이 앱 공개 WebGPU를 뜻하지 않는다.
브라우저와 같은 이름의 API라도 앱 권한·쿠키·출처·수명주기 때문에 동작이 다르면 차이로 기록한다. 모바일 전용 기능은 웹 API 이름을 흉내 내지 않고 명시적 플랫폼 모듈에서 제공한다.
<a>의 앱 내부 이동, 외부 URL, 시스템 뒤로 가기와 딥링크는 라우팅 계약에 따른다. 모바일에 window.location·window.history 전체가 있다고 가정하지 않는다.
적합성 자료
HTML·CSS 대응표와 JS API 대응표는 기능 후보를 살펴보는 비규범 미리보기다. 이 사이트의 내용이 spec/의 목표 범위·지원 상태를 변경하지 않는다. 현재 표의 단계 표시는 구현 증거가 아니다. R01의 목표 범위와 기능별 버전·플랫폼 적합성 표는 저장소의 spec/을 원본으로 작성하고 이 명세에 연결한다.