WordPress 페이지 하단에 바닥글을 첨부합니다. CSS를 사용하여 웹페이지 하단에 바닥글을 고정하는 방법은 무엇입니까? 스페이서를 삽입하고 Internet Explorer와 싸웁니다




  • 지도 시간

완벽하게 디자인된 웹사이트 페이지에 익숙한 모든 사람은 페이지 바닥글 하단에 뭔가가 "붙어 있는"(끈적한) 모양을 선호합니다. 그러나 인터넷에는 두 가지 문제가 있습니다. 입력 필드가 아래로 자라지 않는 것과 바닥글이 창 하단에 고정되지 않는 것입니다. 예를 들어, 높이가 짧은 페이지를 열면 보기 창 하단에 있도록 의도된 정보가 콘텐츠에 달라붙어 중간이나 심지어 상단에 위치한다는 사실이 즉시 눈에 띕니다. 창, 바닥이 비어 있을 때.

따라서 .
초보 레이아웃 디자이너를 위한 이 가이드에서는 45분 안에 "정확한" 바닥글을 만들고 Habr과 같은 존경받는 출판물의 단점을 수정하고 유망한 프로젝트 실행 품질에서 경쟁할 수 있는 방법을 보여줍니다.

네트워크에서 가져온 한 가지 유형의 고정 바닥글 구현을 살펴보고 무슨 일이 일어나고 있는지 이해해 보겠습니다. css-tricks.com/snippets/css/sticky-footer
CSS:
* ( 여백:0; 패딩:0; ) html, body, #wrap ( 높이: 100%; ) body > #wrap (높이: 자동; 최소 높이: 100%;) #main ( 패딩 바닥: 150px; ) /* 바닥글과 높이가 같아야 합니다 */ #footer ( position:relative; margin-top: -150px; /* 바닥글 높이의 음수 값 */ height: 150px;clear:both;) /* 수정 사항 지우기* / .clearfix:after (content: "."; 디스플레이: 블록; 높이: 0; 클리어: 둘 다; 가시성: 숨김;) .clearfix (디스플레이: inline-block;) /* IE-mac에서 숨김 \*/ * html .clearfix (height: 1%;).clearfix (display: block;) /* IE-mac에서 숨기기 종료 */
HTML:

CSS를 아는 사람이라도 모든 사람이 이 코드를 보고 원리를 이해하고 자신있게 복잡한 프로젝트를 편집할 가능성은 거의 없습니다. 옆으로 나아가면 부작용이 발생합니다. 아래 바닥글에 대한 논의와 구성은 CSS 규칙에 대한 더 많은 이해를 제공하기 위한 것입니다.

이론부터 시작해보자

고정된 바닥글의 일반적인 구현은 요소가 해당 요소의 직계 자식이라는 고유한 CSS2 속성에 의존합니다. - 백분율 높이 유지( 높이:100%또는 다른 것) 창을 기준으로, 모든 부모의 높이가 태그부터 시작하여 동일한 백분율 높이를 갖는 경우 HTML. 이전에는 문서 유형이 없었지만 이제 Quirks 모드에서는 요소의 백분율 높이가 모든 수준에서 지원되고 최신 문서 유형에서는 백분율로 정의된 요소 내에서만 지원됩니다. 따라서 콘텐츠 블록을 만들면(이를 #공들여 나열한 것) 높이가 100%이면 창인 것처럼 스크롤됩니다. 바닥글과 헤더를 제외한 모든(스트리밍) 콘텐츠가 여기에 배치됩니다.

바닥글은 이 블록 뒤에 배치되며 높이는 0픽셀로 지정됩니다. 일반적으로 다음을 수행할 수 있습니다. #공들여 나열한 것원하는 만큼 많은 블록을 배치하되 모두 높이가 0픽셀이거나 문서 흐름 외부에 있어야 합니다. 위치: 정적). 그리고 일반적으로 사용되는 또 다른 중요한 트릭이 있습니다. 높이를 0으로 만들 필요는 없습니다. 높이를 고정할 수 있지만 속성을 사용하여 메인 블록에서 높이를 뺍니다. margin-bottom: -(높이);.

인간의 관점에서 스타일은 하단에 바닥글이 삽입되는 빈 "주머니"를 만들고 항상 창의 하단 테두리나 문서의 하단 테두리에 고정됩니다. 문서가 창 높이보다 큽니다. 인터넷에는 다양한 바닥글 구현이 있으며 모든 브라우저에서 성공 정도가 다릅니다. Habr의 레이아웃을 "일꾼"으로 사용하여 계속해서 직접 구축해 보겠습니다.

왜냐하면 블록의 바닥이 #공들여 나열한 것- 이것은 포켓입니다. 바닥글의 경우 페이지 개체를 표시하지 않고 비어 있어야 합니다. 그리고 여기서 우리는 또 다른 한계에 직면하게 됩니다. 즉, 비용을 희생하면서 빈 주머니를 만들 수는 없습니다. V #공들여 나열한 것, 그러면 100% 이상이 되기 때문입니다. 그것도 당신을 구하지 못할 거예요 여유- 공백은 중첩된 요소의 속성을 사용하여 생성되어야 합니다. 또한, 예를 들어 블록에 의해 수행되는 플로팅 요소가 블록 경계 아래로 크롤링되지 않도록 해야 합니다.

, 어디 .clear(지우기:둘 다). 이 " "는 동일한 상대 단위로 고정되었거나 페이지 변경 중에 계산됩니다. 일반적으로 이 정렬 블록을 필요한 높이로 설정하는 것과 결합하는 것이 편리합니다.

테스트 대상의 페이지 구조를 살펴보겠습니다. 가장 쉬운 방법은 Chrome에서 Firebug 창이나 유사한 창(개발자 도구(Ctrl-F12))을 여는 것입니다.

...상위 광고 블록...

실제 예제로 넘어 갑시다

어떤 것이 보이나요? 레이아웃 결함고정된 바닥글 효과를 구현하는 측면에서? 우리는 그것을 본다
1) 사이트의 바닥글은 높이 백분율이 없는 id=layout 블록 내부에 있습니다. 이론에 따르면 그와 부모, 그리고 block.content-left 콘텐츠는 높이를 100%로 설정해야 합니다. 후자에서는 문제가 발생합니다. 이에 적합하지 않습니다. 결과적으로 하나의 중간층 블록이 누락되었거나 바닥글이 올바른 수준에 있지 않습니다. 게다가,
2) 바닥글의 높이는 가변적입니다(목록의 요소 수와 글꼴 크기에 따라 HTML이 아닌 CSS에서 볼 수 있음). 그리고
3) ~ 위에 #공들여 나열한 것고정 높이 90px의 광고 블록이 있습니다.
4) 바닥글이나 (일반적으로 말하면) 블록에 정렬 ​​블록이 없습니다. #공들여 나열한 것(예, 하지만 블록 위에 .rotated_posts; 그러나 아마도 바닥글로 분류되어야 할 것입니다).

