에 유이 격자 ""AutoGrid - 격자를 적응 만들기를 사용하여 자바 스크립트를
오후에 의해 기독교 Heilmann 4시 39분 2008 년 6 월 25 | 있음 개발 | 8 개의 댓글내가 사랑하는 유이 격자를 . 내 CSS를 알고, 그리고 어떻게 브라우저의 다양한 문제를 해결하기 위해 알아,하지만 나 또한 대단히 수정하고 테스트 및 만들려면 다음과 해결 방법을 반복해서 다시 데 대해 지겨워. 유이 격자 밖의 웹 개발의 모든 경우에 완벽한되지 않을 수도 있지만, 내가하고 실용적인 접근 방식을 데리고 단지 (지금도 제가 디자이너는 아니라고 왜 그런지) 그들과 함께 할 수있는 사이트를 만들 기쁘게 생각합니다.
하나의 문제는 내가 좀 유이 격자 기반의 사이트는 사람들이 내가 특정 화면 해상도 또는 뷰포트 크기를 기다리고 대해 하소연한다는 라이브 넣으면 가져왔다. 유이의 격자도 꽤 높은 해상도에, 바보거나 800 × 600 또는 1024 × 768의 해상도에 최적화할 수 있습니다 백퍼센트 폭 수 있습니다. 언제 최적화 800 픽셀 이상의 해상도에서 사람과 페이지의 길이에 대하여 불평하지 않으며 그들은 800 × 600에서 귀하의 사이드 막대를 보려면 스크롤해야 할 말할 것이다 1,024명에 갈 때. 당신은 이길 수 없습니다.
아니면 수 있습니까? CSS는 동적 아니야 - 그것은 고정된 상태를 가지고 있으며 당신은 오직 브라우저가 IE 용 조건부 댓글이 없습니다 (물론, 그것을주는 것과 옳은 않는다는 것을 희망 수 있지만, 기술적으로 그들이 HTML을하고 있으며, 물론 미디어 검색어가 없습니다 논쟁의 술 CSS3과 다른 케이크에, 그런데하자) IE6가 기지 지원 말한다. 자바 스크립트, 반면에, 매우 동적이며 당신은 밖으로 읽을 수 있고 현재 사용중인 브라우저에서 무슨 일이 일어나고 있는지 확인하고 그것에 반응합니다.
잘 사용할 당신은 유연하고 변화가 필요에 따라 남아 유이 - 그리드 기반의 레이아웃을 만들 수있는 자바 스크립트의 기능을 가지고 있구나. 해야할 일은해야 할 몇 가지 사용하는 것입니다 유이 돔 및 변경 ID와 클래스를 따라 마술.
컨테이너 사업부의 신분증에 의해 정의된 전체 너비의 여러 맛을 들어가도 유이 격자 :
- # 의사 - 750px (800 × 600에 대한 좋은) 중심
- # doc2 - 950px (1024 × 768에 대한 좋은) 중심
- # doc3 - 100 % 유체 (모두에게 좋은)
- # doc4 - 974px 유체 (1024 × 768에 대한 좋은)
- # 의사 - 사용자 정의 - 사용자 정의 너비
기억 여기 것은 하나도이다 doc3 것을 필요 재정을 완전히 유연한 그리드에 대한 이유를 750 픽셀,이의 폭을 최소 :
# doc3 { 분 - 폭 : 0; }
컨테이너 사업부 안에 당신은 컨테이너 사업부에있는 클래스에 의해 정의됩니다 두 블록, 그리고 그들의 폭 및 측면 표시줄의 위치를 가질 수 있습니다 :
- . 유이는 - T1에서 - 두 기둥은 좁고, 160px 왼쪽에
- . 유이는 - t2 - 두 기둥은 좁고, 180px 왼쪽에
- . 유이가 -에서 T3 - 두 기둥은 좁고, 300px 왼쪽에
- . 유이 - t4 - 오른쪽, 180px에 2 열 좁은
- . 유이 - t5 - 오른쪽, 240px에 2 열 좁은
- . 유이 - t6 - 오른쪽, 300px에 2 열 좁은
당신의 유연한 그리드에 대한 계획을 만들고 이들을 함께 할 수 퍼팅 :
- 중 왼쪽 또는 오른쪽 - 사용 가능한 화면 공간보다 큰 950 픽셀, 사용 doc2과 가장 넓은 사이드바 때
- 당신은보다 950 픽셀, 사용 의사와 중간 크기 sidebars있다면
- 당신은 760 픽셀, 사용 doc3 및 가장 작은 sidebars보다 적은 경우
- 당신은 더 적은이있는 경우 - 600 픽셀을 기원합니다 - 귀하의 처분에 게재 메인 컨텐츠로 아래의 사이드 바
이 가능하도록하기 위해서 스크립트는 정말 로켓 과학이 아닙니다. 그것은 할 필요가 모든 격자 설정, 사용할 수있는 브라우저 윈도우의 너비를 읽고 다음에 따라 ID와 클래스를 변경할 수 있습니다.
YAHOO.example.autoGrid = 함수 () { var에 컨테이너 = YAHOO.util.Dom.get ( '의사') | | YAHOO.util.Dom.get ( 'doc2') | | YAHOO.util.Dom.get ( 'doc4') | | YAHOO.util.Dom.get ( 'doc3') | | YAHOO.util.Dom.get ( '의사 - 사용자 정의'); (컨테이너)면 { var에 사이드바 = null을; var에 수업 = container.className; 경우 (classes.match (/ 유이 - t [1-3] | 유이 - 좌 /)) { var에 사이드바 = '왼쪽'; } (classes.match (/ 유이 - t [4-6] | 유이 오른쪽 /)) {면 var에 사이드바 = '권한'; } 함수 switchGrid () { var에 currentWidth = YAHOO.util.Dom.getViewportWidth (); 경우 (currentWidth> 950) { container.id = 'doc2'; (사이드바의 경우) { container.className = 사이드바 === '왼쪽'? '유이 -에서 T3': '유이 - t6'; } } 경우 (currentWidth <950) { container.id = '닥'; (사이드바의 경우) { container.className = 사이드바 === '왼쪽'? '유이 - t2': '유이 - t5'; } } (currentWidth <이 760) {면 container.id = 'doc3'; (사이드바의 경우) { container.className = 사이드바 === '왼쪽'? '유이 - T1에서': '유이 - t4'; } } 경우 (currentWidth <600) { container.id = 'doc3'; container.className = ''; } }; switchGrid (); / * 니콜라스 Zakas에 의해 스로틀 MSIE의 크기를 조정 nasties 해결하는 방법. http://www.nczonline.net/blog/2007/11/30/the_throttle_function * / 함수 스로틀 (방법, 범위) { clearTimeout (method._tId); method._tId = setTimeout (함수 () { method.call (범위); }, 100); }; YAHOO.util.Event.on (창, '크기', 함수 () { (YAHOO.example.autoGrid.switch, 창) 스로틀; }); }; {반환 스위치 : switchGrid }; } ();
오늘은 그만 단계별로 통과합시다 :
YAHOO.example.autoGrid = 함수 () { var에 컨테이너 = YAHOO.util.Dom.get ( '의사') | | YAHOO.util.Dom.get ( 'doc2') | | YAHOO.util.Dom.get ( 'doc4') | | YAHOO.util.Dom.get ( 'doc3') | | YAHOO.util.Dom.get ( '의사 - 사용자 정의'); (컨테이너)면 {
올바른 신분증의 존재를 테스트하여, 현재 문서에서 실제로 유이 바둑 판식있다면 먼저 확인하십시오. 있다면, 우리는 코드의 나머지 부분을 실행합니다.
var에 사이드바 = null을; var에 수업 = container.className; 경우 (classes.match (/ 유이 - t [1-3] | 유이 - 좌 /)) { var에 사이드바 = '왼쪽'; } (classes.match (/ 유이 - t [4-6] | 유이 오른쪽 /)) {면 var에 사이드바 = '권한'; }
우리는 정의 sidebar , null이 아니라 요소의 컨테이너 이름을 검색하는 클래스와 정의된 구조 열 경우가 발생했습니다 확인하십시오. 수업 격자의 유이 이외에도 미리 저희는 또한 정의 yui-left 과 yui-right 여기. 이러한 스타일은하지만 스크립트 기능없이 사이드바가 없다는 스크립트 하나에 충분한 공간이있다는 것을 결정하는 일단 하나를 얻을 수 있습니다.
함수 switchGrid () { var에 currentWidth = YAHOO.util.Dom.getViewportWidth (); 경우 (currentWidth> 950) { container.id = 'doc2'; (사이드바의 경우) { container.className = 사이드바 === '왼쪽'? '유이 -에서 T3': '유이 - t6'; } } 경우 (currentWidth <950) { container.id = '닥'; (사이드바의 경우) { container.className = 사이드바 === '왼쪽'? '유이 - t2': '유이 - t5'; } } (currentWidth <이 760) {면 container.id = 'doc3'; (사이드바의 경우) { container.className = 사이드바 === '왼쪽'? '유이 - T1에서': '유이 - t4'; } } 경우 (currentWidth <600) { container.id = 'doc3'; container.className = ''; } }; switchGrid ();
메소드 switchGrid() 정의된 작업을 우리가하는 일의 전부. 우리는 ID와 클래스를 적용하기위한 여러 가지 경우를 설정하고 그것은 정의의 바로 뒤에 메서드를 호출합니다.
/ * 니콜라스 Zakas에 의해 스로틀 MSIE의 크기를 조정 nasties 해결하는 방법. http://www.nczonline.net/blog/2007/11/30/the_throttle_function * / 함수 스로틀 (방법, 범위) { clearTimeout (method._tId); method._tId = setTimeout (함수 () { method.call (범위); }, 100); }; YAHOO.util.Event.on (창, '크기', 함수 () { (YAHOO.example.autoGrid.switch, 창) 스로틀; });
완전한 유연성을 위해, 우리는 또 다시 수표는 그리드 사양 사용자가 브라우저 크기를 조절되는 이벤트 리스너를 적용합니다. 창 습관에게의 크기를 조정하는 동안 이벤트를 발사 사용자가 크기를 고약으로 인터넷 익스플로러가 있습니다, 우리는 실행을 위해 필요 스로틀 switchGrid() . 이 블로그 Zakas 니콜라스에 대한 설명에 자세히 .
}; {반환 스위치 : switchGrid }; } ();
에서으로 스로틀 public 메서드를 호출하기 위해 필요한 방법 setTimeout() 우리가에 대한 포인터를 반환 switchGrid .
그게 다야. 당신이 영향을 밖으로 시도 할 수 페이지에서 시범 . 당신의 사이드바 크기의 독립적인 정의하면, 당신은이 작은 스크립트와 함께 멋지고 역동적이고 융통성있는 사이트를 만들 수 있습니다.
공유하고 확장할 수 : 즐겨찾기에 추가 del.icio.us으로 | 그것 Digg에! | reddit!
8 개의 댓글
미안 해요, 코멘트 양식이 시간에 문을 닫습니다.



아주 미끄러워 매우 기능적, 아주 멋진 전반.
인가이 사용하는 직교 기법 유이 레이아웃 관리자를 ?
난 유이 사용의 편의 증대 이렇게 깔끔하게 활용할 수있다는 것을 사랑해.
αlexander에 의해 코멘트 - 2008년 6월 25일 #
알렉산더,
레이아웃 관리자를 발표하고 중첩된 컨텐트 관리 프레임을 훨씬 더 강력하고, 응용 프로그램 스타일의 접근 방법이지만 나를 위해, 이것은 격자에 가벼운 외에처럼 보입니다. 레이아웃 관리자에서 창은 hideable / 크기 조정이고, 당신이 그들을 레이아웃 ... 많은 다른 시스템과 접근법 내에서 무슨 일이 일어나고 있는지에 따라 컨트롤에 대한 풍부한 JS API를 노출.
감사합니다
에릭
에 의해 댓글 에릭 Miraglia - 2008년 6월 25일 #
흥미 롭 군. 난 그것보다 밀접하지만 CSS를 3 미디어 쿼리를 닮은보고 싶을 것입니다. 를 위해서 생각에 익숙해지.
윌코에 의해 코멘트 - 2008년 6월 26일 #
난 알렉산더, 유이가 정상적으로 사용의 편의 증대 수 있도록 당신과 함께 동의합니다.
펠리페
유이 블로그 (포르투갈어) - http://www.yuiblog.com.br
에 의해 댓글 펠리페 Lunardi Farias - 2008년 6월 26일 #
[...] 자신의 기독교 Heilmann 영리 크기 조정 가능하도록하기 위해서 유이 격자를 기본 CSS의 도서관 결혼하는 새로운 자바 스크립트 라이브러리 Autogrid를 만들었습니다 : 나는 유이 격자 사랑 해요. 난 [...]
에 의해 Pingback는 Ajaxian»유이 Autogrid : 올바르게 그리드의 크기를 조정 - 2008년 6월 26일 #
유이 격자의 문제를 해결하려면 [...] 특정 해상도에 최적화되고, 내가 이전에 이곳 블로그 autogrids 속임수를 사용했습니다. [...]
에 의해 Pingback Autogrid 최소»야후 사용자 인터페이스 블로그 유이 유이 격자 기반의 워드 프레스 테마 - - 2008년 7월 2일 #
포인터가 페이지에이 코드에 대한 귀하의
switchGrid단어 사용 예약switch하지 않는 반면, 페이지 예제. 약간 처음에는 혼란을 만들었고 난 그것이 로컬로 작동하게하려고했던 몇 가지 오류를 일으켰습니다.이 페이지를
데모 페이지
Plumlee 스콧 댓글 작성 - 2008년 11월 18일 #
[...]를 사용하여이 나는 모든 브라우저의 크기에 대한 완벽한 유이 격자를 표시하는 스크립트를 작성할 수 있습니다. [...]
에 의해 Pingback가 올 때까지 난 기다려! »블로그 아카이브»프레 젠 테이션 : 전문 웹 개발 도구 - 2009년 5월 31일 #