Chrome 86 업데이트 :focus-visible, Quick Focus Highlight (접근성)

 

:focus-visible

  • :focus와 같아 보일 수 있으나 :focus-visible은 키보드를 통해 탭할때에 스타일을 지정할 수 있다.
  • :focus와 함께 사용 가능하다.
  • Firefox의 :-moz-focusring과 유사한 기능을 제공하지만 동일하지 않다.
  • 웹 외에 키보드 입력을 지원하는 모든 요소에서 사용된다.

 

도입이유

외관상의 이유로 클릭을 받았을때 :focus를 css로 비활성화하는 경우가 많다. 
이것은 안티패턴으로 분리된다.
:focus를 비활성화할 경우 저시력, 인지장애가 있는 사용자의 접근성 문제가 야기되기때문에 :focus와 분리된 :focus-visible이 추가되었다.

 

테스트방법

9월 3일 베타버전, 글을 작성하는 당시(9/8)는 베타버전으로 실험용 플래그 설정 후 확인 가능

  1. chrome://flags/ 
  2. Experimental Web Platform features 검색
  3. Enabled로 변경하고 확인가능

flags 캡쳐

Syntax

:focus-visible
/ * 마우스나 터치 시 정의 * /
button:focus:not(.focus-visible) {}
  
/ * 키보드 포커스 시 정의 * /
button:focus-visible{}

 

Basic example

<input value="Default styles">
<button>Default styles</button>
<input class="focus-only" value=":focus only">
<button class="focus-only">:focus only</button>
<input class="focus-visible-only" value=":focus-visible only">
<button class="focus-visible-only">:focus-visible only</button>
input, button {
  margin: 10px;
}

.focus-only:focus {
  outline: 2px solid black;  
}

.focus-visible-only:focus-visible {
  outline: 4px dashed darkorange;
}

Output

코드 및 캡쳐 MDN 출처

 

Browser Support

Caniuse 출처

 

 

Quick Focus Highlight

  • 사용자 기본 설정할 수 있다.
  • 탭으로 탐색 시에 초점이 맞춰진 요소가 2초동안 표시 기능을 제공한다.
    • 항상켜짐모드는 아니다.
  • 입력 장치에 관계없이 초점 표시를 일치하게 만들 수 있다.
  • :focus 기능과는 별도며 :focus 기능 스타일을 비활성화해도 표시한다.

 

 


출처 및 참고

