이메일 HTML 템플릿 구현하기(Feat. 크로스 브라우징 대응기)

JN·2024년 4월 7일
post-thumbnail

사내 프로젝트의 일환으로 이메일 HTML 템플릿을 구현해야 했던 테스크가 있었다.
이메일 HTML은 평소에 알던 HTML 구현 방식과 달리 제약사항이 아주 많았다.

고려해야 할 점

  1. 전체적으로 모두 table, tr, td 태그를 사용해야한다.
  2. span, div 태그와 같은 보편적인 태그 또한 사용해도 되지만 일부 메일 플랫폼에서는 적합하지 않다.
  3. 폰트 스타일 같은 경우는 클라이언트 플랫폼 마다 디폴트 스타일이 다르기 때문에 각 개별 태그에 일일히 인라인 스타일로 지정해야 안전하다.
  4. css는 개별 속성을 사용해야 하며(단축 속성x), color는 #ffffff 같은 Hexadecimal 를 사용해야 한다.
  5. flex 관련 속성들은 사용이 불가하다.
  6. 이미지 태그에는 alt, height, width, display:block속성이 필수이며 반응형으로 나타내기 위해서 max-width:100%; height:auto; vetical-align:top 으로 지정해준다.
  7. 컨테이너 태그의 width는 600px으로 지정하는 것이 가장 안전하다.
  8. 완성된 HTML 의 표준 품질을 검사하는 것이 안전하다 검사 링크

정리한 리스트 외에도 정말 다양한 제약사항이 존재한다.

테스트

테스트를 진행하기 위한 과정도 꽤나 복잡했다.
운영체제, 모바일, 웹, 플랫폼, 다크모드 등 경우의 수가 굉장히 많았다.
가능한 경우의 수를 파악한 후에 테스트 시나리오를 크게

  • IOS/mobile/web
  • IOS/mobile/app
  • IOS/desktop
  • Android/mobile/web
  • Andriod/mobile/app
  • Andriod/desktop

이렇게 나누었다.
각각의 시나리오는 브라우저or메일어플->메일 플랫폼->다크모드 로 뎁스를 형성했다.

이슈 - 크로스 브라우징 대응

1. line-height 적용 문제

  • IOS/네이버 메일 앱에서 발견한 이슈로 의도한 line-height가 적용되지 않고 줄 별 간격이 좁아져 가독성이 떨어졌다.
  • td 자체에 line-height을 지정했던 것이 원인이었으며 td태그 안에 span 태그를 추가로 삽입하여 span태그에 line-height를 지정함으로써 해결했다.

2. font-size(비율/width 600 -> max-width:600)

  • IOS(아이폰) 기본 내장 메일 어플에서 발견한 이슈로 모든 폰트의 사이즈가 모바일 화면 크기 비율대로 줄어들어 나타났다.
  • 폰트 사이즈 속성에 !important 도 붙여보고, font-size-adjust 속성을 이용하기도 하고, head 영역에
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    다음과 같이 설정해보기도 했는데 해결되지 않았다.
  • 결론적으론 컨테이너의 width를 600px로 지정한 것이 원인이었다. 가장 안전하다고 알려진 600px도 안전하지 않았던 것이였고, 나는 max-width을 600px으로 변경한 후 해결했다.

3. 가운데 정렬 (margin 0 auto, align-center)

  • 테이블 태그 안에 들어가는 요소들을 align-center 속성을 지정하면 가운데 정렬이 보통 됐는데, 일부 브라우저에서는 적용되지 않는걸 확인했다.
  • 이럴 경우 모두 margin:0 auto 로 해결했다.

4. width:100%

  • 일부 브라우저에선 width:100% 로 따로 지정 안해도 의도대로 잘 나타났던 반면, 또 다른 브라우저에선 지정하지 않을 경우 fit으로 나타났던 경우가 있어 width를 모두 명시해주었다.

5. div 적용X -> radius 적용 불가

  • 어떤 컴포넌트에는 반드시 radius를 꼭 지정해야 했고 지정하기위해선 테이블 태그로는 불가능했다.
  • div 태그 사용을 최대한 지양하려고 했지만 이 경우 사용할 수 밖에 없었고 다행히 거의 모든 테스트 시나리오에서 잘 나타났다.
  • 하지만 예외는 있었다.. 윈도우 내장 메일 어플에서 div 태그 자체가 아예 인식되지 않는 듯 하여 div에 준 속성들이 완전히 무시됐다.

6. 이미지 대체

  • 평소에 flex로 정렬했던 버튼 컴포넌트같은 스타일을 이메일 HTML으로 구현하기 정말 까다로웠다. flex 속성의 소중함을 깨달았다
  • 너무 까다로운 컴포넌트들은 어쩔 수 없이 이미지로 대체하여 통으로 넣었다

7. 다크모드를 위한 png 이미지

  • 일부 테스트 시나리오에서는 실행 환경이 다크모드일 경우 자동으로 내가 만든 HTML 템플릿에 대해 색상을 반전시켜 나타났다.
  • 컨테이너의 bg-color가 white이였기 때문에 아무 생각 없이 jpg이미지를 넣었으나 다크모드에서는 모든 색이 반전되었으나 이미지만 배경이 허~옇게 떠있었다.
  • 바로 png로 바꿔서 해결했다.
profile
개발일지📒

0개의 댓글