Category Archives: hack

CSS Hack code

windows firefox3 1px 버그

플래시를 페이지에 보여주기 위해 javascript를 이용하거나 object나 embed태그를 이용해서 표현을 한다.
그러나 z-index 때문에 혹은 다른 개발 사정으로 인해 iframe을 이용해서 표현 할 경우가 있는데 이럴때 firefox3에서는 일부 경우에 따라 플래시 좌측 1px을 표현하지 못하는 버그가 발생한다.
이 버그의 공통된 원인은 플래시를 감싸는 박스가 margin:0 auto;의 속성으로 가운데 정렬이 된 경우 발생하며, 박스의 width 값이 홀 수이거나 짝수 일 경우 발생하게 된다.
여기서 width값이 홀 수 이거나 짝수일 경우라는 것은 브라우저의 세로 스크롤 때문이다.(어쩌면 브라우저의 가로사이즈가 홀수이냐 짝수이냐의 문제일 수도 있다.)
감싸는 박스란 플래시에서 바깥의 어떤 박스든 플래시가 포함되어 있다면 어느 박스이던지 해당되며, 플래시와 가장 가까운 박스가 플래시에게 최종적인 영향을 가할 수 있다.
말이 어렵다면 그림으로 다시 확인 해 보자.
플래시 박스 예제1

위 그림을 보면 D를 제외한 A,B,C,F 박스에 어떤 박스이던지 margin:0 auto; 속성이 들어갈 경우 발생하게 된다.
문제는 박스의 가로 사이즈가 홀수, 짝수 모두 발생할 수 있기 때문인데 스크롤이 항상 있는 경우라면 가로 사이즈는 홀 수로 설정되어야 하고 스크롤이 항상 없는 경우라면 짝수로 설정되어도 된다.
하지만 이럴 경우는 거의 없다. 그리고 window XP의 테마가 고전이냐 XP테마 이냐에 따라서도 홀수, 짝수 기준이 달라지고 브라우저의 전체 가로사이즈가 홀수 이냐 짝수 이냐에 따라서도 달라지게 된다.

이 문제를 해결하기 위해서 현재까지 해결 방법으로는 플래시의 wmode를 window로 설정하는 것이 유일한 대안이지만 wmode의 window는 기본값이고 성능이 가장 좋다고는 하지만 플래시위에 레이어를 띄울 수도 없고, 아래쪽의 배경이나 요소가 보여지지도 않기 때문에 상황에 따라서는 해결방법으로 적합하지 않을 수 도 있다.

지금까지 왠만한 가운데 정렬되는 사이트에서 사용중인 iframe을 이용한 플래시가 눈으로 봤을 때 1px이 보이지 않는 불편함이 느껴지지 않았다고 생각되어, 특별한 경우가 아니라면 수정하지 않아도 문제는 없겠지만 분명한 것은 Firefox3 브라우저의 버그이기 때문에 이후 버전에서나 현재 버전 업데이트를 통해 수정 되었으면 하는 바람이다.

webkit계열 브라우저의 입력폼 outline, resize제어

미투데이 서비스는 글쓰기를 개편하면서 처음 글을 쓰려는 사용자의 사용성을 더 편하게 하고, 접근성을 높이기 위해 노력중이다.
개선사항 중 입력폼의 비쥬얼 적이면서도 실용도를 높일 수 있는 기능들을 탑제하다 보니 작게 만들어 놓거나 기능이 사용되고 실체는 드러나지 않게 배경색 위에 위장해 놓은 부분이 Webkit 계열(safari, chrome)브라우저 에서는 포커스가 위치하면서 실체가 들어나 버리게 된다…
(이런 테두리의 압박이…)

outline 예제

그래서 뭔가 저런 시스템 적인 기본기능처럼 보이지만 없앨 방법이 있지 않나해서 찾아보니 이런 경우엔 css2 스팩에도 있지만 IE에서는 지원하고 있지 않는 속성인 outline 속성으로 간단히 없앨 수 있었다.
코드는 아래와 같다.

textarea, input {
outline-color:-moz-use-text-color; outline-style:none; outline-width:medium;
}

참고로 위 속성을 사용하면 outline 속성이 firefox 에서도 적용되기 때문에 outline-color:-moz-use-text-color; 속성으로 색상을 지정해 줘야 한다.

그리고 추가로 사파리나 크롬에서 textarea 의 사이즈를 사용자가 마음대로 조절할 수 있는데 만약 이 기능을 막으려면 아래 코드를 넣어 간단히 제어할 수 있다.

textarea {
resize:none;
}

입력 폼 컨트롤러에 대한 제어는 일부 사용자의 입장에서는 다소 민감한 부분일 수 있다. 어떤 곳에서는 오히려 좋은 기능이 될 수 있으니 서비스에 맞게 사용하면 좋을 것 같다.

Ie8 css Extension?

MS에서 IE8 부터 적용이 가능한 css extension을 제공한다고 한다.
ie css Extension
http://blogs.msdn.com/ie/archive/2008/09/08/microsoft-css-vendor-extensions.aspx
기존 속성에 -ms- 를 붙여서 사용하면 되며 내용과 적용되는 예시속성이 있는데…
내용을 살펴보면 세가지 사항에 대해 -ms-를 붙여 사용할 수 있다고 한다.

  • CSS 스팩에 정의되어 있지 않은 MS 확장 속성일 경우
  • CSS 스팩에 정의되어 있지만 W3C에서 아직 권고후보 상태인 경우
  • CSS 스팩에 정의되어 있는 속성

대략 이런 속성에는 적용해서 사용 할 수 있다는데 쉽게 말하면 IE전용 속성이나 css속성중에 IE가 인식하는 css 범위에서는 모두 사용이 가능하다는 이야기 아닌가? 이걸 보면 사실상 IE8 전용 css hack 이라고 말하는 편이 나을것 같다..
아무튼 filter 속성의 opacity값 문제로 찬명님과 블로그댓글 채팅(?)ㅋ 중에 몇 가지 안 사실은 -ms-로 설정할 경우 속성값은 따옴표(“”) 로 감싸줘야 한다는 것이다.
예를들면..
opacity속성을 사용해서 투명도를 조절할 경우 크로스브라우저를 위한 코드여야 한다면 앞으로는 이런 코드가 되어야 한다.


#selector {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
opacity: .5;
}

또는


#selector {
-ms-filter:"alpha(Opacity=50)";
filter:alpha(Opacity=50);
opacity: .5;
}

이렇게 해야 한다.

좀 의문인건 filter 속성경우 -ms-를 붙여서 사용해야만 IE8에서 실행되는데
IE전용 속성인 scrollbar- 속성 경우는 -ms-를 붙이지 않아도 된다.
아직 beta단계라서 그런건지.. ie속성을 ie에게 배신당한 기분은 나만 느끼는건가.. -_-;