http://stackoverflow.com/questions/8554043/what-is-clearfix
그동안 계속 <div class="clearfix"></div> 같은 군더더기를 모든 셀에 반복시켜서 썼는데, 역시 사람은 머리를 써야했어.
http://stackoverflow.com/questions/8554043/what-is-clearfix
그동안 계속 <div class="clearfix"></div> 같은 군더더기를 모든 셀에 반복시켜서 썼는데, 역시 사람은 머리를 써야했어.
▲ 이런 느낌?
내가 rhino 3d 로 작업을 했다면, 아마 n 시간을 들인 만큼 처음부터 n 시간을 투입해야 하겠지만, pro-e 나 solidworks 를 썼으면 (그리고 관계적 디자인을 매우 잘 설계했다면) 수치하나만 조절하면 모든 형상들이 re-generated 된다.
css작업도 마찬가지다. 워낙에 사용자가 마주할 환경이 다이나믹 한 것이 웹이다보니, 그 예측못할 수 많은 상황에 responsive 하게 디자인되려면, 이런 관계적 설계를 디자인에 많이 도입해야 한다. 가령 화면은 가로폭이 1024px이 될 수도, 700px 이 될 수도 있기 때문에, 어떠한 상황에서도 이상하게 보이지 않을만큼의 flexibility 가 요구된다. 글상자의 폭을 무작정 700px로 맞춰놓아버리면 이런 상황에 대처하기가 어렵다. 여백이 남거나, 화면이 잘리게 된다.
그러니 화면폭에 맞추어서 몇% 수준으로 설정한다던지, 폭을 꽉 채운 상태로 가장자리로부터 얼마간의 padding 을 준다는 식의 관계적 설계를 해놓는것이다. 이렇게 하면 글상자의 크기는 언제나 화면에 종속되게 되므로, 내가 원하는 모양새를 유지하기가 쉽다.
마지막으로 이게 재미있는 이유는 내가 좋아하는 'high-effectiveness'를 추구할 수 있기 때문이다. 다만 몇 kb의 용량을 줄이려고 이미지 사용이 꺼려지는 웹디자인에서 css는 축복이다. 글자 몇 줄이면 몇 kb에 달하는 그라데이션도 해결할 수 있고, animation 도 가능하다. 물론 이걸 다 rendering해주는 브라우저가 있으니 감사한 일이지만, 디자이너는 이미지 용량 줄인다고 고생 안 해서 좋고, 또 아무리 확대를 해도 깨지지 않을 robust한 visual 을 가지게 되니 좋다. 애니메이션 만든다고 플래시 삽질을 안 해서 좋고, 다 만들어놓고 수정한다고 그래픽 툴 버벅대며 열 필요도 없다. 결국 시간을 버는 셈이다.
물론, 이 작업이 가지는 여러 어려움들이 여전히 산재해 있는 것은 사실이고, 개선의 여지도 무지하게 많다는 것을 인정하지만.
결국 디자인이 logos(말)로 다 가능하다는 것이, 조금씩이나마 증명되는 것 아닌가 하는 생각이 든다.
웹을 떠난 지 한참 있다가 근 10년 만에 돌아왔더니, CSS가 눈부시게 발전해버렸다.
어제는 미로니에 들어갈 버튼 하나를 디자인하면서, 포토샵에서 만든 이미지를 끼워 맞춰보다가, CSS3를 심층적으로 탐구하게 되었는데, 오… 이 것이 물건이로세.
아무튼, 그 결과는 아래와 같다.
위 이미지는 온전히 <div>에 CSS3로 스타일만 먹여서 만든 버튼이다. 이미지 파일은 1px 도 들어가지 않았으며, 그라데이션부터 외곽선, drop shadow 와 inner shadow, inner glow 모두를 CSS로만 완성한 것이다. 굳이 캡쳐를 한 것은 이 코드가 일부 브라우저(아마도 IE)에서는 위와 같이 렌더링 되지 않을 수도 있기 때문. 실제 코드로 만든 <div>는 아래와 같다.
1. 같은 스타일의 (대량의) 버튼들을 코드 한 두줄로 색이나 shadow 등을 바꿀 수 있어 효율적
2. vector 이미지와 같이 사용자 브라우저의 확대 축소에 전혀 문제가 되지 않는다.
3. 비트맵 이미지보다 훨씬 적은 용량으로 버튼 이미지 구현 가능
그럼 각 단계별로 포토샵 effect 와 CSS 가 어떻게 같은 역할을 하는지 살펴보자.
1. Rounded Box
포토샵에서는 아예 처음부터 박스의 round 값을 정하고 들어가야 해서, 나중에 고치기가 애매한 부분인데, CSS에서는 이마저도 얼마든지 조정 가능하다. <div> 의 외곽을 얼마나 round 처리하는지를 정한다.
border-radius:10px;
2. Gradient Overay
각 브라우저마다 그라데이션은 명령어가 다르다. 해서, 세 줄 다 써놓아야 한다.
<!-- chrome, safari -->
background:-webkit-gradient( linear, left top, left bottom, color-stop(0, #a6cd2f), color-stop(1, #6e9102) );
<!-- mozilla -->
background:-moz-linear-gradient(top, #a6cd2f, #6e9102);
<!-- IE -->
filter: progid:DXImageTransform.Microsoft.Gradient(StartColorStr='#a6cd2f', EndColorStr='#6e9102', GradientType=0);
3. Stroke
포토샵의 stroke는 <div> 의 border 에 해당한다. 해서, 이 border 에 아래와 같은 효과들을 주면 됨.
border-style: solid;
border-width: 1px;
border-color: #555;
(이거 다 합쳐서 한 줄로도 쓸 수 있다. border: 1px solid #555; )
4. Inner Shadow
여기서 포토샵보다 CSS가 더 좋은 한 가지는 multiple shadow 가 적용 가능하다는 점. 포토샵에서는 외곽 번짐효과라고 볼 수 있는 네 가지 - drop shadow, outer glow, inner glow, inner shadow 외에는 추가로 쓸 수 있는 shadow 가 없지만, CSS에서는 무한정 추가 가능하다.
사실상 outer glow 나 inner glow 도 distance 0 인 shadow와 마찬가지이기 때문에, shadow 라는 개념 하나만으로도 이 모든 효과를 표현할 수 있다.
box-shadow:inset 0px 2px 0px rgba(255, 255, 255, .75)
box-shadow:inset 0px 2px 0px rgba(255, 255, 255, .75), inset 0px 0px 2px rgba(255, 255, 255, .75);
box-shadow: inset 0px 2px 0px rgba(255, 255, 255, .75), inset 0px 0px 2px rgba(255, 255, 255, .7), 0px 3px 3px rgba(0,0,0, .3);