HTML로 데스크톱 앱 같은 화면 구조를 구축하는 베스트(?) 프랙티스

2728 단어 GUIHTMLCSSCSS3HTML5

웹에서 데스크톱 앱 같은 화면 구조를 구축하는 베스트(?) 프랙티스



최근, 일로 Web가게의 흉내를 했다(어떤 툴을 만들었지만, 그 UI를 Web어플리로 할 필요가 있었다).
데스크톱 앱과 같은 화면을 다수 만들 필요가 있었으므로, 효율을 요구해 여러가지 방법을 시도한 가운데, 가장 좋았다고 생각하는 방법을 정리한다.

데스크톱 앱 같은 화면 구조란?



다음과 같은 스타일을 가진 화면 구조.
  • 브라우저의 전체 화면을 다 사용합니다.
  • 화면이 세로 및 가로 창 분할로 구성되어 있습니다.
  • 고정 크기로 표시되는 창과 화면 크기에 따라 확장되는 창이 있습니다.
  • 화면에 내용이 들어갈 수 없는 경우, 화면 전체가 스크롤 하는 것이 아니라, 페인 마다 스크롤 한다.

  • Qiita의 투고 화면도 그러한 구조군요.



    네이



  • 소수의 CSS 클래스를 정의하는 것만으로, 대부분의 화면 레이아웃에 대응할 수 있는 것.

    개발 효율도 보수성도 떨어지므로 가능한 한 화면마다 CSS를 쓰고 싶지 않다.

  • HTML(DOM) 구조가 복잡하지 않을 것.

    DOM이 복잡해지면 역시 개발 효율도 보수성도 떨어진다.

  • 브라우저 개별 대책이 최소한으로 끝나는 것

    까다로운 일을하지 않습니다. 어느 정도 시들어진 기술을 사용한다.

  • 기법



    FlexBox를 사용한다.

    최근 브라우저라면 거의 대응 . 벤더 프리픽스도 붙이지 않아도 좋을 정도.

    IE도 11은 대응. IE 10도 (수상하지만 일단) FlexBox 대응.

    구현



    결국, 이런 느낌으로 했다.

    See the Pen DesktopAppLike by hogegex ( @hogegex )
    on CodePen .


    해설



    • 화면 전체를 덮기 위해서, 최상위 요소에 matchParent 클래스를 지정한다.

    • 화면을 세로로 분할하고 싶은 경우는 stackVertical 클래스를, 옆으로 분할하고 싶은 경우는 stackHorizontal 클래스를 지정해, 페인이 되는 아이 요소를 추가한다.

    • 일반 창은 내용에 따라 크기가 결정됩니다. 사이즈를 고정 혹은 제약하고 싶은 경우는, 대상 요소에 (max-/min-) width/height를 지정한다.

    • stretchable 클래스를 지정하면, 그 페인은, 여백 가득 퍼진다. 복수로 지정한 경우는, 여백을 등분으로 나눈다.

    • 창의 내용을 스크롤 시키고 싶은 경우는, verticalScrollable 클래스를 지정한다.

    • 분할창을 재분할하려는 경우 분할창의 요소에 stackVertical/stackHorizontal을 지정합니다.



    주의사항



    브라우저에 따라서는, 페인내의 일부의 요소(textarea, select등)가 묘하게 신축해지는 일이 있었다.

    이것은 일부 요소에 디폴트로 flex-shrink가 설정되어 있기 때문이었다.



    아래와 같이 명시적으로 취소하거나 리셋 CSS를 적용하는 것이 좋습니다.



    textarea, select {
        flex-shrink: 0;
    }
    

    좋은 웹페이지 즐겨찾기