포인트 4 - 스크립트로 그려야 합니다.
#layout(margin-top:-90px;) 을 추가하면 세 번째 요점을 처리하는 것이 쉬워 보일 것입니다. 그러나 이 블록은 존재하지 않을 수도 있다는 점을 기억하십시오. 배너 절단으로 인해 표시되지 않거나 광고주가 갑자기 표시하지 않기로 결정합니다. 사이트에 그렇지 않은 페이지가 많이 있습니다. 그러므로 의존성은 여백 상단광고 블록에서 나오는 것은 나쁜 생각입니다. 안에 넣어두는게 훨씬 낫더라구요 #공들여 나열한 것-그러면 그는 아무것도 방해하지 않을 것입니다.

첫 번째 요점은 고정된 바닥글이 제대로 작동하려면 아래에 바닥글 블록을 배치해야 한다는 것입니다. #공들여 나열한 것. 그러나 자바스크립트의 도움으로 다른 고정된 바닥글 구성표를 구현할 수 있지만 어떤 경우에도 JS가 필요하거나 처음에는 JS 없이 올바른 레이아웃이 필요합니다.

우리는 콘텐츠 내부에 바닥글을 "때린" 최신 웹사이트 레이아웃 디자이너보다 더 강할 수 없기 때문에 미래의 웹사이트에 바닥글을 적절하게 배치한다는 아이디어는 제쳐두겠습니다. Habr보다!), 자바스크립트(userscript)를 사용하여 Habr을 올바른 하나의 조건으로 분석해 보겠습니다. (비난할 사람은 레이아웃 디자이너나 스위처가 아니라 물론 사이트 유형에 따라 프로젝트 관리의 전략적 결정이 결정된다고 바로 가정해 보겠습니다.) 이렇게 하면 우리는 이상을 달성하지 못할 것입니다. 로딩 과정 중 처음 1~2초 동안 페이지 레이아웃이 잘못됩니다. 하지만 우리에게 중요한 것은 IT 세계에서 가장 인기 있는 웹사이트를 품질 면에서 능가할 수 있는 컨셉과 기회입니다.

