콘텐츠를 CSS 중앙에 정렬합니다. 줄 간격 또는 줄 높이. 번역을 사용하여 센터

모든 레이아웃 디자이너는 블록의 콘텐츠를 수평 또는 수직으로 정렬해야 하는 필요성에 지속적으로 직면합니다. 이 주제에 대한 좋은 기사가 여러 개 있지만 모두 흥미롭지만 실용적인 옵션이 거의 없기 때문에 주요 사항을 강조하기 위해 추가 시간을 소비해야 합니다. 나는 더 이상 Google을 검색하지 않기 위해 이 정보를 나에게 편리한 형식으로 제공하기로 결정했습니다.

알려진 크기로 블록 정렬

CSS를 사용하는 가장 쉬운 방법은 알려진 높이(수직 정렬의 경우) 또는 너비(수평 정렬의 경우)가 있는 블록을 정렬하는 것입니다.

패딩을 사용한 정렬

때로는 요소를 중앙에 배치할 수 없지만 " ".

예를 들어, 200 x 200 픽셀의 사진이 있고 이를 240 x 300 블록의 중앙에 배치해야 합니다. 외부 블록의 높이와 너비를 200픽셀로 설정하고 위쪽과 아래쪽에 20픽셀을 추가할 수 있습니다. , 왼쪽과 오른쪽에는 50개가 있습니다.

