반응형

디자이너에게 시안을 받다보면, 생긴건 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 기준으로

위와같이 나뉜다.

반응형
반응형

box-sizing 속성은 해당 컨텐츠의 크기의 기준을 어떤것으로 잡을것인지

정하는 속성이다.

 

[box-sizing의 값]

 

1. box-sizing: content-box (default, 콘텐트 영역을 기준으로 크기를 정한다.)

box-sizing: content-box

width:500px, height:100px를 주고 padding:20px를 주었을 때, padding값을 포함하여

width:540px, height:140px이 된다.

 

2. box-sizing: border-box (테두리를 기준으로 크기를 정한다.)

box-sizing: border-box

테두리를 포함한 크기를 지정하는 border-box는, 여백을 포함하여 크기를 정하게 된다.

border:1px solid #colorCode 와 같은 border나, padding값을 포함하여 크기를 정할 때 유용하게 쓰인다.

 

3. box-sizing: initial (기본값으로 설정한다.)

 

4. box-sizing: inherit (부모의 속성값을 따라간다.)

 

[브라우저 지원]

  • Chrome : 10.0+ (4.0 -webkit-)
  • Firefox : 29.0+ (2.0 -moz-)
  • Internet Explorer : 8.0+
  • Opera : 9.5+
  • Safari : 5.1+ (3.2 -webkit-)
반응형

'CSS > CSS 이론 및 기본' 카테고리의 다른 글

[css] reset.css  (0) 2019.11.24
[CSS] CSS 선택자(selector)  (0) 2018.04.24
[CSS] CSS란 무엇인가?  (0) 2018.04.06
반응형

흔히들 말하는 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를 사용한다.

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

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
    margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline;
}

/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
    display: block;
}
body {
    line-height: 1;
}
ol, ul {
    list-style: none;
}
blockquote, q {
    quotes: none;
}
blockquote:before, blockquote:after, q:before, q:after {
    content: ''; content: none;
}
table {
    border-collapse: collapse; border-spacing: 0;
}

 

@출처 : https://meyerweb.com/eric/tools/css/reset/index.html

 

CSS Tools: Reset CSS

CSS Tools: Reset CSS The goal of a reset stylesheet is to reduce browser inconsistencies in things like default line heights, margins and font sizes of headings, and so on. The general reasoning behind this was discussed in a May 2007 post, if you're inter

meyerweb.com

스타일시트 재설정을 하는 이유는 브라우저가 가지고 있는 기본적인 줄 높이, 여백 및

폰트크기와 설정등을 '초기화' 하는 것에 목표가 있다.

 

해당 링크의 내용에 따르면, 위 reset.css는 가장 노멀한 reset.css이다.

자신이 필요한 부분을 추가로 설정할 수 있고, 마음껏 커스터마이징 하여 브라우저의 특성을

초기화 하는것이 좋다.

 

예를들어 링크에 대한 설정과 색상 등을 추가해서 사용하면 편리하다. 

 

** 해당 reset.css는 2011년 1월 26일날 개정된 스타일이다.

반응형

'CSS > CSS 이론 및 기본' 카테고리의 다른 글

[css 이론 및 기본] box-sizing  (0) 2019.12.26
[CSS] CSS 선택자(selector)  (0) 2018.04.24
[CSS] CSS란 무엇인가?  (0) 2018.04.06
반응형

CSS 선택자? - Cascading Style Sheets Selector


CSS란 무엇인가?


css는 documents가 사용자에게 화면을 어떻게 보여질까를 기술하는 언어이다.

오늘날 웹표준 에서는 구조와 표현, 행위를 각각 분리해서 개발 하기를 권유한다.


구조 : 웹 컨텐츠에 의미를 부여한  마크업 소스 (HTML)

표현 : 마크업에 대한 시각적인 디자인을 표현 (CSS)

행위 : 브라우저의 상호작용과 동적인 표현을 담당 (JavaScript)


이전 포스팅 [CSS] CSS란 무엇인가? 를 참고하면, 내부 스타일 시트에서

style 태그로 기술하기 보다는, 외부 스타일 시트로 분리해서 사용하는 것이 각 구조화된 마크업에 따라

다양한 디자인을 할 수 있고, 가독성과 유지보수 측면에서 더 효율적이다.



CSS 선택자(Selector)?


선택자(Selector)란 말 그대로 원하는 element(태그)를 선택해주는 요소이다.

기본적인 css의 구성인 Rule Set은 다음과 같다.

selector{property:value}

selector - 선택자. {} 선언블록 이전의 element를 선택, 선언블록 안에 있는 내용을 선택자로 설정한 element에 적용.


{} - 선언블록. property(속성)와 value(값) 으로 이루어진 스타일 정의를 묶어놓음.


property - 해당 element에서 줄 속성을 지정. 공통속성과 element에서 지원하는 속성을 사용할 수 있다.


value - 해당 property에서 사용할 수 있는 값들을 지정함.


CSS 선택자의 종류


전체선택자

*{margin:0; padding:0}

전체 선택자는 html에서 모든 element(태그)에 같은 css 속성을 적용한다.

보통 어떠한 값을 초기화 할 때 사용하는데, 쓰기에는 간편하지만 모든 요소를 읽어내야 하기 때문에

로딩속도가 느려질 수 있다. 이를 방지하기 위해 초기화 css가 존재한다.

