Quarto 로고. Quarto 로고.
  • 개요
  • 시작하기
  • 가이드
  • 확장 기능
  • 레퍼런스
  • 갤러리
  • 블로그
  • 도움말
    • 버그 신고
    • 질문하기
    • 자주 묻는 질문
  1. 가이드
  2. 인터랙티브
  3. Observable JS
  4. 예제
  5. 레이아웃
  • 가이드
    • 작성
      • 마크다운 기초
      • 그림
      • 표
      • 다이어그램
      • 숏코드
        • 플레이스홀더 이미지
        • 로렘 립섬 텍스트
        • 콘텐츠 재배치
        • Quarto 버전
      • 비디오
      • 임베드
      • Callout 블록
      • 코드 주석
      • 브랜드
      • 기사 레이아웃
      • 학술적 글쓰기
        • 프런트 매터
        • 제목 블록
        • 인용
        • 상호 참조
          • 기본
          • 옵션
          • Div 구문
          • 사용자 정의 플로트
        • 인용 가능한 문서 만들기
        • 부록
    • 계산
      • Python 사용하기
      • R 사용하기
      • Julia 사용하기
      • Observable 사용하기
      • 인라인 코드
      • 스크립트 파일 렌더링
      • 실행 옵션
      • 파라미터
    • 도구
      • JupyterLab
        • JupyterLab 기본
        • JupyterLab 확장
      • RStudio IDE
        • RStudio 기본
        • 비주얼 에디터
          • 에디터 기본
          • 기술 문서 작성
          • 콘텐츠 편집
          • 단축키와 옵션
          • 마크다운 출력
      • Positron
        • Positron 기본
        • 비주얼 에디터
        • 노트북 편집기
      • VS Code
        • VS Code 기본
        • 비주얼 에디터
        • 노트북 편집기
      • Neovim
      • 텍스트 편집기
    • 문서
      • HTML
        • HTML 기본
        • HTML 코드 블록
        • HTML 테마
        • 다른 형식 포함
        • 라이트박스 그림
        • HTML 배포
        • HTML 접근성 검사
      • PDF
        • PDF 기본
        • PDF 엔진
      • MS Word
        • Word 기본
        • Word 템플릿
      • Typst
        • Typst 기본
        • 사용자 정의 포맷
      • Markdown
        • GitHub (GFM)
        • Hugo
        • Docusaurus
      • 모든 포맷
    • 프레젠테이션
      • 개요
      • Revealjs
        • Reveal 기본
        • 슬라이드 발표
        • 고급 Reveal
        • Reveal 테마
      • PowerPoint
      • Beamer
    • 대시보드
      • 개요
      • 대시보드 사용
        • 레이아웃
        • 데이터 표시
        • 입력
        • 테마
        • 매개변수
        • 배포
      • 인터랙티브
        • 개요
        • Python용 Shiny
          • 시작하기
          • 대시보드 실행
          • 실행 컨텍스트
        • R용 Shiny
          • 시작하기
          • 문서 실행
          • 실행 컨텍스트
        • Observable JS
      • 예제
    • 웹사이트
      • 웹사이트 만들기
      • 웹사이트 내비게이션
      • 블로그 만들기
      • Website Drafts
      • 웹사이트 검색
      • 웹사이트 도구
      • 소개 페이지
      • 목록 페이지
        • 문서 목록
        • 사용자 정의 Listing
    • 책
      • 책 만들기
      • 책 구조
      • 책 상호 참조
      • 출력 사용자 정의
    • 원고
      • 시작하기
        • 원고 작성
          • Jupyter Lab
          • VS Code
          • RStudio
        • 원고 배포
        • 다음 단계
      • 원고 사용
    • 인터랙티브
      • 개요
      • Observable JS
        • 소개
        • 라이브러리
        • 데이터 소스
        • OJS 셀
        • Shiny 반응형
        • 코드 재사용
        • 예제
          • 펭귄
          • 선버스트
          • Arquero
          • 인구
          • NOAA CO2
          • GitHub API
          • 레이아웃
          • Shiny
            • K-평균
            • 구간 나누기
            • 데이터 바인딩
            • 코로나 지도
      • Shiny
        • 소개
        • 문서 실행
        • 실행 컨텍스트
        • 외부 리소스
        • 예제
          • 올드 페이스풀
          • K-평균
          • 다이아몬드
      • 위젯
        • Jupyter 위젯
        • R용 htmlwidgets
      • 구성 요소 레이아웃
    • 배포
      • 배포 기초
      • Quarto Pub
      • GitHub Pages
      • Posit Connect
      • Netlify
      • Confluence
      • Hugging Face Spaces
      • 기타 서비스
      • CI로 배포
    • 프로젝트
      • 프로젝트 기초
      • 실행 관리
      • 프로젝트 프로필
      • 환경 변수
      • 프로젝트 스크립트
      • 가상 환경
      • Quarto에서 Binder 사용
    • 고급
      • 인클루드
      • 변수
      • 페이지 레이아웃
      • 문서 언어
      • 조건부 콘텐츠
      • 노트북 필터
      • Jupyter
        • Jupyter 커널 실행
  1. 가이드
  2. 인터랙티브
  3. Observable JS
  4. 예제
  5. 레이아웃

레이아웃

