유연한 구성 요소 구축을 위한 개발자 결정

게시 됨: 2022-03-10
빠른 요약 ↬ 프론트엔드 개발자의 핵심 기술 중 하나는 디자인을 코드로 변환하는 것입니다. 이러한 디자인은 종종 웹 사이트 탐색의 "이상적인" 경험을 시각화하는 정적 모형으로 표시됩니다.

현실 세계에서 콘텐츠는 종종 디자인에 표시되는 깔끔하고 완벽하게 맞는 콘텐츠와 크게 다릅니다. 이에 더해 최신 웹에서 사용자는 우리가 구축한 사이트에 액세스하는 방법에 대해 점점 더 다양한 옵션을 갖게 됩니다.

이 기사에서 우리는 텍스트 및 미디어 구성 요소에 대해 겉보기에 단순한 디자인을 취하고 사용자와 콘텐츠 작성자 모두의 요구를 염두에 두고 이를 코드로 가장 잘 변환하는 방법을 결정하는 프로세스를 안내할 것입니다. 우리는 그것을 코딩 하는 방법 에 대해 탐구하지 않을 것입니다. 오히려 우리의 개발 결정을 결정할 요소들입니다. 우리는 모든 단계에서 (자신과 다른 이해 관계자 모두에게) 물어야 할 질문을 고려할 것입니다.

개발 사고방식 바꾸기

우리는 더 이상 "최적의" 콘텐츠나 검색 조건만을 위해 디자인하고 개발할 수 없습니다. 대신 웹의 고유한 유연성과 예측 불가능성을 수용하고 탄력적인 구성 요소를 구축해야 합니다. 정적 모형은 모든 시나리오를 충족할 수 없으므로 많은 설계 결정은 빌드 시 개발자에게 넘어갑니다. 좋든 싫든, 당신이 UI 개발자라면 당신 디자이너입니다. 심지어 스스로를 디자이너로 여기지 않더라도!

WordPress 전문 웹 에이전시 Atomic Smash 에서 우리는 우리가 제공하는 구성 요소에서 최대한의 유연성을 필요로 하는 클라이언트를 위해 웹 사이트를 구축하는 동시에 어떤 콘텐츠를 던지더라도 사이트가 여전히 멋지게 보이도록 합니다. 때때로 디자인을 해석한다는 것은 디자이너에게 아이디어를 더 자세히 설명하도록 요청하는 것을 의미합니다. 다른 경우에는 즉석에서 설계 결정을 내리거나 우리의 지식과 경험을 기반으로 권장 사항을 만드는 것을 의미합니다. 이 사례 연구에서 이러한 접근 방식이 적절할 수 있는 몇 가지 경우를 살펴보겠습니다.

디자인

우리는 제품 랜딩 페이지에서 흔히 볼 수 있는 텍스트 및 미디어 구성요소를 위한 단순한 디자인으로 시작합니다. 왼쪽에는 이미지 또는 비디오, 오른쪽에는 제목, 텍스트 단락 및 클릭 유도문안 링크가 포함된 열로 구성됩니다. 이 디자인은 새로운 기술을 배우고자 하는 사람들이 튜터를 찾을 수 있도록 도와주는 (가상의) 스타트업을 위한 것입니다.

텍스트 및 미디어 구성 요소의 초기 디자인
텍스트 및 미디어 구성 요소의 초기 디자인입니다. (큰 미리보기)

참고: 코드로 바로 이동하여 이 구성 요소에 대해 제안한 가능한 모든 솔루션을 보려면 이 Codepen 데모에서 찾을 수 있습니다.

점프 후 더! 아래에서 계속 읽기 ↓

레이아웃 및 순서

디자이너는 이미지가 오른쪽에 있고 텍스트 열이 왼쪽에 있도록 다른 모든 구성 요소의 레이아웃을 뒤집어야 한다고 규정했습니다.

데스크탑 및 모바일 디자인
데스크탑 및 모바일 디자인. (큰 미리보기)

그러나 모바일 레이아웃에서 이미지는 모든 경우에 텍스트 콘텐츠 위에 쌓입니다. Grid 또는 flexbox를 사용하여 이 레이아웃을 빌드한다고 가정하면 flex-direction 또는 order 속성을 사용하여 두 번째 구성 요소마다 레이아웃을 재정렬할 수 있습니다.

 .text-and-media:nth-child(even) { flex-direction: row-reverse; }

