동적으로 삽입된 CSS 배경 이미지 가운데 정렬하기

요즘 바빠서 블로그 참 잘 안하는데… 일단 요 몇일 겪은 일들을 중심으로 간단히 메모라도 해야겠다.

배경 이미지 중앙정렬

보통 CSS를 이용해 배경 이미지를 중앙 정렬하고 싶을 경우 아래와 같이 많이 사용한다.

div{
    background: url('/imgurl') no-repeat;
    background-position: center;
}

사실 위와 같은 코드는 아래와 같이 한줄로 축약할수도 있다.

div{
    background: url('/imgurl') no-repeat center;
}

동적으로 배경 이미지 추가

그럼 이제 JS코드를 이용해 동적으로 이미지를 추가해보자.

var images = [10장의 이미지URL이 셋팅되어 있다고 가정];
var slides = $('.slide'); // .slide로 지정된 클래스도 이미지 갯수 만큼 있다고 가정. 
images.forEach(function(image, i){       
   slides[i].css({'background': 'url(' + image + ')'});
});

뭐 대충 위와 같이 간단하게 backgrund 속성에 url로 이미지를 추가할지도 모르겠다. 하지만 여기서 주의할점은 위와 같이 축약형 backgrund 속성을 사용하게 되면 기존에 풀어서 쓴 background-postion 속성을 덮어버리게 된다. 왜냐면 동적으로 삽입되는 녀석은 inline 스타일로 가장 우선순위가 높기 때문이다. 따라서 위와 같이 쓰면 가운데 정렬이 아닌 좌상단을 기준으로 정렬될 것이다.

문제 상황 바로 잡기

그래서 inline으로 스타일을 삽입할때는 항상 주의해야한다. 특히 축약형을 쓸때는 더더욱 주의하자. 위의 문제를 해결할때는 간단히 축약형이 아닌 일반 속성을 사용한다.

slides[i].css({'background-image': 'url(' + image + ')'});

IE6 CSS 버그 고치기 귀찮을때…

오늘 또 열씨미 CSS를 만지다가 이런 경우가 발생했다…
항상 FireFox 기준으로 디버깅을 하기때문에..

FireFox에서는 잘 나오는데… IE6 에서 특정 CSS 한줄이 제대로 안나오는 것이다..ㅎㅎ

TAB 브라이징 을 위한 탭을 만들고 있는중인데…

#tab
{
    float: left;
    display:inline;
    width: 70%;
    margin-left: 1%;
    padding: 0 0 20px 0px;
    height: 0px;
}

바로 저 패딩부분에서 문제가 생겼다.. float Layout 이기때문에 항상 문제가 생기는거 같다..-
여튼 저 한줄 패딩부분을 !important; padding: 0 0 0px 0px;
!important 를 주면,.. 즉,..
#tab
{
    float: left;
    display:inline;
    width: 70%;
    margin-left: 1%;
    padding: 0 0 20px 0px !important; padding: 0 0 0px 0px;
    height: 0px;
}

요렇게 적어주시면.. 내가 원하는 대로 나온다..

그런데,!!! 아주 중요한거.. 버그를 정말 고칠려고 맘먹고 하나하나 하다 보면…
#tab
{
    float: left;
    display:inline;
    width: 70%;
    margin-left: 1%;
    padding: 0 0 0px 0px;
    height: 0px;
}

걍 요렇게 해도 된다.. ㅋㅋㅋ

참고로 float 레이아웃에서 저 Height 는 IE6에서는 안 먹는거 같다.. –– 왜지???

왠지 삽질한 기분….
CSS 트릭 관련 링크