따라서 스크립트의 올바른 위치(초기, 페이지 로딩이 끝날 때)에 광고 및 바닥글의 DOM 블록 전송을 올바른 위치에 기록합니다. (사용자 스크립트로 인해 솔루션이 순수 솔루션보다 더 복잡해질 것이라는 점을 염두에 두자.)
var dQ = function(q)(return document.querySelector(q);) //단축용 var topL = dQ("#topline"),lay = dQ("#layout"), foot = dQ("#footer" ); if(topL &&lay) //배너 - 콘텐츠 블록 내부lay.insertBefore(topL,lay.firstChild); if(lay && foot &&lay.nextSibling) //바닥글 이동lay.parentNode.insertBefore(footer,lay.nextSibling);
블록을 해당 위치에 배치했습니다. 이제 남은 것은 필요한 속성을 요소에 할당하는 것뿐입니다. 바닥글 높이는 사용자 스크립트가 활성화될 때(페이지 로딩이 끝날 때) 이미 알고 있기 때문에 정확하게 설정해야 합니다. 위에서 언급한 것처럼 사용자 스크립트의 트리거 포인트로 인해 페이지 바닥글 표시의 점프가 불가피합니다. "좋은 얼굴"을 시도할 수 있지만 "나쁜 게임"을 사용한다고요? 무엇을 위해? 사이트의 "나쁜 게임"을 사용하면 추가 노력 없이도 컨셉을 만들 수 있습니다. 이는 품질을 평가하는 데 충분하며 프로젝트의 "올바른 게임"에는 필요하지 않습니다.
if(foot)( //블록 정렬기

바닥글에서 h.apnd_el((clss:"clear",appendTo: footer)); var footH = foot.offsetHeight; //...그리고 바닥글의 높이를 측정합니다. ) if(topL &&lay && footer &&lay.nextSibling)( //콘텐츠에서 필요한 높이의 블록 정렬 ("레이아웃") h.apnd_el((clss:" clear", css:( height: (footH ||0) +"px"),appendTo:lay));lay.style.minHeight="100%";h.addRules("#layout(margin-bottom:- "+ footH +"px !important)html, 본문(높이:100%)"); )
여기서는 자체 작성 함수를 사용하도록 허용했습니다. h.apnd_el, 이는 jQuery에서와 거의 동일한 작업을 수행합니다.
$("
").css((높이: footH ||0)).appendTo($(footer))
그리고 - CSS 규칙을 구현하는 또 다른 일반적인 기능 - h.addRules. "를 사용하여 규칙을 선언해야 하기 때문에 여기서는 그것 없이는 할 수 없습니다. !중요한" - 정확하게는 사용자 스크립트의 스타일 우선순위 특성 때문입니다.

이러한 코드 조각을 사용하면 사용자 스크립트에서 고정된 바닥글을 볼 수 있고(아래로 점프한 후) 페이지 레이아웃을 작성하는 방법을 완전히 이해할 수 있습니다. 점핑 디자인을 매일 사용하는 것은 불편하므로 시연 및 테스트용으로만 사용하는 것이 좋습니다. HabrAjax 사용자 스크립트에서 유사한 스크립트를 설치하고 버전 0.883_2012-09-12부터 "underFooter" 설정으로 닫았습니다(설정 목록에서 "바닥글이 맨 아래에 고정됨" 앞의 상자 선택).

바닥글 고정이 ZenComment 스타일이 설치된 경우 업데이트 필요성에 영향을 미치나요? 네, 그렇습니다.사용자 스크립트에 의해 삽입된 스타일이 가장 낮은 우선순위를 갖는 복잡한 스타일 우선순위 체인으로 인해 우리는 사용자 스타일을 약간 조정해야 했습니다. 가능성고정된 바닥글로 작업 중입니다. 사용자 스타일을 2.66_2012-09-12 +로 업데이트하지 않으면 바닥글이 정확하게 작동하지 않습니다.

차단하다 회전_포스트 (과거 인기 게시물 3개) 바닥글이 더 논리적으로 보이기 때문에 실제 스크립트에서도 바닥글로 이동됩니다.

두 번째 요점(레이아웃 단점 목록 중)은 순전히 Habr에 대한 논의입니다(사용자 스크립트에는 적용되지 않으며 이전 항목을 부분적으로 반복합니다).

페이지에는 순수 CSS를 사용하여 고정된 바닥글(브라우저의 기본 글꼴 크기에 따라 정의되지 않은 바닥글 높이)을 만들지 못하는 문제가 있습니다. CSS를 이용하여 바닥글을 구현하려면 글꼴의 상대적인 높이를 선택해야 하는데, 사용자의 컴퓨터에 필요한 글꼴이 없으면 바닥글이 작동하지 않을 수 있습니다. 따라서 솔루션에는 전환을 사용하여 바닥글의 대략적인 위치를 정확한 위치로 조정할 수 있는 JavaScript가 포함되어야 합니다. 또는 다양한 플랫폼의 사용자 스크립트에서 작성된 솔루션의 수용 가능성을 살펴본 후 고정된 바닥글을 계산하여 설치합니다. 첫 번째 관찰에서는 솔루션이 실용적이라는 것을 보여줍니다.

결론: Habré에서 레이아웃을 완전히 디자인하는 것은 가능하지만 이를 위해서는 레이아웃의 동작을 명확하게 이해하고 블록을 올바른 순서로 배치하는 레이아웃 디자이너가 필요합니다. (현재 바닥글과 상단 배너는 "잘못된 위치에" 있으며 바닥글의 스타일을 바로 고정할 수 있는 방식은 아닙니다.) 바닥글의 높이를 상대 단위로 설정하면 JS 없이도 할 수 있습니다. 글꼴 불확실성의 여지가 있습니다.

구현

HabrAjax 0.883+를 활성화하면 "네일된 바닥글"이 작동하는 것을 볼 수 있습니다. 스크립트를 사용하여 높이를 조정합니다. 이를 통해 고정된 바닥글이 있는 페이지가 일반 페이지에 비해 얼마나 더 나은지 평가할 수 있습니다. ZenComment 사용자 스타일은 스크립트와 호환되지만 고정된 바닥글이 제대로 작동하려면 ZenComment 버전 2.66_2012-09-12 +를 설치해야 합니다.

구현 동작에 대한 사실

바닥글, 스타일 및 스크립트가 포함된 샤머니즘은 샤머니즘입니다(이론으로만 뒷받침됨). 동작은 브라우저마다 약간 다르지만 일부 위치에서는 예상치 못한 현상입니다. 사용자 스크립트와 블록 재배열이 없으면 결과가 달라집니다. 이것이 사용자 스크립트의 구현 실험에서 나온 결과입니다.

1) Firefox - 바닥글 점프가 예기치 않게 부족합니다. 바닥글이 바닥에 배치된 후에 렌더링이 발생합니다.

2) Chrome - "방황 스크롤링"으로 인해 놀랐습니다. 하단의 빈 공간이 1초에 한 번씩 페이지에 추가됩니다. 높이 계산에 문제가 발생했습니다. 해결책은 사용자 스타일로 html,body(height:100%) 을 작성하는 것이지만 항상 작동한다는 보장은 없습니다. 문서가 창 높이를 초과하지 않는지 확인하는 것이 더 안정적이며 그렇지 않은 경우 바닥글을 이동하고 그렇지 않으면 아무것도 이동하지 않습니다. 점프는 괜찮습니다. 존재합니다.