시각적으로 내용을 재정렬하지만 DOM 순서는 변경하지 않는다는 점을 염두에 두어야 합니다. 즉, 화면 판독기를 사용하여 사이트를 탐색하는 부분 시력 사용자에게는 콘텐츠의 순서가 왼쪽에서 오른쪽에서 오른쪽에서 왼쪽으로 점프하여 논리적으로 나타나지 않을 수 있습니다.

개인적으로 1열의 내용이 이미지뿐인 경우 order 속성을 사용하는 것이 어느 정도 괜찮다는 생각이 듭니다. 그러나 예를 들어 두 개의 텍스트 열이 있는 경우 CSS로 재정렬하면 혼란스러운 경험을 할 수 있습니다. 이러한 경우에는 다른 옵션을 사용할 수 있습니다. 우리는:

  1. 접근성 문제를 제기하고 모바일 레이아웃의 경우 시각적 순서를 데스크톱 순서와 일치하도록 변경하도록 권장합니다.
  2. Javascript를 사용하여 DOM의 요소를 재정렬합니다.

또한 :nth-child 선택기를 통해 순서를 적용할지 아니면 클라이언트가 순서를 제어하도록 허용할지(예: 구성 요소에 클래스를 추가하여) 고려해야 합니다. 각 옵션의 적합성은 프로젝트에 따라 달라질 수 있습니다.

다양한 콘텐츠 길이 다루기

디자인에서 이미지 대비 텍스트 콘텐츠의 비율이 상당히 만족스럽습니다. 이를 통해 이미지가 이상적인 종횡비를 유지할 수 있습니다. 그러나 텍스트가 제시된 것보다 길거나 짧으면 어떻게 됩니까? 전자를 먼저 처리합시다.

더 긴 콘텐츠

선택한 CMS의 텍스트 필드에 문자 제한을 설정할 수 있지만(그렇게 하려는 경우) 구성 요소에서 최소한 약간 의 변형을 허용해야 합니다. 더 긴 단락을 추가하면 반대 미디어 열이 여러 가지 방식 중 하나로 작동할 수 있습니다.

  1. 이미지 또는 비디오는 맨 위에 유지되고 공간은 아래에 추가됩니다(그림 1).
  2. 이미지 또는 비디오가 중앙에 배치되어 상단 또는 하단에 공간이 추가됩니다(그림 2).
  3. 왜곡을 방지하고 이미지가 사용 가능한 공간을 채우도록 하기 위해 object-fit: cover 를 사용하여 이미지 또는 비디오의 비율이 높이에 맞게 조정됩니다. 이는 이미지의 일부가 잘릴 수 있음을 의미합니다(그림 3).
이미지 또는 비디오는 맨 위에 유지되고 공간은 아래에 추가됩니다.
그림 1. (큰 미리보기)
이미지 또는 비디오가 중앙에 배치되어 상단 또는 하단에 공간이 추가됩니다.
그림 2. (큰 미리보기)
왜곡을 방지하고 이미지가 사용 가능한 공간을 채우도록 하기 위해 'object-fit: cover'를 사용하여 이미지 또는 비디오의 비율이 높이에 맞게 조정됩니다.
그림 3. (큰 미리보기)

우리는 옵션 3이 시각적으로 가장 만족스럽고 대부분의 경우 콘텐츠 작성자가 소량의 클리핑이 허용되는 적절한 이미지를 소싱할 수 있다고 결정했습니다. 그러나 중요한 부분이 잘릴 수 있는 위험이 더 많은 비디오 콘텐츠에 더 많은 도전을 제시했습니다. 비디오가 원래 종횡비를 유지하고 페이지 가장자리에 정렬하는 대신 최대 너비 내에 포함되도록 디자인의 다른 변형을 만드는 또 다른 옵션에 착수했습니다.

비디오는 원래 종횡비를 유지하며 페이지 가장자리에 맞추는 대신 최대 너비 내에 포함됩니다.
(큰 미리보기)