일반적으로 reset.css 혹인 Nomalize.css 등을 사용한다.


reset.css 참고 (http://heeya7.tistory.com/6)

Nomalize.css 참고 (http://heeya7.tistory.com/5)




태그선택자

div{margin:0; padding:0}

태그 선택자는 html 요소를 직접적으로 기술하는 선택자다.

element의 tab name을 직접 쓰는 방식으로, 문서 내의 모든 div가 적용되는 위험성이 있으므로

복합선택자 등을 활용하여 써야 한다.




클래스 선택자

/* css */

.className{margin:0; padding:0}

div.className2{color:red}


<!-- html -->

<div class="className className2">클래스 선택자 사용법</div>

클래스 선택자는 위와같이 element에서 class="propertyName" 형식으로 기술된 element를 찾아 스타일을 지정한다.

위의 예시를 보면 .className으로 className이라는 클래스명을 가진 div를 찾아, 스타일을 지정하였다.

그 아래 div.className2 라고 기술된 것은 'div태그중' className2라는 클래스명을 찾아 스타일을 지정한다.

이는 <p class="className2">스타일</p> 와 같은 코드에는 div가 아니기 때문에 적용되지 않는다.




아이디 선택자

/* css */

#idName{margin:0; padding:0}

div#idName{margin:0; padding:0}


<!-- html -->

<div id="idName">아이디 선택자 사용법</div>

아이디 선택자는 .className이 아닌 #을 붙인 #idName 으로 사용된다.

아이디 선택자를 사용할 때 주의할 점은, '단 한번만 유일하게 적용되는 value' 라는 것이다.

이는 html 문서에서 특정 id속성값은 오직 하나만 있어야 한다는 뜻이다.


id선택자는 웹 문서 내에서 요소의 배치 방법을 지정할 때 자주 사용된다.




복합 선택자

/* css */


.grand .parent{color:red}    //적용 가능

.grand .child{color:blue}    //적용 가능


.grand>.parant{font-weight:bold} //적용 가능

.grand>.child{font-weight:bold} //적용 불가능(child는 grand의 직계자식이 아님)


div+p{background:#c8c8c8;} //div태그의 직계자식중 p태그만 스타일 지정

div~p{color:green} //div와 형제관계(같은레벨)의 모든 p태그에 스타일 지정


/* html */


<div class="grand">

<p class="parant">부모태그</p>

<span class="child">자식태그</span>

</div>


<p>div.grand와 형제노드</p> // grand div와 형제레벨의 노드


<p>단락</p>


<span>텍스트</span>


<p>단락2</p>

E F{property:value} // E의 하위요소 F선택

E의 하위요소(자식, 자손 모두 포함) 중에서 F의 명칭을 가진 element를 선택한다.


E>F{property:value} // E의 직계자식 F선택

E의 바로아래요소(직계자식)인 element를 선택한다.


E+F{property:value} // E요소의 바로뒤 오는 직계자식 F선택

E요소의 바로 뒤에있는 직계자식 F만 선택한다. 두번째 F는 선택되지 않는다.


E~F{property:value} // E요소의 형제레벨의 모든 F선택

E요소와 같은 레벨의 모든 F태그를 선택한다.




속성선택자


속성선택자는 태그 안의 속성에 따라 스타일을 지정하는 선택자 방식이다.

값의 조건에 따라 다양한 스타일을 지정할 수 있기 때문에 활용도가 높다.

<input type="text" value="check01" class="default red">

<input type="text" value="check02" class="default blue">

<input type="text" value="check03" class="default red">

<input type="text" value="check04" class="check red">

<input type="text" value="check05" class="check-test">



/* text 형식의 input태그 선택 */

input[type="text"]{width:200px; padding:5px}


/* red 클래스를 포함한 input태그 선택 */

input[class~="red"]{border:1px solid red}


/* check로 시작하는 class명을 가진 input 선택 */

input[class^="check"]{color:green}


/* blue로 끝나는 class명을 가진 input 선택 */

input[class$="blue"]{border:1px solid blue}


/* check라는 값이 포함된 value를 가진 input 선택 */

input[value*="check"]{text-align:right}


/* check로 시작하거나, check를 class명으로 포함하는 input 선택 */

input[class|="check"]{color:red}


E[attr] - 'attr' 속성이 포함된 E태그 선택


E[attr="val"] - 'attr' 속성의 값이 "val"과 일치하는 E태그 선택


E[attr~=“val”] - ‘attr’ 속성의 값에 “val” 포함되는 E태그 선택


E[attr^=“val”] - ‘attr’ 속성의 값이 “val” 시작하는 E태그 선택


E[attr$=“val”] - ‘attr’ 속성의 값이 “val” 끝나는 E태그 선택


E[attr*=“val”] - ‘attr’ 속성의 값에 “val”’ 포함되는  E태그 선택


E[attr|=“val”] - ‘attr’ 속성의 값이 정확하게 “val” 이거나 “val~” 시작되는 E태그 선택




반응형

'CSS > CSS 이론 및 기본' 카테고리의 다른 글

[css 이론 및 기본] box-sizing  (0) 2019.12.26
[css] reset.css  (0) 2019.11.24
[CSS] CSS란 무엇인가?  (0) 2018.04.06

+ Recent posts