3) Opera - 페이지가 처음 로드될 때 점프가 없지만(v. 12.02) 급하게 다시 로드하면 바닥글 점프가 표시될 수 있습니다. 그렇지 않으면 Fx보다 정확하게 동작합니다.

글쎄, Chrome이 올바르게 작동하도록 특별히 가르치고(스크립트를 사용하여) 이 형식으로 버전을 출시하여 표시해야 합니다. 따라서 사용자 스크립트의 섹션은 기사에 제공된 섹션보다 조금 더 복잡합니다.

이는 완전한 구현이 아니라는 점을 기억해야 합니다. 예를 들어 사용자가 창 크기를 조정하는 경우는 고려하지 않습니다. 또한 이동 전후에 바닥글 높이를 변경하는 드문(실제로) 조합을 찾을 수도 있는데, 여기서 논리가 불편함 없이 실패하기 시작합니다. 개선의 복잡성과 솔루션의 일시적 성격 사이에 균형이 유지되었기 때문에 단점은 의도적으로 남겨두었습니다.

결과적으로 우리는 적어도 빠른 데스크톱 컴퓨터에서는 완전히 실행 가능한 운영 체제를 얻었습니다. 바닥글의 잘못된 동작이 감지되면 "underFooter" 설정을 비활성화해야 합니다.

어떤 페이지에 유용합니까?

사용자 스타일이 없는 표준 웹사이트에서는 짧은 질문 및 답변 페이지도 1500px보다 길어지며 대부분의 경우 가로 모니터에서는 눈에 띄지 않습니다. 그러나 일반 모니터에서도 높이가 약 1300픽셀인 개인 사용자 페이지를 자주 접하게 되는데, 여기에는 첨부되지 않은 바닥글이 그 모습 그대로 나타납니다. 사용자 설정의 페이지 수도 그리 길지 않습니다.

ZenComment 사용자 스타일을 사용하면 필요한 페이지 높이가 크게 줄어들고 HabrAjax 사용자 스크립트는 사이드바에 사이드 블록의 일부 또는 전부를 표시하지 않을 수 있습니다. 따라서 스크립트와 스타일을 사용하면 첨부되지 않은 바닥글의 효과가 눈에 띄게 더 자주 관찰됩니다. 따라서 바닥글 수정이 HabrAjax에 처음 등장한 것은 논리적입니다. 그러나 일반 웹사이트에도 고정된 바닥글이 유용할 수 있는 페이지가 많이 있습니다.

지원이 될까요?

지난 해 사이트의 행동을 보면 개발자(및 경영진)가 이전에는 사용자 스크립트와 사용자 스타일에만 존재했던 기능을 도입하기 시작했음을 알 수 있습니다. 예를 들어, 연초에 나는 작은 소원을 많이 모은 곳에 글을 썼습니다. 6개월 후, 나는 이 사이트를 다시 방문했고 희망사항으로 설명된 여러 기능이 이미 사이트에 구현되었다는 사실을 알게 되어 기뻤습니다(텍스트에서 바로, "UPD"와 날짜를 볼 수 있음).