콘텐츠 작성자는 필요에 더 적합할 때 이 옵션을 선택할 수 있습니다.

또한 이 선택을 비디오 대신 이미지가 사용된 경우로 확장하기로 결정했습니다. 디자인에 부정적인 영향을 주지 않으면서 클라이언트에게 보다 다양한 레이아웃 옵션을 제공합니다. 더 넓은 페이지 컨텍스트에서 볼 때 이러한 블록 중 여러 개를 페이지에서 사용할 때 더 흥미로운 페이지를 허용하는 개선으로 간주될 수도 있습니다.

더 짧은 콘텐츠

적은 양의 콘텐츠를 처리하는 것이 조금 더 간단하지만 여전히 몇 가지 문제가 있습니다. 텍스트 내용이 더 짧을 때 이미지는 어떻게 작동해야 합니까? 구성 요소의 전체 높이가 텍스트 내용에 의해 결정되도록 더 얕아져야 합니까(그림 4)? 아니면 이미지가 레터박스가 되지 않도록 최소 종횡비를 설정해야 합니까, 아니면 이미지가 자연스럽고 고유한 높이를 차지하도록 해야 합니까? 이 경우 텍스트를 중앙에 정렬할지 상단에 정렬할지 여부도 고려해야 합니다(그림 5 및 5a).

구성 요소의 전체 높이가 텍스트 내용에 의해 결정되는 이미지
그림 4. (큰 미리보기)
텍스트가 중앙에 정렬된 이미지
그림 5. (큰 미리보기)
텍스트가 상단에 정렬된 이미지
그림 5a. (큰 미리보기)

제목 길이

다른 길이의 제목도 테스트해야 한다는 사실을 잊지 마십시오. 디자인에서 제목은 짧고 날카로우며 두 번째 줄로 넘어가는 경우가 거의 없습니다. 하지만 제목이 여러 줄이거나 내용이 긴 단어를 많이 사용하여 텍스트 줄 바꿈이 다른 경우에는 어떻게 될까요? 이것은 특히 단어가 영어보다 훨씬 긴 경향이 있는 독일어와 같은 언어에서 문제가 될 수 있습니다. 이 레이아웃에서 사용할 때 디자인의 제목 글꼴 크기가 적절한 줄 길이를 허용합니까? 긴 단어는 줄 바꿈할 때 하이픈을 넣어야 합니까? Ahmad Shadeed의 이 기사는 콘텐츠 길이 문제를 다루고 CSS에서 이를 처리하는 방법에 대한 몇 가지 편리한 팁을 포함했습니다.

콘텐츠 작성자가 자신에게 적합한 경우 제목을 모두 생략할 수 있습니까? 그것은 우리를 다음 고려 사항으로 이끕니다.

내용 생략

이 구성 요소를 가능한 한 유연하게 구축한다는 것은 콘텐츠 작성자가 특정 필드를 생략하고 디자인 모양과 기능이 제대로 유지되도록 할 수 있음을 의미합니다. 클라이언트가 이 구성 요소를 야생에서 사용할 때 본문, 링크 또는 제목을 생략할 수도 있습니다. 구성 요소가 스트레스를 받아 파손되지 않을 것이라고 확신할 수 있도록 가능한 모든 콘텐츠 조합으로 테스트하는 데 주의를 기울여야 합니다. 필드 콘텐츠가 없을 때 빈 HTML 태그를 렌더링하지 않도록 하는 것이 좋습니다. 이것은 예상치 못한 레이아웃 버그를 피하는 데 도움이 됩니다.

본문을 생략하고 링크를 생략한 구성 요소 테스트
본문을 생략하고 링크를 생략한 구성 요소를 각각 테스트합니다. (큰 미리보기)

CMS에서 "필수" 필드를 사용하여 콘텐츠 작성자를 제한 할 수 있지만 클라이언트가 이미지를 생략 하거나 반대로 텍스트 콘텐츠가 없는 시나리오를 고려할 수도 있습니다. 이러한 옵션을 제공하는 것이 도움이 될 수 있습니다. 다음은 이러한 경우에 구성 요소를 렌더링하도록 선택하는 방법의 예입니다.

클라이언트가 이미지 생략을 선택하는 시나리오
(큰 미리보기)