OJS 콘텐츠의 레이아웃은 여러 방식으로 제어할 수 있습니다.

page-layout: full

이 예제는 page-layout: full을 사용해 콘텐츠가 페이지 전체 너비를 차지하도록 합니다.

---
title: "Layout"
format: 
  html: 
    page-layout: full
---

입력은 사이드바 패널에, 출력은 탭셋 패널에 넣었습니다(오른쪽 상단의 “Code” 버튼을 클릭하면 전체 소스 코드를 확인할 수 있습니다).

viewof bill_length_min = Inputs.range(
  [32, 50], 
  {value: 35, step: 1, label: "부리 길이(최소):"}
)
viewof islands = Inputs.checkbox(
  ["Torgersen", "Biscoe", "Dream"], 
  { value: ["Torgersen", "Biscoe"], 
    label: "섬:"
  }
)
  • 그래프
  • 데이터
Plot.rectY(filtered, 
  Plot.binX(
    {y: "count"}, 
    {x: "body_mass_g", fill: "species", thresholds: 20}
  ))
  .plot({
    facet: {
      data: filtered,
      x: "sex",
      y: "species",
      marginRight: 80
    },
    marks: [
      Plot.frame(),
    ]
  }
)
Inputs.table(filtered)

사용자 입력을 기반으로 데이터를 읽고 필터링합니다.

data = FileAttachment("palmer-penguins.csv").csv({typed: true})
filtered = data.filter(function(penguin) {
  return bill_length_min < penguin.bill_length_mm &&
         islands.includes(penguin.island);
})

width와 layoutWidth: 세밀한 레이아웃 추적

ObservableHQ와 마찬가지로 ojs 셀은 메인 HTML 요소의 clientWidth를 추적하는 반응형 width를 지원합니다.

width

또한 레이아웃의 특정 부분 너비가 필요하다면 div에 ojs-track-layout CSS 클래스를 사용하세요. Quarto의 OJS 런타임은 이런 div를 모두 layoutWidth에서 추적합니다. 이 예제에서는 위의 탭셋에 penguins-tabset id가 있으며, 아래에서 해당 clientWidth를 반응형으로 확인할 수 있습니다. 웹페이지가 충분히 넓다면 사이드바가 일부 공간을 차지하므로 결과 탭셋의 너비는 더 작아집니다.

layoutWidth
GitHub API
Shiny
Source Code
---
title: "레이아웃"
format:
  html:
    echo: false
    code-tools: true
    page-layout: full
    toc: false
---

OJS 콘텐츠의 레이아웃은 여러 방식으로 제어할 수 있습니다.

## `page-layout: full`

이 예제는 `page-layout: full`을 사용해 콘텐츠가 페이지 전체 너비를 차지하도록 합니다.

``` yaml
---
title: "Layout"
format: 
  html: 
    page-layout: full
---
```

입력은 사이드바 패널에, 출력은 탭셋 패널에 넣었습니다(오른쪽 상단의 "Code" 버튼을 클릭하면 전체 소스 코드를 확인할 수 있습니다).

```{ojs}
//| panel: sidebar
viewof bill_length_min = Inputs.range(
  [32, 50], 
  {value: 35, step: 1, label: "부리 길이(최소):"}
)
viewof islands = Inputs.checkbox(
  ["Torgersen", "Biscoe", "Dream"], 
  { value: ["Torgersen", "Biscoe"], 
    label: "섬:"
  }
)
```

::: {#penguins-tabset .panel-tabset .ojs-track-layout}
## 그래프

```{ojs}
Plot.rectY(filtered, 
  Plot.binX(
    {y: "count"}, 
    {x: "body_mass_g", fill: "species", thresholds: 20}
  ))
  .plot({
    facet: {
      data: filtered,
      x: "sex",
      y: "species",
      marginRight: 80
    },
    marks: [
      Plot.frame(),
    ]
  }
)
```

## 데이터

```{ojs}
Inputs.table(filtered)
```
:::

사용자 입력을 기반으로 데이터를 읽고 필터링합니다.

```{ojs}
//| echo: true
data = FileAttachment("palmer-penguins.csv").csv({typed: true})
filtered = data.filter(function(penguin) {
  return bill_length_min < penguin.bill_length_mm &&
         islands.includes(penguin.island);
})
```

## `width`와 `layoutWidth`: 세밀한 레이아웃 추적

ObservableHQ와 마찬가지로 `ojs` 셀은 메인 HTML 요소의 `clientWidth`를 추적하는 반응형 `width`를 지원합니다.

```{ojs}
//| echo: true
width
```

또한 레이아웃의 특정 부분 너비가 필요하다면 div에 `ojs-track-layout` CSS 클래스를 사용하세요. Quarto의 OJS 런타임은 이런 div를 모두 `layoutWidth`에서 추적합니다. 이 예제에서는 위의 탭셋에 `penguins-tabset` id가 있으며, 아래에서 해당 `clientWidth`를 반응형으로 확인할 수 있습니다. 웹페이지가 충분히 넓다면 사이드바가 일부 공간을 차지하므로 결과 탭셋의 너비는 더 작아집니다.

```{ojs}
//| echo: true
layoutWidth
```

후원: Posit Posit

  • 소개

  • 자주 묻는 질문

  • 라이선스

  • 상표

  • Edit this page
  • Report an issue