다음으로 댓글 평가를 위해 사각형 대신 "화살표"를 살펴보겠습니다. 약 3년 전에 userils("Prettifier")에 등장했고 약 2년 전에 ZenComment에 채택되었습니다. 약 2~3개월 전에 사이트에 등장했습니다. ZenComment(숫자 왼쪽에 하나의 화살표, 오른쪽에 두 번째 화살표)에서 수행된 것처럼 시간이 지나면 화살표가 약간의 거리를 두고 떨어져 놓칠 것이라고 믿기 시작합니다.

  • 사용자 스타일
  • HabrAjax
  • 태그 추가

    조만간 모든 레이아웃 디자이너는 웹 사이트의 바닥글을 페이지 하단까지 눌러야 하는 상황에 직면하게 됩니다. 이 문제를 해결하는 방법은 인터넷에 여러 가지가 있습니다. 제가 실제로 사용하는 것 중 일부를 보여 드리겠습니다.

    가장 간단한 HTML 마크업:

    방법 #1

    바닥글은 절대적으로 위치를 지정하고 상위 블록(html, 본문 및 래퍼)의 높이를 100%로 늘려 맨 아래로 푸시됩니다. 이 경우 콘텐츠 블록은 바닥글 높이보다 크거나 같은 아래쪽 여백을 지정해야 합니다. 그렇지 않으면 후자가 콘텐츠의 일부를 덮게 됩니다.

    * ( 여백: 0; 패딩: 0; ) html, 본문 ( 높이: 100%; ) .wrapper ( 위치: 상대; 최소 높이: 100%; ) .content ( 패딩 바닥: 90px; ) .footer ( 위치 : 절대; 왼쪽: 0; 아래쪽: 0; 너비: 100%; 높이: 80px; )

    방법 #2

    콘텐츠 블록과 해당 "상위 항목"을 브라우저 창의 전체 높이까지 당기고 음수 여백(여백 상단)을 통해 바닥글을 들어올려 나타나는 수직 스크롤을 제거하면 바닥글이 눌러집니다. 이 경우 지하실의 높이를 표시하여야 하며, 압입량과 동일하여야 한다. box-sizing: border-box 속성 덕분에 콘텐츠 클래스가 있는 상자의 높이가 100%를 초과하는 것을 방지합니다. 즉, 이 경우 min-height: 100% + padding-bottom: 90px는 브라우저 창 높이의 100%와 같습니다.

    * ( 여백: 0; 패딩: 0; ) html, body, .wrapper ( 높이: 100%; ) .content ( 상자 크기: 테두리 상자; 최소 높이: 100%; 패딩 바닥: 90px; ) . 바닥글( 높이: 80px; 여백 상단: -80px; )

    방법 #3

    이 방법은 다른 방법(5번째 제외)과 달리 바닥글의 높이가 중요하지 않기 때문에 좋습니다. 여기서는 래퍼 블록을 테이블로, 콘텐츠 블록을 테이블 행(각각 디스플레이: 테이블 및 디스플레이: 테이블 행 속성)으로 전환하여 테이블의 동작을 에뮬레이트합니다. 덕분에 콘텐츠 블록과 모든 상위 컨테이너 높이가 100%로 설정되어 콘텐츠가 자동으로 결정되는 바닥글 높이를 뺀 전체 높이까지 늘어납니다. 테이블 에뮬레이션을 통해 바닥글이 그 이상으로 확장되는 것을 방지합니다. 브라우저 창의 높이.

    *( 여백: 0; 패딩: 0; ) html, body ( 높이: 100%; ) .wrapper ( 디스플레이: 테이블; 높이: 100%; ) .content ( 디스플레이: 테이블 행; 높이: 100%; )

    방법 #4

    이 방법은 이전 방법과 다르며 그 특징은 최신 브라우저에서만 지원되는 CSS 함수 calc() 및 vh 측정 단위를 사용한다는 것입니다. 여기서 바닥글의 정확한 높이를 알아야 합니다. 100vh는 브라우저 창의 높이이고 80px은 바닥글의 높이입니다. 그리고 calc() 함수를 사용하여 첫 번째 값에서 두 번째 값을 빼서 바닥글을 맨 아래로 누릅니다.

    * ( 여백: 0; 패딩: 0; ) .content ( 최소 높이: calc(100vh - 80px); )

    방법 #5

    이것은 아마도 제시된 모든 방법 중 가장 좋은 방법이지만 최신 브라우저에서만 작동합니다. 세 번째 방법과 마찬가지로 바닥글의 높이는 중요하지 않습니다.

    * ( 여백: 0; 패딩: 0; ) html, body ( 높이: 100%; ) .wrapper ( 디스플레이: flex; flex-direction: 열; 높이: 100%; ) .content ( flex: 1 0 자동; ) .footer (플렉스: 0 0 자동; )

    방법 #6

    다양한 사례에 대한 전체 라이브러리(Flexbox 사용)

    블라드 메르제비치

    웹 개발자의 전문 용어로 바닥글은 사이트의 하단 부분으로 저작권이 기록되고 연락처가 게시되며 다양한 카운터가 표시되고 유사한 정보가 표시됩니다. 일반적으로 바닥글은 모든 콘텐츠 뒤에 위치하며 페이지를 스크롤할 때만 표시됩니다. 어떤 경우에는 페이지 높이에 상관없이 항상 바닥글에 액세스할 수 있도록 하고 브라우저 창 하단에 고정하는 것이 바람직합니다.

    이를 위해 position 속성과 해당 값을 사용하겠습니다. 이 경우 요소는 한 곳에 유지되며 위치는 top , right , Bottom , left 속성을 통해 좌표로 지정됩니다. 우리의 경우 왼쪽과 아래쪽을 0 값으로 설정하는 것으로 충분합니다. 고정 요소의 너비는 내용과 동일하며 배경색이나 이미지를 추가하면 명확하게 표시되므로 너비를 100%로 사용하여 너비도 설정해야 합니다(예 1).

    예 1: 고정된 지하실

    고정 지하

    사이트에 나열된 모든 사자 포획 방법은 이론적이며 계산 방법을 기반으로 합니다. 저자는 사용시 안전을 보장하지 않으며 결과에 대한 모든 책임을 부인합니다. 사자는 포식자이자 위험한 동물이라는 것을 기억하세요!

    예제의 결과는 그림 1에 나와 있습니다. 1.

    쌀. 1. 페이지 하단의 바닥글

    Internet Explorer 6에서는 고정값을 지원하지 않으므로 이 예제에서는 제대로 작동하지 않습니다. IE6의 경우 코드에 두 개의 태그를 추가해야 합니다.

    , 콘텐츠 및 바닥글 컨테이너 내부에 중첩하고 이 브라우저에 특별히 다른 스타일도 포함합니다(예 2).

    예 2: IE6을 염두에 둔 코드

    XHTML 1.0 CSS 2.1 IE Cr Op Sa Fx

    고정 지하

    사이트에 나열된 모든 사자 포획 방법은 이론적이며 계산 방법을 기반으로 합니다. 저자는 이를 사용함에 있어 귀하의 안전을 보장하지 않으며, 결과에 대한 모든 책임을 거부합니다. 사자는 포식자이자 위험한 동물이라는 것을 기억하세요!

    이 예에서는 position 속성의 절대값을 사용합니다. 절대 위치 지정을 사용하면 요소를 브라우저 창의 어느 위치에나 배치할 수 있지만 콘텐츠와 함께 스크롤됩니다. 이것이 고정값과 절대값의 주요 차이점입니다. 바닥글이 이동하는 것을 방지하기 위해 페이지 높이를 100%로 설정하고 현재 창 크기에 맞지 않는 모든 내용은 잘립니다. 이 경우 세로 스크롤 막대가 사라지므로 Overflow 를 사용하여 콘텐츠에 추가해야 합니다.

    또 다른 불쾌한 점은 스크롤 막대에 바닥글 배경이 오버레이되는 것입니다. 따라서 스크롤 막대 너비에 맞게 들여쓰기를 설정해야 합니다. 게다가 스크롤바가 없으면 오른쪽 지하실에 구멍이 생깁니다.

    이것은 일종의 악몽입니다! 사이트의 바닥글이 다시 "팝업"되고 디자인이 바뀌는 이유는 무엇입니까? 바닥글을 뭔가로 페이지 하단까지 제대로 누르는 게 정말 불가능할까요? 콘텐츠나 벽돌은 최소한! 브릭이 모니터에 맞지 않나요?


    알겠습니다. 그러면 우리 기사를 끝까지 읽을 때까지 앉아서 아무것도 하지 마십시오.

    웹사이트에 적합한 바닥글 만들기

    많은 웹사이트 소유자는 페이지 바닥글이 단순히 상단에 떠 있을 때 이 문제를 경험합니다. 그리고 무엇을 해야할지 명확하지 않습니다. 대부분의 경우, 혼자서 서둘러 구성한 웹사이트 디자인은 이러한 단점으로 인해 어려움을 겪습니다( 서클 "미친 손") 또는 초보 웹마스터입니다.

    동시에 사이트 수명의 첫 단계에서는 끔찍한 일이 발생하지 않습니다. 그리고 이 짧은 서사시는 콘텐츠가 지하실에 '무게'를 얹어 솟아오르는 것을 막는 한 계속됩니다. 그러나 페이지에 더 적은 양의 자료를 배치하는 것은 가치가 있으며 최근 "평온한" 바닥글이 즉시 맨 위로 올라와 전체 사이트 디자인을 부적절한 모양으로 만듭니다.

    설계된 템플릿의 이러한 "결함"을 제거하기 위해 웹마스터 서비스에 돈을 쓸 필요는 없습니다. 대부분의 경우 사이트 바닥글은 직접 배치할 수 있습니다. 이 문제를 제거하기 위해 가능한 모든 옵션을 고려해 보겠습니다.

    첫 번째 방법

    바닥글을 페이지 하단에 고정하는 첫 번째 방법은 CSS를 기반으로 합니다. 예제 코드부터 시작해 구현을 자세히 살펴보겠습니다.

    html( 높이: 100%; ) 머리글, 탐색, 섹션, 기사, 옆, 바닥글( 표시: 블록; ) 본문( 높이: 100%; ) #wrapper( 너비: 1000px; 여백: 0 자동; 최소 높이: 100 %; 높이: 자동 !important; 높이: 100%; ) #header ( 높이: 150px; 배경색: rgb(0,255,255); ) #content ( 패딩: 100px; 높이:400px; 배경색: rgb(51,255,102) ; ) #footer ( 너비: 1000px; 여백: -100px 자동 0; 높이: 100px; 위치: 상대; 배경색: rgb(51,51,204); )

    페이지 하단에 바닥글 태그를 첨부하려면

    컨테이너 외부로 옮겼습니다(레이어 래퍼). 전체 페이지와 "본문"의 내용을 화면 가장자리까지 늘립니다. 이를 위해 CSS 코드에서 태그 높이를 설정합니다. 그리고 100%:

    html( 높이: 100%; ) 본문( 높이: 100%; )

    또한 컨테이너 레이어의 최소 높이를 100%로 설정했습니다. 콘텐츠의 너비가 컨테이너의 높이보다 큰 경우 속성을 auto 로 설정하세요. 덕분에 래퍼는 페이지에 배치된 콘텐츠의 너비에 자동으로 조정됩니다.

    #wrapper (최소 높이: 100%; 높이: 자동 !important; 높이: 100%; )

    "height: 100%" 코드 줄은 min-height 속성을 허용하지 않는 이전 버전의 IE용입니다.

    페이지 디자인에서 바닥글 공간을 분리하기 위해 태그에 들여쓰기를 설정했습니다. 100픽셀에서:

    #content(패딩: 100px; )

    이 단계에서는 전체 화면 너비에 추가 100픽셀이 있는 웹 페이지가 있습니다. 이 웹 페이지는 해당 위치가 상대(위치: 상대적인). 따라서 음수 패딩 값을 사용하여 높이가 100%로 설정된 컨테이너 영역으로 바닥글을 "당깁니다".

    이 예에서 웹 문서의 마크업은 비교적 새로운 HTML 5 태그를 사용하여 지정되는데, 이는 이전 브라우저에서는 올바르게 해석되지 않을 수 있습니다. 이로 인해 전체 페이지 디자인이 올바르게 표시되지 않을 수 있습니다. 이를 방지하려면 하이퍼텍스트 언어 버전 5 무기고의 새 태그를 일반 태그로 교체해야 합니다.

    :

    콘텐츠

    개선된 버전

    페이지 하단의 바닥글을 "흔들리지 않게" 만드는 방법에 대해 위에서 설명한 방법은 모든 사람에게 적합하지 않습니다. 앞으로 팝업을 사용하여 사이트 디자인을 수정하고 개선하려는 경우 이전 구현 사용을 중단하는 것이 좋습니다.

    팝업 창에 가장 일반적으로 사용되는 CSS 속성은 z-index 입니다. 해당 값을 사용하여 레이어가 서로 쌓이는 순서를 지정합니다.

    요소의 Z-인덱스 값이 높을수록 전체 "레이어링" 스택에서 더 높게 표시됩니다.

    그러나 이전 예에서는 바닥글에 음수 패딩 값을 사용했기 때문에 팝업 하단이 상단 바닥글 영역과 겹칩니다. z-index 값이 더 높더라도 마찬가지입니다. 팝업 창의 상위(래퍼)가 여전히 이 속성에 대해 더 낮은 값을 갖기 때문입니다.

    다음은 좀 더 고급 옵션입니다.

    CSS - 예제 코드:

    html, 본문( 높이: 100%; ) .header( 높이:120px; 배경색: rgb(0,255,102); ) .main( 최소 높이:100%; 위치: 상대; 배경색: rgb(100,255,255); ) .footer ( 높이:150px; 위치: 절대; 왼쪽: 0; 아래쪽: 0; 너비: 100%; 배경색: rgb(0,0,153); )


    코드에서 볼 수 있듯이 바닥글을 기본 요소의 일부로 배치했습니다. 컨테이너의 상대 위치를 설정하고 바닥글의 절대 위치를 설정했습니다. 컨테이너 맨 아래에 지하실을 고정하고 왼쪽과 위쪽의 위치를 ​​0으로 설정했습니다.

    높이가 고정되지 않은 지하실 옵션

    이전 구현에서는 바닥글이 항상 페이지 하단에 있도록 보장할 수 있습니다. 그러나 바닥글의 너비가 고정된 경우에만 해당됩니다. 하지만 그 안에 게시된 콘텐츠의 양을 예측할 수 없다면 어떻게 될까요?

    고정되지 않은 지하실에는 고급 옵션이 필요합니다. 표시 속성에 대해 바닥글을 table-row로 설정합니다. 그러면 테이블 행으로 표시됩니다.

    어떻게 바닥글을 페이지 하단으로 푸시? 이 질문은 웹 사이트 레이아웃의 레이아웃을 접한 많은 사람들이 묻는 질문입니다. 사실 이러한 레이아웃의 블록 높이가 명시적으로 지정되지 않으면 콘텐츠의 양에 따라 달라집니다. 따라서 이 콘텐츠가 충분히 작으면 전체 레이아웃이 브라우저 창보다 작은 높이를 차지할 수 있습니다. . 당연히 이 모든 것이 그다지 좋아 보이지는 않습니다. 이제 바닥글을 페이지 하단으로 밀어 레이아웃을 더욱 매력적이고 친숙하게 만드는 몇 가지 방법을 보여 드리겠습니다.

    각 예에서 우리는 다음 사실로부터 시작할 것입니다. 사이트 레이아웃다음과 같은 일반적인 구조가 있습니다(레이아웃은 다양할 수 있지만 방법은 보편적입니다).

    콘텐츠

    다음으로 원하는 결과를 얻기 위해 추가 블록, CSS 속성 등이 레이아웃에 추가됩니다. 그러나 바닥글을 페이지 하단으로 푸시하기로 결정한 레이아웃에서는 이러한 블록이나 일부 속성이 이미 존재할 수 있으므로 다시 추가할 필요가 없습니다. 바닥글을 하단에 고정하는 데 직접적으로 관련된 모든 CSS 속성에는 주석이 제공됩니다.

    위치 지정을 사용하여 바닥글을 아래쪽으로 누릅니다.

    웹사이트 - 위치 지정을 사용하여 바닥글을 맨 아래로 누르세요.
    콘텐츠

    예제 설명

    1. 모든 레이아웃 블록은 브라우저 창의 전체 높이까지 늘어나지만 필요한 경우 더 늘어날 수 있도록 최소 높이(CSS 속성)가 100%로 지정된 추가 래퍼 블록 id="wrapper"로 래핑되었습니다. 그러나 백분율 값은 조상을 기준으로 계산되므로 이것이 작동하려면 및 태그에 높이(CSS)를 명시적으로 지정해야 했습니다.
    2. 다음 단계는 래퍼 블록을 기준으로 바닥글을 아래쪽(CSS)에 절대 위치시키는 것(CSS)이었습니다. 따라서 바닥글이 페이지 하단으로 눌려졌습니다.
    3. 절대 위치 지정은 흐름에서 요소를 제거하므로 콘텐츠 및 메뉴가 있는 블록에 정보를 추가할 때 해당 정보의 일부가 누른 바닥글 아래로 이동합니다. 이러한 일이 발생하지 않도록 id="content" 및 id="menu" 요소의 하단 패딩(CSS)이 바닥글 높이와 동일하도록 설정되었습니다. 이제 그들은 바닥글 아래로 들어가서 아래로 밀어줄 사람들이 될 것입니다.
    4. 우리 레이아웃에서는 메뉴가 있는 블록이 부동(CSS)이므로 바닥글은 이를 알아차리지 못하므로 메뉴는 메뉴를 아래로 밀지 않습니다. 이 문제를 해결하기 위해 래핑(CSS 속성)을 깨는 또 다른 블록(class="clear")이 생성되었습니다. 그런데 IE6 및 IE7을 지원할 계획이 없다면 이 블록 대신 바닥글 앞의 마지막 블록(여기서는 "콘텐츠")에 의사 요소를 적용하고 흐름을 중단할 수 있습니다.

    첫 번째 단락에서는 최소 높이를 나타내기 위해 CSS 속성을 사용했는데, Internet Explorer 6에서는 이 속성을 인식하지 못하지만 최소 높이와 마찬가지로 속성을 인식합니다. 또한 이 브라우저는 특정 경우에 규칙을 무시합니다. 이 예에서는 이 두 가지 기능을 사용하여 하카다른 브라우저에 영향을 주지 않고 필요한 작업을 수행하도록 합니다.

    추가 블록을 사용하여 바닥글을 아래쪽으로 누릅니다.

    웹사이트 - 추가 블록을 사용하여 바닥글을 맨 아래로 누르세요.
    콘텐츠

    예제 설명

    1. 바닥글을 제외한 모든 레이아웃 블록은 최소 높이(CSS) 100%로 설정된 추가 id="wrapper" 블록으로 래핑되었습니다. 이는 블록 래퍼가 최소한 브라우저 창의 전체 높이까지 늘어나도록 하기 위한 것이지만 필요한 경우(콘텐츠가 많은 경우) 더 늘어날 수도 있습니다. 이제 래퍼의 높이는 브라우저 창의 높이와 같고 전체 HTML 페이지의 높이는 래퍼 높이 + 바닥글 높이입니다.
    2. 첫 번째 지점의 조치로 인해 바닥글이 페이지 하단까지 눌렸음에도 불구하고 브라우저 창의 하단 테두리를 벗어나는 현상이 좋지 않습니다. 눈에 띄게 높이기 위해 상단 음수 여백(CSS)이 설정되었으며 크기는 바닥글 자체의 높이와 동일합니다. 그게 다입니다. 바닥글을 누르면 페이지 하단에 위치합니다.
    3. 이전 단락에서 누른 바닥글에 대해 위쪽 음수 여백을 지정했으므로 콘텐츠나 메뉴가 있는 블록에 정보를 추가할 때 정보의 일부가 이 바닥글 아래로 이동합니다. 이를 방지하기 위해 높이가 바닥글 높이와 동일한(조금 더 크게 만들 수도 있음) id="footer_corlect" 를 사용하여 또 다른 블록을 만들었습니다. 따라서 누른 바닥글 아래로 가서 아래로 밀어 정보가 숨겨지는 것을 방지하는 것이 바로 이 수정 블록입니다.
    4. 콘텐츠 높이를 초과하는 경우 메뉴가 감싸지는 것을 방지하기 위해 조정 블록에 CSS(줄바꿈 중단)가 추가되었습니다. 따라서 이러한 흐름 중단은 바닥글 자체에서 불필요한 것으로 제거되었습니다.

    첫 번째 예와 마찬가지로 IE6의 경우 최소 높이를 설정할 수 있는 특수 해킹이 여기에 사용되었습니다.