텍스트를 조금 더 들여쓰기하고 본문 텍스트의 너비를 늘리면 이미지가 없을 때도 균형을 유지할 수 있습니다.

다중 링크

콘텐츠를 생략하는 것은 하나의 시나리오입니다. 그러나 Atomic Smash에서 우리는 클라이언트가 구성 요소에 하나 이상의 링크를 추가하는 옵션을 원하는 경우가 더 많다는 것을 발견했습니다. 그것은 우리에게 또 다른 선택을 제시합니다. 여러 링크를 배치하는 방법은 무엇입니까? 나란히 배치합니까(그림 8), 수직으로 쌓습니까(그림 8a)?

여러 링크가 나란히 배치되는 구성 요소
그림 8. (큰 미리보기)
여러 링크가 세로로 배치되는 구성 요소
그림 8a. (큰 미리보기)

엄청나게 다른 길이의 링크 제목을 어떻게 처리합니까? 좋은 트릭은 두 링크의 너비를 가장 긴 링크의 최대 너비로 설정하는 것입니다(그림 9). (이 기사에서는 그 내용을 다룹니다.) 수직으로 쌓인 버튼에는 잘 작동하지만 수평으로 배치하면 더 많은 선택이 가능합니다(그림 9a).

두 링크의 너비가 가장 긴 링크의 최대 너비로 설정되는 구성 요소
그림 9. (큰 미리보기)
버튼이 가로로 배치되는 컴포넌트
그림 9a. (큰 미리보기)

구별하기 위해 보조 링크 스타일이 필요합니까? 이것들은 모두 고려해야 할 질문입니다.

링크를 구별하는 데 도움이 되는 두 가지 스타일의 버튼
링크를 구별하는 데 도움이 되도록 보조 링크 스타일을 추가하기로 결정했습니다. (큰 미리보기)

또한 링크의 클릭 가능한 영역이 전체 구성 요소를 포함해야 하는지(단일 링크의 경우) 고려해야 할 수도 있습니다. 그러면 사용자가 링크를 클릭하여 링크를 활성화할 수 있습니다. 그 선택은 아마도 더 넓은 맥락에 따라 달라질 수 있습니다. 카드 기반 UI에서는 확실히 일반적입니다.

동영상

구성 요소가 정적 이미지가 아닌 비디오에 사용되는 경우 디자인에 일부 주요 정보가 누락되었음을 알 수 있습니다. 비디오 재생은 어떻게 제어됩니까? 호버에? 스크롤시 자동재생되나요? 사용자가 볼 수 있는 컨트롤이 있어야 합니까?

비디오가 호버에서 재생되는 경우 호버 기능이 없는 장치 사용자가 비디오 콘텐츠에 액세스하는 방법을 고려해야 합니다. 또는 동영상이 자동 재생되는 경우 움직임 감소를 선호하는 사용자, 전정 장애로 고통받을 수 있는(또는 단순히 애니메이션이 거슬리는 것을 피하려는 경우) 이를 방지하는 것을 고려해야 합니다. 또한 모든 사용자가 원할 때 비디오를 중지할 수 있는 방법을 제공해야 합니다.

컨텍스트에 적용하기

웹 디자인과 관련하여 구성 요소에 매우 밀접하게 초점을 맞추는 한 가지 문제는 때때로 우리가 구축한 구성 요소가 전체 웹 페이지의 컨텍스트에서 어떻게 나타날지 고려하는 것을 잊는 것입니다. 동일한 유형의 구성 요소 사이와 다른 구성 요소가 산재되어 있는 페이지 레이아웃 모두에서 간격을 고려해야 합니다.

이러한 텍스트 및 미디어 구성 요소는 드물게 사용하도록 설계되어 시선을 사로잡는 색상의 스플래시와 선형 레이아웃에서 벗어나도록 합니다. 그러나 WordPress를 사용하면 콘텐츠 작성자는 이러한 구성 요소로만 구성된 전체 페이지를 쉽게 구축할 수 있습니다. 그것은 오히려 둔하게 보일 수 있으며 우리가 기대했던 효과가 전혀 아닙니다!

빌드 과정에서 배경색을 생략하는 옵션을 추가하기로 결정했습니다. 이를 통해 페이지를 분할하고 더 흥미롭게 만들 수 있습니다.