[SOCAR FRAME 만들기 #3] 컴포넌트, 제대로 만들어 쉽게 쓰자! (1탄)

 

쏘카 컴포넌트 정의 사이트

 

기존방식의 문제점때문에 컴포넌트 개발에 대한 논의 시작

디자이너끼리는 UI스타일 가이드 문서로 최소한의 규칙 공유

하지만 개발자는 기존 코드 확인이 가능할 경우 재사용, 그렇지 않을 경우 다시 개발

 

 

디자인 시스템 구축

  • 네이밍 통일
  • 컴포넌트 용어, 네이밍 통일

  • 네이밍 룰 정립

    • 무슨_무슨_Button

    • 실제 형태(Size, Line)를 기준

    • 약어 사용 금지, 풀네임으로 명시

쏘카의 컴포넌트 네이밍 룰

 

테마

  • 구성된 컬러가 다를 경우

쏘카의 테마 네이밍 룰

 

고정속성, 가변속성 개념

  • 사이즈, 텍스트 스타일

쏘카의 고정속성, 가변속성 예시

 

가변속성

  • 테마에 따라 달라지는 속성

  • 색상

쏘카의 가변속성 예시

 

각자의 영역에서 가변속성을 컨트롤 하기 쉽게 세팅해두고 사용

 

컬러별 컴포넌트 생성

  • 아쉬운 점이 됨
  • 컴포넌트 수가 컬러 수만큼 증가

 

 

2탄이 나오면 또 읽어야지..


[SOCAR FRAME 만들기 #3] 컴포넌트, 제대로 만들어 쉽게 쓰자! (1탄)

https://tech.socarcorp.kr/design/2020/07/31/component-01.html

 

SEO 그것을 알려드림

SEO(Search Engine Optimization)

검색광고 역이 아닌 검색엔진최적화(Organic Search) 영역중 최상단에 나오게 하는 작업

 

첫페이지가 왜 중요한가?

상위 5개에서 67% 클릭 발생

 

최적화

  • Technical SEO

    • 검색엔진이 데이터를 잘 수집 할수 있도록 하는 작업

  • Content SEO

    • 검색자 질문에 답을 줄수 있는 컨텐츠 제작

 

최근 원티드에 적용한 Technical SEO

  1. Robots.txt

    • 세부적으로 허용, 비허용 경로 작성

  2. URL 표준화 (canonical)

  3. 구조화된 데이터 (Structure Data) 적용

  4. 검색엔진에 JSON으로 페이지 내용을 알려주는 것

<script type="application/ld+json">
{
  "@context": "https://schema.org/",
  "@type": "Recipe",
  "name": "백종원 돼지고기 김치찌개 만들기",
  "author": {
    "@type": "Person",
    "name": "백종원"
  },
  "datePublished": "2020-08-06",
  "description": "누구나 쉽게 할수 있는 김치찌개. 맛보장",
  "prepTime": "PT20M"
}
</script>

 

 

데이터 테스트

데이터 테스트 사이트

https://search.google.com/test/rich-results?hl=ko

데이터 모니터링

https://search.google.com/search-console/about

 


SEO 그것을 알려드림

https://medium.com/wantedjobs/seo-%EA%B7%B8%EA%B2%83%EC%9D%84-%EC%95%8C%EB%A0%A4%EB%93%9C%EB%A6%BC-a77f02384615

 

ES10, ES2020 간단하게 알고가기

 

ES2019(ES10)의 변화

Object.fromEntries

  • Object.entries의 반대 기능

    • Object.entries는 객체를 2차원 배열로 만들어준다.

  • 2차원 배열을 객체로 만들어준다.

  • 배열말고 Map같은 것도 지원

 

Array.prototype.flat 

Array.prototype.flatMap

  • 다중 배열을 펼치는 기능

  • 기본 1단계 펼침

  • 숫자 인수를 넣어 몇 번 연달아 펼칠치 결정 가능

 

String.prototype.trimStart

String.prototype.trimEnd

String.prototype.trimLeft

String.prototype.trimRight

  • 공백 제거 가능

  • 하위호환을 위해 같은 역할을 하는 메서드를 두개 만들었다고 한다

 

Optional Catch

  • catch 매개변수를 쓰지 않는 경우 error 생략해도 된다.

 

기타

  • 유니코드

  • JSON, toString 개선

  • Symbol에 description 속성이 생겼다. - 어떤 심볼을 사용했는지 알아낼 수 있게 되었다.

 

 

ES2020의 변화

matchAll

  • .exec와 비슷

  • 문자열에서 일치하는 정규표현식을 iterator 형식으로 반환

  • 캡쳐링 그룹도 결과로 반환

  • /g를 사용해야 에러가 발생하지 않음

 

BigInt

  • 큰 숫자의 표현, 처리 가능

  • 숫자로 변환할 수는 없다.

  • 같은 BigInt 끼리 계산해야 에러가 발생하지 않음

  • 소수점은 표현하지 못함

  • 숫자와의 타입체크 시 다르게 인식해서 (===) 불가, 일반 숫자 비교는 가능

 

Promise.allSettled

  • Promise.all은 하나만 실패해도 catch로 이동했다.

  • 하지만 allSettled는 여러 프로미스에서 개별적으로 성공 여부를 알려준다.

    • 실패 시 개별 처리 가능

 

globalThis

  • 런타임에 따라서 window, global로 나뉘었는데 하나로 통일하여 사용가능

    • 브라우저에서 globalThis는 window

    • 노드에서는 globalThis는 global

    • 기존의 window, global은 존재한다.

 

Optional Chaining 

  • ?. 로 사용한다.

  • 해당 값이 존재하지 않으면 undefined가 된다.

  • 해당 값이 존재하면 조건문을 실행할 수 있다.

if (a) { 
  if (a.b) { 
      console.log(a.b.c); 
  } 
}
  • ?. 연산자 사용
console.log(a.b?.());

 

 

Nullish Coalescing 

  • ??로 사용한다.

  • null 값을 처리하는 방식으로 || 로 표시되는 or 연산자와는 다르다.

  • null과 undefined인 경우 거짓으로 처리 가능 

    • 기존에는 0, NaN, '', false 등도 거짓으로 처리했었다.

 

 

Dynamic import

  • 함수로 사용하면 import는 프로미스를 리턴한다.

  • 콜백, async / await에서도 사용가능


 

ES2019(ES10)의 변화

https://www.zerocho.com/category/ECMAScript/post/5c909bfe5a8005001ffb3f14

 

ES2020의 변화

https://www.zerocho.com/category/ECMAScript/post/5eae7480e70c21001f3e7956

ES2020 7가지 새로운 팁

https://frontdev.tistory.com/entry/ES2020-7%EA%B0%80%EC%A7%80-%EC%83%88%EB%A1%9C%EC%9A%B4-%ED%8C%81

 

 

 

+ Recent posts