반응형

디자이너에게 시안을 받다보면, 생긴건 table인데 tbody 영역만 스크롤이 되게끔 시안이 올 때가 있다.

 

자체 소스가 잘 짜여져 있는 회사라면, 프레임워크나 내부 grid시스템, 기타 js 등으로 해결이 원만하지만,

 

그렇지 않은 경우에 어떻게 해야 할 지 막막할 때가 있다.

 

thead 영역까지 스크롤이라면, div로 테이블을 감싸고 높이값을 줘서 overflow-y:scroll 등으로 손쉽게 해결하지만

 

thead는 고정이고 tbody만 스크롤 될 때 어떻게 짤 지 고민을 한번쯤은 해보았을 것 같다.

 

서두에 말한 방법이 없다면, 편법을 활용해 이렇게 짤 수도 있다.

 

1. HTML

<table>
  <thead>
    <tr>
      <th scope="row">분류1</th><th scope="row">분류2</th><th scope="row">분류3</th>
      <th scope="row">분류4</th><th scope="row">분류5</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>내용1</td><td>내용2</td><td>내용3</td><td>내용4</td><td>내용5</td>
    </tr>
    ...
    ...
    ...
    <tr>
      <td>내용1</td><td>내용2</td><td>내용3</td><td>내용4</td><td>내용5</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <td>토탈1</td><td>토탈2</td><td>토탈3</td><td>토탈4</td><td>토탈5</td>
    </tr>
  </tfoot>
</table>

2. CSS

