<main>의 경우, 각 가로별로 <div>로 나누고, 각 <div> 내에 각 영역을 <section>으로 나눠서 코드를 작성한다.
필요할 경우, <aside>와 <section> 내에 <article>을 사용한다.
시각장애인을 위한 웹접근성을 고려하여 코드를 작성한다.
위 4가지 구간 내에서 여러 요소들이 많이 속해 있는 것은 <div>로 묶는다.
링크가 필요한 경우, <a>를 사용한다.
“|”, “<”, “>” 등의 경우, <i>로 아이콘을 사용하거나, <span>, <div> 등을 만들고, CSS로 해당 모양을 만든다.
시각장애인을 위한 웹접근성 관련 필수 코드
1. <nav>, <section> 등을 사용할 때마다, 해당 영역이 무엇을 뜻하는지 heading으로 전달해야한다.
[1] 화면에 글자를 보여줘야 할 때
1 2 3 4
<section id="main-login"> <h3>로그인</h3> // 해당 section은 "로그인"에 관한 것 <span>네이버를 더 안전하고 편리하게 이용하세요.</span> </section>
[2] 화면에 글자를 숨겨야 할 때
1 2 3 4 5
<section id="main-login"> // "blind" class로 css를 사용하여 해당 `<h3>`의 "로그인" 글자는 화면에 보이지 않지만, 해당 section은 "로그인"에 관한 것 <h3 class="blind">로그인</h3> <span>네이버를 더 안전하고 편리하게 이용하세요.</span> </section>
2. image를 사용할 때마다, 해당 이미지가 무엇을 뜻하는지 알려줘야 한다.
[1] <img /> 태그 사용시
각 이미지가 개별적으로 있어서 하나의 이미지씩 사용할 때, <img /> 태그를 사용하고, “alt”로 대체문자를 작성해야 한다.
1
<img src="images/web_standards.gif" alt="W3C 로고"> // 해당 이미지는 "W3C 로고"를 의미한다.
[2] Image Sprite 기법 사용시
서버로부터 개별적인 이미지를 하나씩 받아오면 성능에 문제가 있을 수 있기 때문에, 하나의 이미지를 한번에 받아와 그 이미지 내부에 있는 여러 이미지를 사용하는 기법을 Image Sprite 기법이라고 한다.
이럴 경우, “background-image” 등 CSS를 사용하여 이미지를 보여줘야 한다.
1 2 3 4
<button type="submit"> <span class="blind">검색</span> // 해당(아래) 이미지가 "검색"을 의미한다. <span></span> // `<span>`을 작성하고, "background-image, "background-position" 등을 사용하여 이미지를 작업한다. </button>
3. form 사용시, <legend>에서 해당 form이 무엇을 뜻하는지 알려줘야 한다.
웹표준이란, W3C에서 정한 웹에 관련된 정해진 규칙을 말한다. 웹표준 스펙에 맞는 HTML, CSS 등으로 개발을 하여 웹을 개발해야 한다. 이런 표준을 정한 이유는 누구나 웹에 쉽게 접근하여 원하는 정보를 얻게 하기 위함이다. 이에 따라, 개발자는 웹접근성을 고려하여 모든사람(장애인을 포함한 일반인 모두)이 어떤 플랫폼(PC, 모바일, 태블릿)이든, 어떤 브라우저(Chrome, IE, Safari, FireFox, etc)든 쉽게 접근할 수 있게 웹을 개발해야 한다.
개발자는 HTML, CSS로 코딩을 한뒤, 웹표준에 맞는지 확인하기 위해서, 다음 2곳을 활용할 수 있다.
Semantic Web이란, 의미론적인 웹을 말한다. 즉, HTML 작성시, 단순한 <div> 보다는 브라우저가 어떤 의미인지 파악할 수 있는 코드, 예를 들어 <header> 등으로 해당 태그가 어떤 의미인지를 전달하는 해야 검색엔진에도 좋고, 개발자끼리도 어떤 의미로 작성되었는지 쉽게 파악할 수 있어서 좋다.
대표적인 Semantic 태그
<header>
<footer>
<nav>
<main>
<section>
<article>
<aside>
<h1>
웹표준과 웹접근성으로 고려한 HTML 코딩 규칙
아래 링크에서 웹표준과 웹접근성으로 고려한 HTML 코딩을 작성할 때, 참고해보면 좋을 것 같다.
1. Semantic 태그를 활용하여 전반적인 HTML 구조를 작성한다. 2. Screen Reader 등 장애인 등을 고려한 태그를 추가적으로 작성한다. 3. 데스크탑, 모바일, 태블릿에 맞게 반응형(Responsive) 코드를 작성한다. 4. 모든 브라우저를 고려한 CSS를 작성한다.(Cross Browsing) 5. 작성한 HTML, CSS가 웹표준에 맞는지 확인하고자 한다면, W3C Validation에서 해당 코드를 붙여넣기하여 확인하면 된다.
import React from 'react'; import TodoTemplate from './components/TodoTemplate'; import TodoInsert from './components/TodoInsert'; import TodoList from './components/TodoList';
ESLint는 문법 검사 도구이다. VS Code의 MarketPlace에서 설치가 가능하다. ESLint를 사용하면, 코드를 작성할 때 실수를 하면 에러 또는 경고메시지를 VS Code 에디터에서 바로 확인이 가능하다.
<2> Prettier2>
Prettier는 코드 스타일 자동 정리 도구이다. VS Code의 MarketPlace(Prettier-Code formatter)에서 설치가 가능하다.
[1] 현재 프로젝트의 루트 디렉터리(src, public 등의 디렉터리들이 위치한 곳)에서 .prettierrc 라는 파일을 생성한다.
[2] 들여쓰기, 따옴표, 세미콜론 등 원하는 스타일을 커스터마이징을 할 수 있다.
1 2 3 4 5 6 7 8
// .prettierrc
{ "singleQuote": true, // 작은 따옴표 사용 "semi": true, // 세미콜론은 언제나 사용 "useTabs": false, "tabWidth": 2 // 들여쓰기 시 탭 대신 공백을 두칸 사용 }
[3] 저장할 때, 자동으로 코드 정리하기
코드 스타일을 정리하기 위해서는 F1을 누르고, Format이라고 입력후, Enter를 눌러야 한다. 이 대신에, 코드를 저장할 때 마다 자동으로 코드 스타일을 정리하는 방법이 있다.
[3-1] Vs Code의 메뉴 중에서, Code - 기본설정 - 설정 메뉴에 들어간다. [3-2] “format on save”를 검색하여 체크박스에 체크한다.
위와 같이하면, 저장할 때마다 코드가 자동으로 정리가 된다.
<3> Reactjs Code Snippets3>
React 컴포넌트 및 라이프사이클 함수를 작성할 때, 단축 단어를 사용하여 간편하게 코드를 자동으로 생성해 낼 수 있는 코드 스니펫 모음이다. Reactjs Code Snippets는 VS Code의 MarketPlace에서 설치가 가능한데, 제작자가 charalampos karypidis인 것을 설치한다.
이를 사용하면, 단축키로 컴포넌트 코드를 간편하고 빠르게 생성할 수 있다.
[1] rsc -> Enter
함수형 컴포넌트를 생성한다.
[2] rcc -> Enter
class형 컴포넌트를 생성한다.
<4> 컴포넌트를 자동으로 불러오기(import)4>
[1] 루트 디렉터리에 jsconfig.json 파일을 생성한다.
[2] Ctrl + Space를 누르고 Enter를 누른다.
[3] 그러면, 다음과 같은 코드가 자동완성된다.
1 2 3 4 5 6 7
// jsconfig.json
{ "compilerOptions": { "target": "es6" } }
위와 같이 하게되면, 불러오고 싶은 컴포넌트의 파일이 열려 있지 않아도, 자동완성을 통해 컴포넌트를 불러와서 사용이 가능하다. 예를 들어, 부모 컴포넌트에서 어떤 A 컴포넌트의 이름을 작성하면, 따로 import A 이런식으로 작성하지 않아도 자동으로 작성이 된다.
Float란, CSS에서 레이아웃을 하기 위한 하나의 기술로써, 주로 block 요소를 가로 정렬하기 위해 사용되는 레이아웃 방법이다.
float: none; -> 요소를 떠 있게 하지 않음(default)
float: right; -> 요소를 오른쪽으로 이동시키고, 오른쪽부터 가로로 정렬됨
float: left; -> 요소를 왼쪽으로 이동시키고, 왼쪽부터 가로로 정렬됨
float 프로퍼티를 사용하면, 해당 요소를 다음 요소 위에 떠 있게(부유하게) 하는데, 이는 해당 요소가 기본적인 레이아웃에서 벗어나 요소의 모서리가 왼쪽이나 오른쪽으로 이동하는 것을 말한다.(참고로, float를 사용한다면, 요소의 위치를 고정시키는 position의 absolute는 사용하면 안된다.)
const Side = () => { return ( <div className="parent"> <div className="childFirst" style={styleFirst}> first </div> <div className="childSecond" style={styleSecond}> second </div> </div> ); };
export default Side;
이렇게 되면, float가 적용된 첫번째 div는 width가 inline 요소와 같이 content에 맞게 최소화가 되고, 다음 요소(두번째 div) 위에 부유하게 된다.(떠있게 된다.) 그러나, 두번째 div 요소의 width는 100%를 그대로 유지한다.
즉, 두 요소간의 margin은 제대로 표현되지 않는다.
이 문제를 해결하기 위한 방법은 float를 적용하지 않은 두번째 div에 “overflow:hidden;”을 적용하는 것이다. “overflow: hidden;”은 자식 요소가 부모 요소의 영역보다 클 경우 넘치는 부분을 안보이게 해주는 역할을 하는데, 여기서는 float 프로퍼티가 없어서 제대로 표현되지 못하는 요소를 제대로 출력해준다.
화면 왼쪽과 오른쪽에 “aside”와 “section” 태그를 보여주려고 한다. 이때, float를 사용해서 코드를 다음과 같이 작성하면 된다. 즉, 화면에 보여주려는 요소들에 float를 적용하고, 해당 요소의 부모요소에 clearfix를 적용하는 방식으로 코드를 작성한다.
function App() { return ( <div style={divStyle}> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </div> ); }
function App() { return ( <div style={divStyle}> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </div> ); }
export default App;
그러면, 다음과 같이 실제 콘텐츠 영역을 숨길 수 있다.
[2] width와 height의 초기값
width와 height의 값을 따로 지정하지 않으면, 초기값은 auto로 설정되어, 브라우저가 상황에 따른 width와 height의 값을 계산한다. 요소(element)가 block 요소라면, width는 부모요소의 100%가 되고, height는 콘텐츠의 높이로 계산되어 지정된다.
function App() { return ( <div style={divStyle}> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </div> ); }
export default App;
그러면, 다음과 같이 브라우저 width가 해당요소의 width 보다 작을 경우, 화면 아래 가로 스크롤바가 생긴다.
function App() { return ( <div style={divStyle}> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </div> ); }