텍스트 및 미디어 구성요소의 다양한 변형으로 구성된 페이지
텍스트 및 미디어 구성요소의 다양한 변형으로 구성된 페이지입니다. (큰 미리보기)

:nth-child 를 사용하여 패턴을 적용하거나 CMS에 필드를 추가하여 클라이언트에게 보다 창의적인 제어를 제공할 수 있습니다.

이것은 원래 디자인의 일부는 아니었지만 디자이너와 개발자 간의 열린 커뮤니케이션 라인이 보다 유연하고 강력한 디자인 측면에서 더 나은 결과를 만드는 데 도움이 될 수 있음을 보여줍니다.

WYSIWYG 텍스트 스타일

콘텐츠를 고려할 때 텍스트의 길이뿐만 아니라 본문 텍스트 필드에 허용될 수 있는 실제 HTML 요소도 고려해야 합니다. 콘텐츠 작성자는 본문 사본에 여러 단락, 앵커 링크, 목록 등을 추가할 수 있습니다. Atomic Smash에서는 WYSIWYG(What You See Is What You Get) 또는 이러한 영역에 대해 다양한 요소를 허용할 수 있는 서식 있는 텍스트 필드를 제공하고자 합니다. 사용된 모든 배경색에서 충분한 색상 대비 테스트를 포함하여 다양한 유형의 콘텐츠와 스타일을 적절하게 테스트하는 것이 중요합니다.

본문 텍스트의 링크 스타일이 색상 대비에 대한 WCAG 지침을 통과하지 않는 구성 요소
본문 텍스트의 링크 스타일은 색상 대비에 대한 WCAG 지침을 통과하지 않습니다. 따라서 스타일을 수정해야 합니다. (큰 미리보기)

마무리

우리는 이 겉보기에 단순해 보이는 구성 요소를 구축하는 것과 관련된 다양한 결정에 대해 언급했습니다. 여기에서 다루지 않은 다른 몇 가지를 생각할 수도 있습니다! 디자인의 모든 측면과 컨텍스트에서 사용할 수 있는 방법을 고려하여 훨씬 더 다재다능한 것으로 끝냈으며, 결과적으로 더 행복한 고객이 되길 바랍니다!

때로는 디자인에서 생략할수록 더 많은 시간과 개발자의 관심이 필요합니다. 구성 요소를 구축할 때 유용할 수 있는 테스트 및 질문에 대한 체크리스트를 아래에 작성했습니다. 다른 구성 요소에도 적용할 수 있습니다.

겉보기 단순함을 지나쳐 구성 요소를 구성 요소로 분해하고, 주요 질문을 하고(개발이 시작되기 전에도), 미래의 사용을 고려할 수 있는 능력은 웹 사이트를 구축할 때 모든 개발자에게 잘 도움이 될 모든 기술입니다. 필요할 때 훨씬 더 정확한 견적을 제공하는 데 도움이 됩니다. 좋은 팀 커뮤니케이션과 강력한 협업 프로세스는 탄력적인 사이트를 구축하는 데 매우 중요하지만 최종 결과는 이러한 문화를 육성하는 데 투자할 가치가 있습니다. 설계 구축 프로세스에 유연성을 적용해 보겠습니다.

체크리스트

테스트할 사항:

  1. 레이아웃의 접근성(모바일 및 데스크톱).
  2. 서로 다른 고유 종횡비의 이미지가 적절하게 잘렸습니까?
  3. 더 길고 더 짧은 본문 텍스트(여러 단락 포함).
  4. 더 길고 더 짧은 제목(다양한 단어 길이 포함).
  5. 제목, 본문, 링크 및 이미지를 (다양한) 생략합니다.
  6. 여러 링크(다양한 길이의 링크 텍스트 포함).
  7. 비디오 콘텐츠의 접근성.
  8. WYSIWYG 텍스트 콘텐츠(본문 텍스트에 링크, 목록 등 포함).
  9. 컨텍스트 내 테스트 - 여러 구성 요소(다양한 콘텐츠 옵션 포함)와 페이지 레이아웃에 혼합된 기타 구성 요소를 포함합니다.