table{border-collapse:collapse;width:1080px; margin:0 auto;overflow:hidden;border:1px solid #ccc;}
table thead{float:left;width:1080px;border-bottom:1px solid #ccc;}
table thead tr{display:table;width:1080px;}

table tbody{float:left;width:1080px;height:100px;overflow-y:auto;overflow-x:hidden;}
table tbody tr{display:table;width:1080px;border-bottom:1px solid #ccc;}
table tbody tr:last-child{border-bottom:none;}

table tbody td{text-align:center;}

float로 thead와 tbody를 밀어버리고, tbody영역을 높이값을 고정값으로 줘서 스크롤 시켜버리는 방법이다.

스타일은 가장 기본스타일을 썻으니, 필요한부분만 수정해서 사용하면 용이할 것 같다.

 

※ 웹표준, 접근성등을 무시한 단순 표현입니다. 실제 코드를 작성할때에는 table caption, th scope 등을 고려해주세요

반응형
반응형
@charset "UTF-8";

/* Mobile Device (가로폭 767px 이하) */
@media all and (max-width:767px) {

}

/* Tablet (가로폭 768px 이상, 1023px 이하) */
@media all and (min-width:768px) and (max-width:1023px) {

/* 브라우저 가로폭이 768~1023px일때 적용될 css (태블릿) */

}

/* PC Desktop (가로폭 1024 이상) */
@media all and (min-width:1024px) {

}

기본적인 미디어쿼리 분기점이다.

반응형 페이지의 경우 좀더 세분화되어 나눠지긴 하지만, 기본적으로 Mobile/Tablet/PC 기준으로

위와같이 나뉜다.

반응형
반응형

흔히들 말하는 offscreen class 혹은 hidden 클래스, caption 숨김처리 등을 실무에서 많이 사용하고 있다.

숨기게 만드는 거야 어렵지 않지만, 접근성을 고려한다면 이게 맞는건지, 제대로 쓰고있는지 모르고 사용하는

경우도 많다.

 

IR기법을 사용하여 숨김처리를 할 때에, 보통 이런 방식을 많이 사용한다.

 

.offscreen{
    position:absolute;
    top:-9999px;
    left:-9999px;
    text-indent:-9999px;
    width:1px;
    height:1px;
}

하지만 위와같은 방법은 접근성에서 문제를 일으킨다.

text-indent의 경우, 앵커태그(<a href="~">)나 html5에서의 대화형 요소들 에서 초점을

document 바깥에서 잡아버리는 문제점이 있다.

 

보이지 않는곳에 초점이 가는것은 접근성에 위반이 되는 문제이기에, 숨김텍스트를 사용하고자 할 때에, 부적합하다.

 

때문에 아래와 같은 방법을 사용한다.

.offscreen{
    position:absolute;
    overflow:hidden;
    border:0;
    width:1px;
    height:1px;
    clip: rect(1px, 1px, 1px, 1px);
    clip-path:inset(50%);
}

스크린리더가 읽어줄 수 있게 최소한의 너비와 높이를 가진다.(0은 읽어주지 않아요..)

clip 속성은 position 값이 absolute나 fixed 일 때만 사용 가능하다.

또한 css2에서 사용되던 속성이기 때문에, 최신버전인 clip-path 도 같이 넣어주었다.

 

하지만 이 또한 컨텐츠의 '부분숨김' 을 할 때에 문제가 있다.

position:absolute는 해당 컨텐츠를 block 속성으로 바꿔버리는 특성이 있다.

 

예를들어

<span>
   테스트입니다<span class="offscreen">숨김처리부분</span>
</span>

위와 같은 코드를 작성 할 때, 스크린리더는 offscreen 된 부분을 block element로 인식하여 읽게 될 것이다.

때문에 inline 요소를 숨김처리 할 때에는 position 값을 걷어내고 display 속성을 조절해 주어야 한다.

.hidden{
    display:inline-block;
    overflow:hidden;
    border:0;
    width:1px;
    height:1px;
    clip: rect(1px, 1px, 1px, 1px);
    clip-path:inset(50%);
}
반응형
반응형

 

퍼블리싱을 하다보면, input의 다양한 타입을 사용하게 된다.

'검색' 버튼을 커스텀 할 때 우리는

 

<input type="search" id="" name="" placeholder="" value="">

위와같이 넣게 되는데, 화면을 확인해 보면 아래 그림처럼 파란색 x버튼이 생기게 된다.

(기본 input은 너무 안이뻐서 x버튼을 제외하고 약간 커스텀을 했습니다.)

 

브라우저 기본 x버튼 노출

브라우저의 x버튼을 없애기 위해, css로 안보이게 처리를 해 주면 된다.

 

input::-ms-clear,
input::-ms-reveal{
	display:none;width:0;height:0;
}
input::-webkit-search-decoration,
input::-webkit-search-cancel-button,
input::-webkit-search-results-button,
input::-webkit-search-results-decoration{
	display:none;
}

 

기본 x버튼을 없애고, 커스텀 x버튼 노출

위 스타일로 default x버튼을 안보이게 처리해주고, x버튼을 커스텀해 넣어준 모습이다.

반응형
반응형

[vendor prefix?]

 

벤더 프리픽스(vendor prefix)란?

css3의 기능은 웹표준이 아니였다. 때문에 어떠한 속성을 주었을 때에, 브라우저마다

원하는 화면을 출력하는데 제한적이다. 벤더 프리픽스는 새로운 기능을 모두 제공해야 할 때

변환 효과를 적용하는 스타일 시트 라고 이해하는게 빠를 수 있다.

 

하지만 현대에 와서는 브라우저의 버전에 올라가면서, 많은 스타일시트의 속성들이

표준으로 정의되면서 vendor prefix를 사용하지 않아도 되지만,

구형 브라우저(하위 브라우저)를 맞춰주기 위해 아직까지도 vendor prefix가 사용된다.

 

[브라우저별 벤더 프리픽스 사용법]

Browser Vendor Prefix
IE or Edge -ms-
Chrome -webkit-
Firefox -moz-
Safari -webkit-
Opera -o-
iOS Safari -webkit-
Android Browser -webkit-
Chrome for Android -webkit-

일일이 prefix를 주기에는 신경쓸 속성이 너무 많다.

무분별한 사용은 브라우저의 성능에도 영향을 주기 때문에, 오픈소스 라이브러리인

Prefix Free 라이브러리를 사용하는것도 하나의 방법이다.

<script src="prefixfree.min.js"></script>

http://leaverou.github.io/prefixfree/ - prefix Free 사이트에서 라이브러리를 다운로드 하고,

html에 include 하지만 하면 벤더프리픽스 없이 모든 css를 사용할 수 있다.

 

https://caniuse.com/- 내가사용할 css가 어느 브라우저까지 지원하는지 확인할 수 있는 사이트다.

자신이 사용할 속성값을 쓰면, 어디까지 지원을 해 주는지 알 수 있다.

 

예를들어 border-radius:10px; 을 사용하려고 하면,

 

.className{
	
    -webkit-border-radius: 10px; /* safari, chrome */	
    -moz-border-radius:10px; /* firefox */
    -o-border-radius:10px; /* opera */
    -ms-border-radius:10px; /* IE */
    border-radius:10px; /* default css */
    
}

위와같이 사용하면 된다.

브라우저마자 자신이 사용할 수 있는 속성을 사용하고, 없을때 마지막에 default인 border-radius를 사용한다.

반응형

+ Recent posts