보통은 항상 HTML로 응답하는 방식을 좋아하지만, 메뉴 같은 경우는 확신이 안 섬
토글 가능한 요소와 메뉴를 열기 위한 전체 페이지 전환 중 무엇이 더 나은지 접근성 전문가의 의견이 궁금함
여기서는 Popover API가 더 나은 해법처럼 느껴짐. 전체 왕복 요청 없이 JavaScript 없는 메뉴를 제공할 수 있기 때문임
그 외 대부분은 페이지 전환을 두려워할 필요가 없다는 데 동의함. 이제 SPA 같은 내비게이션도 SSR·정적 사이트에서 접근성을 갖추기 거의 항상 어렵지 않음
접근성 전문가는 아니지만 웹 개발용으로 NVDA를 설치해 둔 입장에서는, 사용자 경험상 큰 차이를 못 느낌
페이지 이동은 현재 위치를 초기화하지만, 메뉴를 열 의도였고 실제로 메뉴에 도착한다면 둘은 꽤 비슷함
다만 스크린 리더 사용자가 아니어도 그렇듯, 메뉴를 여는데 새 페이지로 이동하는 건 꽤 이상하게 느껴짐
핵심 단어는 can이지 should가 아님. 상호작용에 HTML 페이지가 적절하면 쓰고, 다른 방식이 더 적절하면 그걸 쓰면 됨
예를 들어 컴포넌트의 펼침/접힘 상태를 서로 다른 HTML 페이지 두 개로 만들지, 아니면 <details> 태그를 쓸지 묻는다면 당연히 후자임
마찬가지로 Popover API를 쓰는 것도 완전히 괜찮음. 요점은 페이지 안 상호작용에 JavaScript가 필요하지 않게 피하자는 것이지, 다중 페이지 HTML 내비게이션을 고집하자는 게 아님
제시된 방식은 JavaScript와 onclick으로 메뉴를 동적으로 불러오므로 지연 시간이 생기고 사용자 여정에 데이터 포인트가 하나 더 추가됨
대신 메뉴를 각 페이지에 넣고 <details> 요소나 :focus-within CSS 선택자로 보이거나 숨길 수 있음 https://nlnet.nl 이 이런 방식으로 동작함
설명된 접근은 실제로는 제대로 동작하지 않음. JavaScript를 끄고 블로그 글을 연 뒤 메뉴를 열고 닫으면, 원래 글이 아니라 홈(/)으로 이동함
닫기 버튼에 올바른 링크를 넣으려면 백엔드에서 메뉴를 동적으로 렌더링해야만 이 방식이 성립함
개인적으로는 가능하다면 Popover API를 선호함. 그러면 백엔드 없이도 모든 것을 정적으로 렌더링할 수 있음
href에 적힌 곳과 다른 페이지로 보내므로 나쁜 사용자 경험임. 링크에 마우스를 올려 목적지를 자주 확인하는데, 이렇게 속는 느낌은 달갑지 않음
한편으로는 정말 마음에 듦. HTML만으로도 JavaScript보다 더 매끄럽고 단순하게 많은 일을 할 수 있음
다른 한편으로는 이 방식이 주로 모바일에서 잘 맞아 보임. 데스크톱 페이지라면 메뉴가 항상 보이거나 팝아웃되는 걸 기대하지, 페이지 이동을 요구하진 않을 것임
그렇다면 이제 브라우저별로 두 벌의 페이지가 필요해지는 건가 싶음
반대로 모바일에서 연결이 불안정하면 메뉴로 한 번 이동하고 다시 목적지로 이동해야 함
마찰이 두 배가 됨
비교적 젊은 편인 듯함. 20~30년 전에는 모든 웹사이트가 이런 식으로 동작했고, HTML도 어느 정도 그렇게 쓰이도록 의도됐음
JavaScript는 우발적인 산물에 가까웠음
이 방식이 어떤 JavaScript 해법보다 더 어렵거나 복잡하다고 느끼는 게 의아함. 웹사이트를 만드는 가장 단순하고 쉬운 방법임은 분명함
내비게이션 방식은 별로지만 전환 효과는 마음에 들었고, 이런 게 가능한 줄 몰랐음
직접 만든 C++ 정적 생성기와 템플릿 라이브러리를 쓰는 내 사이트에도 적용함: https://vittorioromeo.com/
특히 다크/라이트 테마 전환기에 잘 어울린다고 봄
데스크톱에서 “menu”를 클릭했는데 다른 페이지로 이동하는 건 기분이 좋지 않음. 전체 페이지 새로고침이 발생해서 기대와 달리 꽤 거슬림
개인적으로는 읽기 흐름과 생각의 흐름이 끊김. 다른 사이트로 가는 링크를 클릭할 때는 방을 나가는 느낌이라 이전 방을 버리고 이동하지만, 메뉴에서 이런 일이 생기면 문 앞에 갔더니 완전히 다른 방에 와 있는 느낌이라 불편함
아이디어 자체는 솔직히 좋지만, 실제로 쓰는 느낌은 좋지 않음
그리고 어떤 전환 효과를 말하는지도 모르겠음. 내 환경에서는 Menu 버튼을 누르면 그냥 평소처럼 Menu 페이지가 로드될 뿐임
문서 간 뷰 전환은 아직 Firefox에서 동작하지 않음
다른 브라우저에서도 안 될 수 있지만, 주 브라우저로 Firefox 포크인 Librewolf를 쓰고 있음
Chromium에서는 전환 효과가 보임
재미있는 아이디어지만 데스크톱에서는 어떻게 작동할지 궁금함
전체 페이지 메뉴는 좀 과하다고 느껴져서, 페이지 전체를 바꾸는 방식은 덜 맞아 보임
메뉴 페이지 로드 지연을 줄이기 위한 preload를 언급하지 않음
이걸 쓰면 얼마나 잘 동작할지 궁금함
올바른 캐시 헤더도 넣어야 함. 여기서는 단순한 expires 헤더만으로도 충분할 가능성이 큼
그러면 보여주기 전에 서버에 검증하러 갈 필요도 없어져서 매우 빠르게 느껴질 것임
몇 년 전 @misty가 만든 텍스트 게임을 봤는데, 단순 링크를 상호작용으로 써서 선택의 환상을 줬음
단순한 HTML과 강한 이야기가 깊이 와닿았음
Lobste.rs 의견들
보통은 항상 HTML로 응답하는 방식을 좋아하지만, 메뉴 같은 경우는 확신이 안 섬
토글 가능한 요소와 메뉴를 열기 위한 전체 페이지 전환 중 무엇이 더 나은지 접근성 전문가의 의견이 궁금함
여기서는 Popover API가 더 나은 해법처럼 느껴짐. 전체 왕복 요청 없이 JavaScript 없는 메뉴를 제공할 수 있기 때문임
그 외 대부분은 페이지 전환을 두려워할 필요가 없다는 데 동의함. 이제 SPA 같은 내비게이션도 SSR·정적 사이트에서 접근성을 갖추기 거의 항상 어렵지 않음
페이지 이동은 현재 위치를 초기화하지만, 메뉴를 열 의도였고 실제로 메뉴에 도착한다면 둘은 꽤 비슷함
다만 스크린 리더 사용자가 아니어도 그렇듯, 메뉴를 여는데 새 페이지로 이동하는 건 꽤 이상하게 느껴짐
예를 들어 컴포넌트의 펼침/접힘 상태를 서로 다른 HTML 페이지 두 개로 만들지, 아니면
<details>태그를 쓸지 묻는다면 당연히 후자임마찬가지로 Popover API를 쓰는 것도 완전히 괜찮음. 요점은 페이지 안 상호작용에 JavaScript가 필요하지 않게 피하자는 것이지, 다중 페이지 HTML 내비게이션을 고집하자는 게 아님
제시된 방식은 JavaScript와
onclick으로 메뉴를 동적으로 불러오므로 지연 시간이 생기고 사용자 여정에 데이터 포인트가 하나 더 추가됨대신 메뉴를 각 페이지에 넣고
<details>요소나:focus-withinCSS 선택자로 보이거나 숨길 수 있음https://nlnet.nl 이 이런 방식으로 동작함
설명된 접근은 실제로는 제대로 동작하지 않음. JavaScript를 끄고 블로그 글을 연 뒤 메뉴를 열고 닫으면, 원래 글이 아니라 홈(
/)으로 이동함닫기 버튼에 올바른 링크를 넣으려면 백엔드에서 메뉴를 동적으로 렌더링해야만 이 방식이 성립함
개인적으로는 가능하다면 Popover API를 선호함. 그러면 백엔드 없이도 모든 것을 정적으로 렌더링할 수 있음
https://blog.jim-nielsen.com/를 가리키지만, JavaScript를 켜면onclick처리기가 내비게이션을 가로채는 듯함href에 적힌 곳과 다른 페이지로 보내므로 나쁜 사용자 경험임. 링크에 마우스를 올려 목적지를 자주 확인하는데, 이렇게 속는 느낌은 달갑지 않음한편으로는 정말 마음에 듦. HTML만으로도 JavaScript보다 더 매끄럽고 단순하게 많은 일을 할 수 있음
다른 한편으로는 이 방식이 주로 모바일에서 잘 맞아 보임. 데스크톱 페이지라면 메뉴가 항상 보이거나 팝아웃되는 걸 기대하지, 페이지 이동을 요구하진 않을 것임
그렇다면 이제 브라우저별로 두 벌의 페이지가 필요해지는 건가 싶음
마찰이 두 배가 됨
JavaScript는 우발적인 산물에 가까웠음
이 방식이 어떤 JavaScript 해법보다 더 어렵거나 복잡하다고 느끼는 게 의아함. 웹사이트를 만드는 가장 단순하고 쉬운 방법임은 분명함
내비게이션 방식은 별로지만 전환 효과는 마음에 들었고, 이런 게 가능한 줄 몰랐음
직접 만든 C++ 정적 생성기와 템플릿 라이브러리를 쓰는 내 사이트에도 적용함: https://vittorioromeo.com/
특히 다크/라이트 테마 전환기에 잘 어울린다고 봄
데스크톱에서 “menu”를 클릭했는데 다른 페이지로 이동하는 건 기분이 좋지 않음. 전체 페이지 새로고침이 발생해서 기대와 달리 꽤 거슬림
개인적으로는 읽기 흐름과 생각의 흐름이 끊김. 다른 사이트로 가는 링크를 클릭할 때는 방을 나가는 느낌이라 이전 방을 버리고 이동하지만, 메뉴에서 이런 일이 생기면 문 앞에 갔더니 완전히 다른 방에 와 있는 느낌이라 불편함
아이디어 자체는 솔직히 좋지만, 실제로 쓰는 느낌은 좋지 않음
그리고 어떤 전환 효과를 말하는지도 모르겠음. 내 환경에서는 Menu 버튼을 누르면 그냥 평소처럼 Menu 페이지가 로드될 뿐임
다른 브라우저에서도 안 될 수 있지만, 주 브라우저로 Firefox 포크인 Librewolf를 쓰고 있음
Chromium에서는 전환 효과가 보임
재미있는 아이디어지만 데스크톱에서는 어떻게 작동할지 궁금함
전체 페이지 메뉴는 좀 과하다고 느껴져서, 페이지 전체를 바꾸는 방식은 덜 맞아 보임
메뉴 페이지 로드 지연을 줄이기 위한 preload를 언급하지 않음
이걸 쓰면 얼마나 잘 동작할지 궁금함
그러면 보여주기 전에 서버에 검증하러 갈 필요도 없어져서 매우 빠르게 느껴질 것임
몇 년 전 @misty가 만든 텍스트 게임을 봤는데, 단순 링크를 상호작용으로 써서 선택의 환상을 줬음
단순한 HTML과 강한 이야기가 깊이 와닿았음