.example-wrapper1( 배경: #535E73 ; 너비: 200px ; 높이: 200px ; 패딩: 20px 50px ; )

절대 위치 블록 정렬

블록이 "로 설정된 경우 위치: 절대"이면 "position:relative"를 사용하여 가장 가까운 상위 항목을 기준으로 위치를 지정할 수 있습니다. 여기에는 모든 속성(" 맨 위","오른쪽","맨 아래","왼쪽") 내부 블록의 "margin:auto"와 동일한 값을 할당합니다.

*뉘앙스가 있습니다. 내부 블록의 너비(높이) + 왼쪽(오른쪽, 아래쪽, 위쪽) 값이 상위 블록의 크기를 초과해서는 안 됩니다. 왼쪽(오른쪽, 아래쪽, 위쪽) 속성에 0(영)을 할당하는 것이 더 안전합니다.

.example-wrapper2 (위치: 상대 ; 높이: 250px ; 배경: url(space.jpg) ; ) .cat-king (너비: 200px ; 높이: 200px ; 위치: 절대 ; 위쪽: 0 ; 왼쪽: 0 ; 아래쪽: 0 ; 오른쪽: 0 ; 여백: 자동 ; 배경: url(king.png) ;

수평 정렬

"text-align: center"를 사용한 정렬

블록의 텍스트를 정렬하려면 "라는 특별한 속성이 있습니다. 텍스트 정렬". "로 설정한 경우 센터"각 텍스트 줄은 수평으로 정렬됩니다. 여러 줄 텍스트의 경우 이 솔루션은 극히 드물게 사용됩니다. 범위, 링크 또는 이미지 정렬을 위해 이 옵션을 더 자주 찾을 수 있습니다.

CSS를 사용하여 텍스트 정렬이 어떻게 작동하는지 보여주기 위해 몇 가지 텍스트를 생각해 내야 했지만 흥미로운 점은 떠오르지 않았습니다. 처음에는 동요를 어딘가에 복사하기로 결정했지만 이것이 기사의 독창성을 해칠 수 있고 사랑하는 독자들이 Google에서 찾을 수 없다는 것을 기억했습니다. 그리고 나서 저는 이 단락을 쓰기로 결정했습니다. 결국 요점은 그것과 일치하지 않지만 요점은 일치합니다.

.example-text ( 텍스트 정렬 : 중앙 ; 패딩 : 10px ; 배경 : #FF90B8 ; )

이 속성은 텍스트뿐만 아니라 모든 인라인 요소("display: inline")에도 작동한다는 점은 주목할 가치가 있습니다.

하지만 이 텍스트는 왼쪽으로 정렬되어 있지만 래퍼를 기준으로 중앙에 있는 블록에 있습니다.

.example-wrapper3 ( 텍스트 정렬 : 중앙 ; 배경 : #FF90B8 ; ) .inline-text ( 디스플레이 : 인라인 블록 ; 너비 : 40% ; 패딩 : 10px ; 텍스트 정렬 : 왼쪽 ; 배경 : #FFE5E5 ; )

여백을 사용하여 블록 정렬

너비가 알려진 블록 요소는 "margin-left: auto; margin-right: auto"로 설정하여 쉽게 수평으로 정렬할 수 있습니다. 일반적으로 다음과 같은 약어가 사용됩니다. 여백: 0 자동" (0 대신 임의의 값을 사용할 수 있습니다.) 그러나 이 방법은 수직 정렬에는 적합하지 않습니다.

.lama-wrapper ( 높이 : 200px ; 배경 : #F1BF88 ; ) .lama1 ( 높이 : 200px ; 너비 : 200px ; 배경 : url(lama.jpg) ; 여백 : 0 자동 ; )

이는 가능한 경우(고정 또는 절대 위치 지정이 필요하지 않은 경우) 모든 블록을 정렬하는 방법입니다. 이는 가장 논리적이고 적절합니다. 당연한 것 같지만 음수 들여쓰기가 포함된 무서운 예를 가끔 보았기 때문에 명확히 하기로 결정했습니다.

수직 정렬

수직 정렬은 훨씬 더 문제가 많습니다. 분명히 이것은 CSS에서 제공되지 않았습니다. 원하는 결과를 얻는 방법에는 여러 가지가 있지만 모두 그다지 아름답지는 않습니다.

line-height 속성을 사용한 정렬

블록에 줄이 하나만 있는 경우 "를 사용하여 수직 정렬을 수행할 수 있습니다. 선 높이"를 선택하고 원하는 높이로 설정합니다. 안정성을 위해 "height"도 설정하는 것이 좋습니다. 이 값은 "line-height" 값과 동일합니다. 왜냐하면 후자는 모든 브라우저에서 지원되지 않기 때문입니다.

.example-wrapper4( 줄 높이: 100px ; 색상: #DC09C0 ; 배경: #E5DAE1 ; 높이: 100px ; 텍스트 정렬: 가운데 ; )

여러 라인으로 블록 정렬을 달성하는 것도 가능합니다. 이렇게 하려면 추가 래퍼 블록을 사용하고 해당 블록에 줄 높이를 설정해야 합니다. 내부 블록은 여러 줄로 구성될 수 있지만 "인라인"이어야 합니다. "vertical-align: middle"을 적용해야 합니다.

.example-wrapper5( 줄 높이: 160px ; 높이: 160px ; 글꼴 크기: 0 ; 배경: #FF9B00 ; ) .example-wrapper5 .text1( 디스플레이: 인라인 블록 ; 글꼴 크기: 14px ; 줄 높이: 1.5 ; 수직 정렬: 중간 ; 배경: #FFFAF2 ;

래퍼 블록에는 "font-size: 0"이 설정되어 있어야 합니다. 글꼴 크기를 0으로 설정하지 않으면 브라우저는 몇 개의 추가 픽셀을 추가합니다. 내부 블록의 글꼴 크기와 줄 높이도 지정해야 합니다. 이러한 속성은 상위 블록에서 상속되기 때문입니다.

테이블의 수직 정렬

재산 " 수직 정렬"도 표 셀에 영향을 미칩니다. 값을 "중간"으로 설정하면 셀 내부의 내용이 가운데에 정렬됩니다. 물론 요즘에는 표 레이아웃이 구식으로 간주되지만 예외적인 경우에 "를 지정하여 시뮬레이션할 수 있습니다. 디스플레이: 테이블 셀".

나는 보통 수직 정렬을 위해 이 옵션을 사용합니다. 다음은 완료된 프로젝트에서 가져온 레이아웃의 예입니다. 관심을 끄는 것은 이런 방식으로 수직 중앙에 위치한 그림이다.

.one_product .img_wrapper ( 디스플레이 : 테이블 셀 ; 높이 : 169px ; 수직 정렬 : 중간 ; 오버플로 : 숨김 ; 배경 : #fff ; 너비 : 255px ; ) .one_product img ( 최대 높이 : 169px ; 최대 너비 : 100 % ; 최소 너비: 140px ; 표시: 블록 여백: 0 자동;

요소에 "none"이 아닌 "float" 세트가 있으면 어떤 경우에도 블록(표시: 블록)이 된다는 점을 기억해야 합니다. 그러면 추가 블록 래퍼를 사용해야 합니다.

추가 인라인 요소와 정렬

인라인 요소의 경우 "를 사용할 수 있습니다. 수직 정렬: 중간". 또한 "가 포함된 모든 요소는 디스플레이: 인라인" 같은 줄에 있는 항목은 공통 중심선에 맞춰 정렬됩니다.

상위 블록의 높이와 동일한 높이의 보조 블록을 생성해야 합니다. 그러면 원하는 블록이 중앙에 배치됩니다. 이렇게 하려면 의사 요소:before 또는:after를 사용하는 것이 편리합니다.

.example-wrapper6 ( 높이 : 300px ; 텍스트 정렬 : 중앙 ; 배경 : #70DAF1 ; ) .pudge ( 디스플레이 : 인라인 블록 ; 수직 정렬 : 중간 ; 배경 : url(pudge.png) ; 배경색 : # fff ; 너비: 200px ; 높이: 200px ; .riki ( 디스플레이: 인라인 블록 ; 높이: 100% ; 수직 정렬: 중간 ; )

디스플레이: 플렉스 및 정렬

Explorer 8 사용자에 대해 별로 관심이 없거나 그들을 위해 추가 자바스크립트를 삽입할 의향이 있다면 "display: flex"를 사용할 수 있습니다. Flex 상자는 정렬 문제를 처리하는 데 탁월하며 "margin: auto"를 작성하여 내용을 내부 중앙에 배치합니다.

지금까지 이 방법은 거의 접해본 적이 없지만 특별한 제한은 없습니다.

.example-wrapper7 ( 디스플레이 : 플렉스 ; 높이 : 300px ; 배경 : #AEB96A ; ) .example-wrapper7 img ( 여백 : 자동 ; )

글쎄, 그게 내가 CSS 정렬에 대해 쓰고 싶었던 전부입니다. 이제 콘텐츠를 중앙에 배치하는 것은 문제가 되지 않습니다!

독자 여러분, 오늘은 블록의 수직 정렬 문제를 다루겠습니다. div.

아마도 당신은 이미 훌륭한 CSS 속성의 존재에 대해 알고 있을 것입니다. 수직 정렬.그리고 하나님께서는 수직 정렬을 위해 정확하게 이 속성을 사용하라고 명령하셨습니다.

문제의 공식화:수직을 기준으로 가변 높이 블록의 내용을 중앙에 배치해야 합니다.

이제 문제 해결을 시작해 보겠습니다.

따라서 블록이 있고 높이가 변경될 수 있습니다.

콘텐츠 차단

가장 먼저 떠오르는 것은 다음과 같은 페인트를 수행하는 것입니다.

콘텐츠 차단

이 문구를 믿을 만한 모든 이유가 있습니다. 콘텐츠 차단 div 컨테이너의 중앙 높이에 정렬됩니다.

하지만 거기에는 없었습니다! 이런 식으로 예상되는 중심 정렬을 달성할 수 없습니다. 그리고 왜? 모든 것이 올바르게 표시된 것 같습니다. 이것이 문제인 것으로 밝혀졌습니다: 재산 수직 정렬표 셀의 내용을 정렬하거나 인라인 요소를 서로 기준으로 정렬하는 데에만 사용할 수 있습니다.

표 셀 내부의 정렬과 관련하여 모든 것이 명확하다고 생각합니다. 하지만 인라인 요소를 사용하는 또 다른 경우를 설명하겠습니다.

인라인 요소의 수직 정렬

줄 태그로 구분된 텍스트 줄이 있다고 가정합니다. 부분으로:

환영합니다 조각텍스트!

인라인 태그는 모양 때문에 내용이 새 줄로 바뀌지 않는 컨테이너입니다.

블록 태그의 동작으로 인해 컨테이너의 내용이 새 줄로 줄바꿈됩니다.

블록 태그입니다. 텍스트 조각을 블록으로 묶으면
, 그러면 각각은 새로운 줄에 있게 될 것입니다. 태그 사용 , 이는 달리
는 소문자이며 컨테이너는 새 줄로 이동되지 않습니다. 모든 컨테이너는 한 줄에 남게 됩니다.

컨테이너 특별한 서식(색상, 다른 글꼴 등으로 강조 표시)으로 텍스트의 일부를 지정할 때 사용하기 편리합니다.

컨테이너용 다음 CSS 속성을 적용합니다.

#perviy( 수직 정렬:sub; ) #vtoroy( 수직 정렬:3px; ) #tretiy( 수직 정렬:-3px; )

결과 텍스트 줄은 다음과 같습니다.

이는 인라인 요소의 수직 정렬과 CSS 속성에 지나지 않습니다. 수직 정렬이 작업에 완벽하게 대처합니다.

약간 산만해졌으므로 이제 주요 작업으로 돌아갑니다.

div 컨테이너의 수직 정렬

무슨 일이 있어도 div 컨테이너 내 정렬을 위해 속성을 사용합니다. 수직 정렬. 이미 말했듯이 이 속성은 인라인 요소를 정렬하는 경우에 사용할 수 있습니다(이 경우는 위에서 자세히 설명했으며 div 컨테이너의 정렬에는 적합하지 않습니다). 남은 것은 그 사실을 활용하는 것뿐이다. 수직 정렬테이블 셀에서 작동합니다.

이것을 어떻게 사용할 수 있나요? 우리는 테이블이 없고 div 컨테이너로 작업합니다.

하, 정말 간단한 것 같네요.

CSS 속성 표시하다 div 블록을 테이블 셀로 바꿀 수 있습니다. 이 작업은 쉽고 자연스럽게 수행할 수 있습니다.

클래스 div가 있다고 가정해 보겠습니다. 텍스트 정렬:

콘텐츠 차단

이 블록에 대해 다음 CSS 속성을 지정합니다.

Textalign( 표시: 테이블 셀; )

이 CSS 명령어는 div를 어떤 식으로든 시각적으로 변경하지 않고도 기적적으로 테이블 셀로 변환합니다. 그리고 테이블 셀의 경우 속성을 적용할 수 있습니다. 수직 정렬완전하고 원하는 수직 정렬이 작동합니다.

그러나 모든 것이 그렇게 간단하게 끝날 수는 없습니다. 우리는 훌륭한 IE 브라우저를 가지고 있습니다. 그는 부동산을 다루는 방법을 모른다 디스플레이: 테이블 셀(웹사이트 htmlbook.ru에서 다양한 브라우저에서 이 CSS 속성의 기능을 설명하는 표를 읽어 보시기 바랍니다.) 그러므로 우리는 다양한 트릭을 사용해야 할 것입니다.

모든 브라우저의 div 컨테이너에서 정렬을 수행하는 방법에는 여러 가지가 있습니다.

  • 추가 보조 div 컨테이너를 사용하는 방법
  • 표현식을 사용하는 방법. 이는 블록 높이의 까다로운 계산과 연결됩니다. JavaScript에 대한 지식이 없으면 이 작업을 수행할 수 없습니다.
  • line-height 속성을 사용합니다. 이 방법은 높이가 알려진 블록의 수직 정렬에만 적합하므로 일반적인 경우에는 적용할 수 없습니다.
  • IE 브라우저의 경우 절대 및 상대 콘텐츠 오프셋을 사용합니다. 이 방법이 가장 이해하기 쉽고 간단한 것 같습니다. 또한 가변 높이 div 컨테이너에 대해 구현 가능합니다. 우리는 그것에 대해 더 자세히 설명하겠습니다.

아시다시피, 우리는 속성에 대한 오해와 관련된 IE의 수직 정렬 문제를 해결해야 합니다. 디스플레이: 테이블 셀(IE6도, IE7도, IE8이 속성에 익숙하지 않습니다). 그러므로, 조건부 주석특히 IE 브라우저에 대해 다양한 CSS 속성을 지정합니다.

조건부 주석

건축 유형:

... Инструкции, действующие только в случае выполнения условия в квадратных скобках...

조건부 주석이라고 합니다(조심하세요. 조건부 주석의 유형은 공백까지 제공된 예와 완전히 일치해야 합니다).

이러한 조건부 주석에 포함된 지침은 이 코드를 해석하는 브라우저가 IE 제품군에 속하는 경우에만 실행됩니다.

따라서 조건부 주석을 사용하면 IE를 제외한 모든 브라우저에서 코드 조각을 숨길 수 있습니다.

문제의 해결

이 모든 파슬리로 인해 HTML 코드에 두 개의 추가 컨테이너를 제공해야 합니다. 텍스트 블록은 다음과 같습니다.

일종의 확인 문자입니다.
두 줄로 구성되어 있습니다.

클래스 div 컨테이너의 경우 텍스트 정렬모든 일반 브라우저(물론 IE는 제외)에 대해 콘텐츠를 수직으로 정렬하는 CSS 속성이 설정됩니다.

디스플레이: 테이블 셀; 수직 정렬: 중간;

그리고 블록의 너비와 높이를 설정하는 두 가지 추가 속성:

너비: 500px; 높이: 500px;

이는 모든 브라우저에서 컨테이너의 내용을 수직을 기준으로 중앙에 정렬하기에 충분합니다. IE를 제외하고.

이제 정렬과 관련된 속성을 추가하기 시작합니다. IE 제품군 브라우저의 경우(우리는 추가 블록을 사용했습니다. div그리고 기간):

태그를 참조하면 div클래스 블록 내부 텍스트 정렬. 이렇게 하려면 먼저 클래스 이름을 표시한 다음, 액세스하려는 태그를 공백으로 구분하여 표시해야 합니다.

Textalign div( 위치: 절대; 위쪽: 50%; )

이 디자인의 의미는 다음과 같습니다. 클래스가 있는 블록 내의 모든 div 태그에 대해 텍스트 정렬나열된 속성을 적용합니다.

따라서 블록에 지정된 스타일은 텍스트 정렬수정되었습니다:

Textalign( 표시: 테이블 셀; 수직 정렬: 중간; 너비:500px; 높이: 500px; 위치: 상대; )

이제 텍스트 블록의 왼쪽 상단 지점이 50% 아래로 이동되었습니다.

무슨 일이 일어나고 있는지 설명하기 위해 그림을 그렸습니다.

사진에서 볼 수 있듯이 우리는 어느 정도 진전을 이루었습니다. 하지만 그게 전부는 아닙니다! 노란색 블록의 왼쪽 상단 지점은 실제로 상위(보라색) 블록을 기준으로 50% 아래로 이동했습니다. 하지만 보라색 블록 높이의 50%에 있어야 합니다. 노란색 블록의 중앙, 왼쪽 상단 지점이 아닙니다.

이제 태그가 작동하게 됩니다. 기간그리고 상대적인 위치는 다음과 같습니다:

텍스트 정렬 범위( 위치: 상대; 위쪽: -50%; )

따라서 노란색 블록을 초기 위치에 비해 높이의 50% 위로 이동했습니다. 아시다시피 노란색 블록의 높이는 중앙에 있는 콘텐츠의 높이와 같습니다. 그리고 스팬 컨테이너의 마지막 작업은 콘텐츠를 보라색 블록 중앙에 배치했습니다. 만세!

장난 좀 치자

우선 모든 일반 브라우저에서 파슬리를 숨기고 IE용으로 열어야 합니다. 물론 조건부 주석을 사용하여 이 작업을 수행할 수 있습니다.

작은 문제가 있습니다.중앙에 있는 콘텐츠가 너무 높으면 불쾌한 결과가 발생합니다. 세로 스크롤에 추가 높이가 있습니다.

문제 해결 방법:속성을 추가해야 합니다 오버플로: 숨김차단하다 텍스트 정렬.

부동산을 자세히 알아보세요. 과다에서 가능합니다.

블록에 대한 최종 CSS 지침 텍스트 정렬형식은 다음과 같습니다.

Textalign( 표시: 테이블 셀; 수직 정렬: 중간; 너비:500px; 높이: 500px; 위치: 상대; 오버플로: 숨김; 테두리: 1px 단색 검정색; )

죄송합니다. 한 가지 중요한 사항을 언급하는 것을 잊었습니다. 당신이 시도한다면 클래스 블록의 높이를 설정 텍스트 정렬백분율로, 그렇다면 당신은 아무것도 작동하지 않습니다.

가변 높이 블록의 중심 맞추기

클래스 블록의 높이를 설정해야 하는 경우가 매우 많습니다. 텍스트 정렬픽셀 단위가 아니라 상위 블록 높이의 백분율로 표시하고 div 컨테이너의 내용을 가운데에 정렬합니다.

문제는 테이블 셀에서는 이 작업을 수행하는 것이 불가능하다는 것입니다(그러나 클래스 블록은 텍스트 정렬속성 덕분에 정확히 테이블 셀로 변합니다. 표시:테이블 셀).

이 경우 CSS 속성이 지정된 외부 블록을 사용해야 합니다. 표시:테이블이미 높이의 백분율 값을 설정했습니다. 그런 다음 CSS 지시문을 사용하여 그 안에 중첩된 블록을 만듭니다. 표시:테이블 셀, 상위 블록의 높이를 행복하게 상속합니다.

이 예에서는 가변 높이 블록을 구현하기 위해 CSS를 약간 편집합니다.

수업에 텍스트 정렬우리는 부동산 가치를 바꿀 것입니다 표시하다와 함께 테이블 셀~에 테이블정렬 지시어를 제거하십시오. 수직 정렬: 중간. 이제 높이 값을 500픽셀에서 예를 들어 100%로 안전하게 변경할 수 있습니다.

따라서 클래스 블록의 CSS 속성은 텍스트 정렬다음과 같이 보일 것입니다 :

Textalign( 표시: 테이블; 너비:500px; 높이: 100%; 위치: 상대; 오버플로: 숨김; 테두리: 1px 단색 검정; )

남은 것은 콘텐츠 센터링을 구현하는 것뿐입니다. 이렇게 하려면 클래스 블록에 중첩된 div 컨테이너를 사용하세요. 텍스트 정렬(이것은 그림과 동일한 노란색 블록입니다.) CSS 속성을 설정해야 합니다. 표시:테이블 셀, 그러면 상위 블록에서 100% 높이를 상속받습니다. 텍스트 정렬(보라색 블록). 그리고 중앙에 중첩된 div 컨테이너의 콘텐츠를 속성과 정렬하는 것을 막을 수 있는 것은 없습니다. 수직 정렬: 중간.

컨테이너에 중첩된 div 블록에 대한 CSS 속성의 또 다른 추가 목록을 얻습니다. 텍스트 정렬.

Textalign div( 표시: 테이블 셀; 수직 정렬: 중간; )

그게 전부입니다. 원하는 경우 콘텐츠를 중앙에 두고 가변 높이를 가질 수 있습니다.

가변 높이 블록의 수직 정렬에 대한 자세한 내용은 을(를) 참고하십시오.

CSS를 사용하여 객체를 수직으로 중앙에 배치하는 근본적으로 다른 방법이 여러 가지 있지만 올바른 방법을 선택하는 것은 까다로울 수 있습니다. 그 중 일부를 살펴보고, 얻은 지식을 활용하여 작은 웹사이트도 만들어 보겠습니다.

CSS를 사용하면 수직 중앙 정렬을 달성하기가 쉽지 않습니다. 여러 가지 방법이 있지만 모든 브라우저에서 모든 방법이 작동하는 것은 아닙니다. 5가지 방법과 각 방법의 장단점을 살펴보겠습니다. 예.

첫 번째 방법

이 방법은 일부 요소를 설정한다고 가정합니다.

디스플레이 메소드를 테이블로 사용한 후 수직 정렬 속성을 사용할 수 있습니다(요소마다 다르게 작동함).

중앙에 위치해야 하는 몇 가지 유용한 정보입니다.
#wrapper( 디스플레이: 테이블; ) #cell( 디스플레이: 테이블 셀; 수직 정렬: 중간; )

찬성

  • 콘텐츠는 높이를 동적으로 변경할 수 있습니다(높이는 CSS에 정의되어 있지 않습니다).
  • 공간이 충분하지 않으면 콘텐츠가 잘리지 않습니다.

마이너스

  • IE 7 이하에서는 작동하지 않습니다
  • 중첩된 태그가 많음

두 번째 방법

이 방법은 상단을 50%로 설정하고 여백 상단에서 콘텐츠 높이의 절반을 뺀 div의 절대 위치 지정을 사용합니다. 이는 객체가 CSS 스타일에 정의된 고정 높이를 가져야 함을 의미합니다.

높이는 고정되어 있으므로 Overflow:auto를 설정할 수 있습니다. 콘텐츠가 포함된 div의 경우 콘텐츠가 맞지 않으면 스크롤 막대가 나타납니다.

여기에 내용이 있습니다
#content ( 위치: 절대; 상단: 50%; 높이: 240px; margin-top: -120px; /* 높이의 절반 빼기 */ )

찬성

  • 모든 브라우저에서 작동합니다.
  • 불필요한 중첩이 없습니다.

마이너스

  • 공간이 충분하지 않으면 콘텐츠가 사라집니다. 예를 들어 div가 본문 안에 있고 사용자가 창을 더 작게 만든 경우 스크롤 막대가 나타나지 않습니다.

세 번째 방법

이 방법에서는 콘텐츠 div를 다른 div로 래핑합니다. 높이를 50%(높이: 50%;)로 설정하고 아래쪽 여백을 높이의 절반(margin-bottom:-contentheight;)으로 설정하겠습니다. 콘텐츠는 부동을 지우고 중앙에 배치됩니다.

여기에 내용이 있습니다
#floater( float: 왼쪽; 높이: 50%; margin-bottom: -120px; ) #content( 클리어: 둘 다; 높이: 240px; 위치: 상대; )

찬성

  • 모든 브라우저에서 작동합니다.
  • 공간이 충분하지 않은 경우(예: 창이 축소된 경우) 콘텐츠가 잘리지 않고 스크롤 막대가 나타납니다.

마이너스

  • 나는 한 가지만 생각할 수 있습니다: 여분의 빈 요소가 사용되고 있다는 것입니다.

네 번째 방법.

이 방법은 position:absolute 속성을 사용합니다. 고정된 크기(너비 및 높이)가 있는 div의 경우. 그런 다음 좌표를 top:0으로 설정합니다. 하단:0; , 높이가 고정되어 있어서 늘어나지 않고 중앙에 정렬됩니다. 이는 고정 너비 블록 요소(여백: 0 auto;)를 수평으로 중앙에 맞추는 잘 알려진 방법과 매우 유사합니다.

중요한 정보.
#content( 위치: 절대; 위쪽: 0; 아래쪽: 0; 왼쪽: 0; 오른쪽: 0; 여백: 자동; 높이: 240px; 너비: 70%; )

찬성

  • 매우 간단합니다.

마이너스

  • Internet Explorer에서는 작동하지 않습니다
  • 컨테이너에 공간이 충분하지 않으면 스크롤 막대 없이 내용이 잘립니다.

5번째 방법

이 방법을 사용하면 텍스트 한 줄을 가운데 정렬할 수 있습니다. 간단히 텍스트 높이(line-height)를 요소 높이(height)와 동일하게 설정합니다. 그러면 중앙에 선이 표시됩니다.

일부 텍스트 줄
#content( 높이: 100px; 줄 높이: 100px; )

찬성

  • 모든 브라우저에서 작동합니다.
  • 텍스트가 맞지 않으면 자르지 않습니다.

마이너스

  • 텍스트에만 작동합니다(블록 요소에는 작동하지 않음).
  • 한 줄 이상의 텍스트가 있으면 매우 나빠 보입니다.

이 방법은 버튼이나 텍스트 필드의 텍스트 중앙 정렬과 같은 작은 요소에 매우 유용합니다.

이제 수직 중앙 정렬을 달성하는 방법을 알았으니 다음과 같은 간단한 웹사이트를 만들어 보겠습니다.

1 단계

의미론적 마크업으로 시작하는 것은 항상 좋습니다. 우리 페이지는 다음과 같이 구성됩니다.

  • #floater(콘텐츠를 중앙에 배치)
  • #centred(중앙 요소)
    • #옆
      • #심벌 마크
      • #nav(목록
      • #콘텐츠
    • #bottom (저작권 및 기타 관련)

    다음과 같은 HTML 마크업을 작성해 보겠습니다.

    중심이 되는 기업

    페이지 제목

    프로세스 중심 협업 및 아이디어 공유 후 부가가치 아웃소싱을 전체적으로 재설계합니다. 활성화된 필수 사항을 통해 영향력 있는 틈새 시장을 적극적으로 단순화합니다. 매력적인 시나리오 이후 전체적으로 프리미엄 혁신을 주도합니다. 최첨단 제조 제품을 통해 인적 자본의 높은 기준을 원활하게 재투자하십시오. 강력한 보탈보다 먼저 표준 준수 스키마를 구별적으로 신디케이트합니다. 즉시 사용 가능한 정보와 관련하여 활용된 웹 준비 상태를 고유하게 재구성합니다.

    제목 2

    고객 지향 프로세스가 아닌 맞춤형 웹 준비성을 효율적으로 수용합니다. 적극적 기술에 대비하여 크로스 플랫폼 필수 사항을 적극적으로 확장합니다. 전사적 인터페이스 없이 다분야 메타서비스를 편리하게 강화합니다. 집중된 e-마켓을 통해 경쟁력 있는 전략 테마 영역을 편리하게 간소화합니다. 부가가치 시장과 비교하여 세계적 수준의 커뮤니티를 인광적으로 신디케이트합니다. 강력한 e-서비스에 앞서 전체적인 서비스를 적절하게 재창조합니다.

    저작권 고지는 여기에 표시됩니다.



    2 단계

    이제 페이지에 요소를 배치하는 가장 간단한 CSS를 작성하겠습니다. 이 코드를 style.css 파일에 저장해야 합니다. 링크가 html 파일에 기록되는 것은 바로 이것입니다.

    Html, 본문(여백: 0; 패딩: 0; 높이: 100%; ) 본문( 배경: url("page_bg.jpg") 50% 50% 반복 없음 #FC3; 글꼴 계열: Georgia, Times, serifs; ) #floater ( 위치: 상대; 부동: 왼쪽; 높이: 50%; 여백-하단: -200px; 너비: 1px; ) #centered ( 위치: 상대; 지우기: 왼쪽; 높이: 400px; 너비: 80%; 최대 -너비: 800px; 최소 너비: 400px; 여백: 0 자동; 테두리: 4px 솔리드 #666; ) #bottom ( 위치: 절대; 하단: 0; ) #nav ( 위치: 절대; 왼쪽: 0 ; 하단: 0; 패딩: 20px; #content(위치: 절대; 왼쪽: 0; 상단: 0; 하단: 0; 오버플로: 자동; 패딩: 20px;

    콘텐츠 센터를 정렬하기 전에 본문과 HTML의 높이를 100%로 설정해야 합니다. 높이는 내부 및 외부 패딩(padding 및 margin) 없이 계산되므로 스크롤바가 없도록 패딩(padding)을 0으로 설정합니다.

    "플로터" 요소의 아래쪽 여백은 콘텐츠 높이(400px)의 절반, 즉 -200px와 같습니다.

    이제 페이지는 다음과 같이 표시됩니다.

    #중앙 요소 너비 80%. 이로 인해 작은 화면에서는 사이트가 더 좁아지고 큰 화면에서는 더 넓어집니다. 대부분의 사이트는 왼쪽 상단에 있는 새로운 와이드 모니터에서 음란해 보입니다. min-width 및 max-width 속성은 페이지가 너무 넓거나 너무 좁아 보이지 않도록 페이지를 제한합니다. Internet Explorer는 이러한 속성을 지원하지 않습니다. 고정폭으로 설정해야 합니다.

    #centered 요소에는 position:relative 세트가 있으므로 그 안에 있는 요소의 절대 위치 지정을 사용할 수 있습니다. 그런 다음 Overflow:auto;를 설정합니다. 내용이 맞지 않으면 스크롤바가 나타나도록 #content 요소에 사용합니다.

    3단계

    마지막으로 할 일은 페이지를 좀 더 매력적으로 보이도록 몇 가지 스타일을 추가하는 것입니다. 메뉴부터 시작해 보겠습니다.

    #nav ul ( 목록 스타일: 없음; 패딩: 0; 여백: 20px 0 0 0; 텍스트 들여쓰기: 0; ) #nav li ( 패딩: 0; 여백: 3px; ) #nav li a ( 디스플레이: 블록; 배경 색상: #e8e8e8; 여백: 0; 테두리 하단: 1px 솔리드: 오른쪽; 내용: """; 글꼴 두께: 굵게; 부동: 오른쪽; 여백: 0 2px 0 5px; f8f8f8; 테두리 하단 색상 : #777; ) #nav li a:hover::after ( 여백: 0 0 0 7px; 색상: #f93; ) #nav li a:active ( 패딩: 8px 7px 6px 7px; )

    메뉴를 더 보기 좋게 만들기 위해 우리가 한 첫 번째 일은 list-style:none 속성을 설정하여 글머리 기호를 제거하고 패딩과 패딩도 설정하는 것이었습니다. 왜냐하면 기본적으로 브라우저마다 크게 다르기 때문입니다.

    그런 다음 링크가 블록 요소로 렌더링되도록 지정했습니다. 이제 표시되면 해당 요소가 위치한 요소의 전체 너비에 걸쳐 늘어납니다.

    메뉴에 사용한 또 다른 흥미로운 점은 의사 클래스:before 및:after입니다. 요소 앞뒤에 무언가를 추가할 수 있습니다. 이는 각 링크 끝에 화살표와 같은 아이콘이나 기호를 추가하는 좋은 방법입니다. 이 트릭은 Internet Explorer 7 이하에서는 작동하지 않습니다.

    4단계

    그리고 마지막으로 디자인에 나사 몇 개를 추가해 더욱 아름다워질 것입니다.

    #centered ( -webkit-border-radius: 8px; -moz-border-radius: 8px; border-radius: 8px; ) h1, h2, h3, h4, h5, h6 ( 글꼴 계열: Helvetica, Arial, sans- serif; 글꼴 두께: 일반; 색상: #666; ) h1 ( 색상: #f93; 테두리 하단: 1px 솔리드 #ddd; 문자 간격: -0.05em; 글꼴 두께: 굵게; 여백 상단: 0; 패딩 상단: 0; ) #하단 ( 패딩: 10px; 글꼴 크기: 0.7em; 색상: #f03; ) #logo ( 글꼴 크기: 2em; 텍스트 정렬: 센터; 색상: #999; ) #logo 강함( 글꼴 두께: 일반; ) #logo 범위( 디스플레이: 블록; 글꼴 크기: 4em; 줄 높이: 0.7em; 색상: #666; ) p, h2, h3( 줄 높이: 1.6em; ) (색상: #f03; )

    이러한 스타일에서는 #centered 요소에 둥근 모서리를 설정했습니다. CSS3에서는 border-radius 속성을 사용하여 이 작업을 수행합니다. Mozilla Firefox 및 Safari/Webkit에 -moz 및 -webkit 접두사를 사용하는 것 외에는 일부 브라우저에서는 아직 구현되지 않았습니다.

    호환성

    이미 짐작하셨겠지만 호환성 문제의 주요 원인은 Internet Explorer입니다.

    • #floater 요소에는 너비가 설정되어 있어야 합니다.
    • IE 6에는 메뉴 주위에 추가 패딩이 있습니다.

    조회수 235881회

    div 블록을 생성할 때 순수한 CSS를 사용하여 div를 가로 및 세로로 중앙에 배치해야 하는 상황에 직면했을 것입니다. 예를 들어 . 센터링을 구현하는 방법에는 여러 가지가 있으며, 이 기사에서는 CSS 또는 jQuery를 사용하여 내가 가장 좋아하고 가장 쉬운 방법을 공유하겠습니다.

    첫째, 기본 사항은 다음과 같습니다.

    CSS의 가로 가운데 맞춤

    이것은 하기 쉽습니다. 여유우리를 위해 div차단하다.

    클래스명( 여백:0 자동; 너비:200px; 높이:200px; )

    div 블록을 가로로만 가운데에 배치하려면 블록의 너비(너비)를 결정하고 속성을 사용해야 합니다. 자동여백을 위해 왼쪽과 오른쪽. 이 방법은 모든 블록 요소(div, p, h1 등)에 작동합니다. 인라인 요소(링크, 이미지...)에 가로 가운데 맞춤을 적용하려면 매개변수를 적용해야 합니다. 표시하다:차단하다;

    CSS의 가로 및 세로 가운데 맞춤

    div 블록을 가로와 세로로 동시에 중앙에 배치하는 것은 조금 더 까다롭습니다. div 블록의 크기를 미리 알아야 합니다.

    클래스 이름(너비:300px; 높이:200px; 위치:절대; 왼쪽:50%; 위쪽:50%; 여백:-100px 0 0 -150px; )

    사용하여 순수한블록의 위치를 ​​지정함으로써 주변 요소에서 블록을 분리하고 브라우저 창의 크기를 기준으로 블록의 위치를 ​​결정할 수 있습니다. div 블록을 다음으로 이동하세요. 50% 창의 왼쪽과 위쪽에 있습니다. 이제 블록의 왼쪽 상단이 브라우저 창 중앙에 있습니다. 남은 것은 div 블록을 다음으로 이동하여 페이지 중앙에 설치하는 것입니다. 너비의 절반왼쪽과 높이의 절반위로. 만세! 그 결과 순수 CSS 코드를 사용하여 뛰어난 블록 센터링이 이루어졌습니다.

    jQuery를 사용한 수평 및 수직 센터링

    앞서 언급했듯이 CSS 센터링 방법은 고정된 크기에서만 작동합니다. 차원이 정의되지 않은 경우 jQuery 메서드가 도움이 됩니다.

    $(window).resize(function())( $(".className").css(( 위치:"절대", 왼쪽: ($(window).width() - $(".className").outerWidth ( ))/2, 상단: ($(window).height() - $(".className").outerHeight())/2 )); // 창이 로드될 때 함수를 실행하려면: $(window).resize();

    이 메서드의 작업은 다음 줄을 사용하여 resize() 함수를 실행하는 것입니다. $(창).크기 조정(). 이 기능은 브라우저 창의 크기가 조정될 때마다 작동합니다. 우리는 사용 바깥너비()그리고 외부높이(), 왜냐하면 대조적으로 너비()그리고 키(), 반환되는 크기에 패딩과 테두리 두께가 포함됩니다. 마지막 줄은 페이지가 로드될 때 div 블록을 중앙에 배치하는 프로세스를 시작합니다.

    이 방법을 사용하면 div의 크기를 알 수 없다는 장점이 있습니다. 가장 큰 단점은 JavaScript가 활성화된 경우에만 작동한다는 것입니다. 따라서 이 방법은 VKontakte, Facebook 등과 같은 다기능 인터페이스에 적합합니다.

    언제나 그렇듯이, 댓글을 통해 여러분이 선호하는 블록 중심 정렬 방법을 자유롭게 제안해 주세요.

    웹 페이지를 레이아웃하는 과정에서 블록을 중앙에 배치하는 작업은 매우 일반적입니다. 이는 수직 또는 수평 중심이 될 수 있습니다.

    예를 들어 사이트의 너비가 고정되어 있는 경우 브라우저 창 중앙에 정렬하는 것이 합리적입니다. 이렇게 하면 텍스트를 더 쉽게 읽을 수 있습니다(특히 모니터가 큰 경우). 일부 디자인에서는 일반적으로 브라우저 창 중앙에 블록을 배치하는 작업이 포함됩니다. 즉, 수직 및 수평 중앙에 배치됩니다.

    먼저 수평 센터링에 대해 이야기해 보겠습니다. 가장 널리 사용되는 기술은 오른쪽과 왼쪽의 치수를 설정하여 블록을 중앙에 맞추는 것입니다. "자동"으로 여백. id = "container"이고 너비가 860px인 블록을 중앙에 배치한다고 가정해 보겠습니다. 이 경우 CSS 파일에 다음을 작성해야 합니다.

    #컨테이너(
    배경색:#EEE;
    너비:860px;
    여백:0px 자동;
    }

    그러나 I.E. 이전 버전(예: 5.0)에서는 이 블록을 중앙에 정렬하지 않습니다. 물론 더 이상 그런 오래된 브라우저를 사용하는 사람은 없지만(일일 방문자 1800명 중 1명만), 만약을 대비해 그곳에서도 작동하도록 하는 것이 좋습니다 :)

    이렇게 하려면 상위 요소, 즉 블록의 중심에 있는 요소(보통 상위 요소는 BODY 태그임)에서 매개변수를 설정해야 합니다. 텍스트 정렬:가운데. 이 경우 블록은 중앙에 정렬되지만 모든 내용도 중앙에 정렬되지만 필요하지는 않습니다. 따라서 이 블록 내에서 기본 정렬을 설정합니다. 텍스트 정렬:왼쪽 .

    본문(텍스트 정렬:가운데)

    #컨테이너(
    배경색:#EEE;
    너비:860px;
    여백:0px 자동;
    텍스트 정렬:왼쪽;
    }

    를 기반으로 블록을 수평으로 정렬하는 또 다른 방법도 있습니다. 아시다시피 기본적으로 모든 블록 요소는 상위 요소의 왼쪽 가장자리에 눌려집니다. 따라서 중앙에 정렬하려면 다음이 필요합니다.

    2. 브라우저 창 너비의 50%만큼 오른쪽으로 이동합니다.

    3. 네거티브 패딩을 사용하여 블록 너비의 절반에 해당하는 거리만큼 왼쪽으로 이동합니다.

    이렇게 하면 블록이 중앙에 위치하게 됩니다. 더 명확하게 이해하려면 아래 비디오를 시청하십시오.

    예시 CSS 코드:

    #컨테이너(
    배경색:#559964;
    위치:절대;
    왼쪽:50%;
    여백-왼쪽:-430px;

    너비:860px;
    }

    브라우저 창을 기준으로 하지 않고 예를 들어 다른 블록을 기준으로 블록을 배치하려면 이 다른 블록에 대해 다음을 설정해야 합니다. 위치:상대적;

    중앙에 배치되어야 하는 #container 블록이 #wrap 블록 내부에 있다고 가정해 보겠습니다. 그러면 코드는 다음과 같습니다.

    #wrap(위치:상대)

    #컨테이너(
    배경색:#559964;
    위치:절대;
    왼쪽:50%;
    여백-왼쪽:-430px;

    너비:860px;
    }

    이제 블록을 페이지 중앙에 정렬해야 하는 경우를 고려해 보겠습니다. 수평 및 수직 센터링을 동시에 적용합니다. 여기서 다시 포지셔닝이 작용합니다. 그래서 우리는 다음이 필요합니다:

    1. 블록을 절대 위치로 설정

    2. 오른쪽으로 50%, 아래로 50% 이동하여 왼쪽 상단 모서리를 브라우저 창 중앙에 배치합니다.

    3. 네거티브 패딩을 사용하여 블록 높이의 절반에 해당하는 거리만큼 위쪽으로 이동하고 블록 너비의 절반에 해당하는 거리만큼 왼쪽으로 이동합니다.

    그러면 웹페이지 중앙에 블록이 배치됩니다.

    블록의 높이가 600px이고 너비가 860px이라고 가정해 보겠습니다. 그러면 CSS 코드는 다음과 같습니다.

    #컨테이너(
    배경색:#559964;
    위치:절대;
    상단:50%;

    왼쪽:50%;
    여백 상단:-300px;
    여백-왼쪽:-430px;

    높이:600px;
    너비:860px;
    }

    원칙 자체가 당신에게 명확하기를 바랍니다.

    이 강의 평가: 1 2 3 4 5

    코멘트:

    제가 가장 먼저 강의를 시청하겠습니다!!!

    어... 두 번째 =) 최근 IE에서 이 문제가 발생해서 오랫동안 고생했습니다.)) 감사합니다 =)

    감사합니다. 북마크한 페이지)))

    새로운 수업을 해주셔서 정말 감사합니다, Andrey!

    그냥 감사합니다. 여기에 추가할 내용이 없을 것 같습니다.))

    교훈을 주셔서 감사합니다. 며칠 전에 문자 그대로 이 작업을 시도했지만 약간의 고통을 겪고 일시적으로 미뤄두었습니다.

    하지만 문제가 있습니다. Mozille Firefox의 사이트는 정렬을 원하지 않고 왼쪽 가장자리에 고정되어 있습니다. 위의 어느 것도 도움이 되지 않습니다(Opera에서도 동일).

    왜 이것이 작동하지 않습니까? - "브라우저 창을 기준으로 하지 않고 예를 들어 다른 블록을 기준으로 블록을 배치하려면 이 다른 블록에 대해 position:relative를 설정해야 합니다."

    정말 감사합니다!! 정말 감사합니다!

    모든 것이 괜찮지만 어떤 이유로든 브라우저를 업데이트한 후에만 모든 이미지가 제자리에 나타납니다. 왜 이런 일이 발생하는지 알려주세요.

    안드레이 씨, 사이트 검색을 추가해주세요.

    의견을 추가하다.



질문이 있으신가요?

오타 신고

편집자에게 전송될 텍스트: