programing

요소의 중심을 수평 및 수직으로 맞추는 방법

lastmoon 2023. 8. 15. 11:24
반응형

요소의 중심을 수평 및 수직으로 맞추는 방법

탭 내용을 세로로 중심을 맞추려고 하는데 CSS 스타일을 추가할 때display:inline-flex수평 텍스트 정렬이 사라집니다.

각 탭에 대해 텍스트 x와 y를 모두 정렬하려면 어떻게 해야 합니까?

* { box-sizing: border-box; }
#leftFrame {
  background-color: green;
  position: absolute;
  left: 0;
  right: 60%;
  top: 0;
  bottom: 0;
}
#leftFrame #tabs {
  background-color: red;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 25%;
}
#leftFrame #tabs div {
  border: 2px solid black;
  position: static;
  float: left;
  width: 50%;
  height: 100%;
  text-align: center;
  display: inline-flex;
  align-items: center;
}
<div id=leftFrame>
  <div id=tabs>
    <div>first</div>
    <div>second</div>
  </div>
</div>

CSS 플렉스박스/그리드 방법:

예제 여기 / 전체 화면 예제

지원되는 브라우저에서 다음을 설정합니다.display 의요소에 대한 flex 및사를 합니다.align-items: center 및 수직센 ▁vertical▁for.justify-content: center수평 센터링용.상위 컨테이너도 높이(이 경우 100%)가 필요합니다.

html, body, .container {
    height: 100%;
}

.container {
    display: flex;
    align-items: center;
    justify-content: center;
}
<div class="container"> 
  <span>I'm vertically/horizontally centered!</span>
</div>


transform translateX/translateY방법:

예제 여기 / 전체 화면 예제

지원되는 브라우저(대부분)에서top: 50%/left: 50% translateX(-50%) translateY(-50%)요소를 수직/수직으로 동적으로 중앙에 배치합니다.

.container {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translateX(-50%) translateY(-50%);
}
<div class="container">
    <span>I'm vertically/horizontally centered!</span>
</div>


table-cell/vertical-align: middle방법:

예제 여기 / 전체 화면 예제

경우에 따라 다음 사항을 확인해야 합니다.html/body는 요의높이다로설정됨으로 .100%.

정렬의 의 수직정경상요를 합니다.width/height100% 가추를 합니다.display: table 자 는 그다음하요경우의소위런▁the경우▁thendisplaytable-cell 가추를 합니다.vertical-align: middle.

수평 중심화의 경우 다음을 추가할 수 있습니다.text-align: center텍스트와 다른 모든 텍스트의 중심을 맞춥니다.inline어린이의 요소또는 다음을 사용할 수 있습니다.margin: 0 auto를 그요를가정으로 block레벨

html, body {
    height: 100%;
}
.parent {
    width: 100%;
    height: 100%;
    display: table;
    text-align: center;
}
.parent > .child {
    display: table-cell;
    vertical-align: middle;
}
<section class="parent">
    <div class="child">I'm vertically/horizontally centered!</div>
</section>


절대 위치50%변위 방법을 사용하여 위에서부터:

예제 여기 / 전체 화면 예제

높이가 것으로 합니다 - 에는 이접방식텍높알이것가려정다니합.18px 요소를 를 정하면 됩니다.50%상위 요소에 상대적으로 위에서부터.를 합니다.margin-top높이의 값, 이 - 요의알 려높절값반인의이, 이경우진 --9px.

html, body, .container {
    height: 100%;
}

.container {
    position: relative;
    text-align: center;
}

.container > p {
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    margin-top: -9px;
}
<div class="container">
    <p>I'm vertically/horizontally centered!</p>
</div>


line-height방법(최소 유연성 - 제안되지 않음) 방법:

여기의 예

경우에 따라 상위 요소의 높이가 고정됩니다.수직 센터링의 경우 다음을 설정하기만 하면 됩니다.line-height부모 요소의 고정 높이와 동일한 자식 요소의 값.

이 솔루션은 경우에 따라 작동하지만 텍스트 줄이 여러 개일 때는 작동하지 않습니다. 이와 같이 주의할 필요가 있습니다.

.parent {
    height: 200px;
    width: 400px;
    background: lightgray;
    text-align: center;
}

.parent > .child {
    line-height: 200px;
}
<div class="parent">
    <span class="child">I'm vertically/horizontally centered!</span>
</div>

CSS3가 옵션인 경우(또는 폴백이 있는 경우) 변환을 사용할 수 있습니다.

.center {
    right: 50%;
    bottom: 50%;
    transform: translate(50%,50%);
    position: absolute;
}

위의 첫 번째 접근법과 달리 IE9+에 오버플로 버그가 있기 때문에 부정적인 번역으로 left:50%를 사용하고 싶지 않습니다.양의 오른쪽 값을 사용하면 수평 스크롤 막대가 표시되지 않습니다.

다음은 두 개의 간단한 플렉스박스 속성을 사용하여 두 축에서 ndiv의 중심을 잡는 방법입니다.

  • 용기 높이를 설정합니다.여기서 본문은 최소 100개의 뷰포트 높이로 설정됩니다.
  • align-items: center;이 column ▁flex▁will▁▁flex인 경우 플렉스 . 플렉스 방향이 열인 경우 블록의 중심을 맞춥니다.
  • justify-content: space-around; 요소 빈 을 수직으로 합니다.

body {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: space-around;
}
<div>foo</div>
<div>bar</div>

상자의 중심을 수직 및 수평으로 맞추는 가장 좋은 방법은 두 개의 용기를 사용하는 것입니다.

외부 컨테이너:

  • 했어야 했습니다display: table;

내부 컨테이너:

  • 했어야 했습니다display: table-cell;
  • 했어야 했습니다vertical-align: middle;
  • 했어야 했습니다text-align: center;

내용 상자:

  • 했어야 했습니다display: inline-block;
  • 텍스트를 중심에 맞추지 않으려면 수평 텍스트 정렬을 조정해야 합니다.

데모:

body {
    margin : 0;
}

.outer-container {
    display: table;
    width: 80%;
    height: 120px;
    background: #ccc;
}

.inner-container {
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}

.centered-content {
    display: inline-block;
    text-align: left;
    background: #fff;
    padding : 20px;
    border : 1px solid #000;
}
<div class="outer-container">
   <div class="inner-container">
     <div class="centered-content">
        Center this!
     </div>
   </div>
</div>

Fiddle도 참조하십시오!

페이지 중앙:

내용을 페이지 중앙에 배치하려면 외부 컨테이너에 다음을 추가합니다.

  • position : absolute;
  • width: 100%;
  • height: 100%;

다음은 이를 위한 데모입니다.

body {
    margin : 0;
}

.outer-container {
    position : absolute;
    display: table;
    width: 100%;
    height: 100%;
    background: #ccc;
}

.inner-container {
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}

.centered-content {
    display: inline-block;
    text-align: left;
    background: #fff;
    padding : 20px;
    border : 1px solid #000;
}
<div class="outer-container">
   <div class="inner-container">
     <div class="centered-content">
        Center this!
     </div>
   </div>
</div>

Fiddle도 참조하십시오!

CSS Grid: place-items

마지막으로, 우리는 CSS 그리드를 더 쉽게 만들 수 있습니다.

HTML

<div class="parent">
  <div class="to-center"></div>
</div>

CSS

.parent {
  display: grid;
  place-items: center;
}

출력:

html,
body {
  height: 100%;
}

.container {
  display: grid;
  place-items: center;
  height: 100%;
}

.center {
  background: #5F85DB;
  color: #fff;
  font-weight: bold;
  font-family: Tahoma;
  padding: 10px;
}
<div class="container">
  <div class="center" contenteditable>I am always super centered within my parent</div>
</div>

이 코드 조각을 실행하여 수직 및 수평으로 정렬된 div를 확인합니다.

html,
body,
.container {
  height: 100%;
  width: 100%;
}
.container {
  display: flex;
  align-items: center;
  justify-content: center;
}
.mydiv {
  width: 80px;
}
<div class="container">
  <div class="mydiv">h & v aligned</div>
</div>

    .align {
        display: flex;
        width: 400px;
        height: 400px;
        border: solid 1px black;
        align-items: center;
        justify-content: space-around;
    }
    .align div:first-child {
        width: 20px;
        height: 20px;
        background-color: red;
        position: absolute; 
    }
    .align div {
        width: 20px;
        height: 20px;
        background-color: blue;
    }
    <div class='align'>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </div>

첫째 아이가 중앙에 수직 및 수평으로 정렬됩니다.

소스 링크

방법 1) 표시 유형 플렉스

.child-element{
    display: flex;
    justify-content: center;
    align-items: center;
}

방법 2) 2D 변환

.child-element {
    top: 50%;
    left: 50%;
    transform: translate(-50% , -50%);
    position: absolute;
}

여기에서 다른 방법 보기

점을 한 페이지의 중심에 두다

#vh {
    border-radius: 15px;
    box-shadow: 0 0 8px rgba(0, 0, 0, 0.4);
    padding: 25px;
    width: 200px;
    height: 200px;
    background: white;
    text-align: center;
    margin: auto;
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
}
<div id="vh">Div to be aligned vertically</div>

업데이트 다른 옵션은 플렉스 상자를 사용하는 것입니다.

.vh {
    background-color: #ddd;
    height: 200px;
    align-items: center;
    display: flex;
}
.vh > div {
    width: 100%;
    text-align: center;
    vertical-align: middle;
}
<div class="vh">
    <div>Div to be aligned vertically</div>
</div>

원하는 결과를 얻기 위한 Flex-box 접근 방식은 다음과 같습니다.

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Flex-box approach</title>
<style>
  .tabs{
    display: -webkit-flex;
    display: flex;
    width: 500px;
    height: 250px;
    background-color: grey;
    margin: 0 auto;
    
  }
  .f{
    width: 200px;
    height: 200px;
    margin: 20px;
    background-color: yellow;
    margin: 0 auto;
    display: inline; /*for vertically aligning */
    top: 9%;         /*for vertically aligning */
    position: relative; /*for vertically aligning */
  }
</style>
</head>
<body>

    <div class="tabs">
        <div class="f">first</div>
        <div class="f">second</div>        
    </div>

</body>
</html>

또 다른 접근 방식은 표를 사용하는 것입니다.

<div style="border:2px solid #8AC007; height:200px; width:200px;">
  <table style="width:100%; height:100%">
    <tr style="height:100%">
      <td style="height:100%; text-align:center">hello, multiple lines here, this is super long, and that is awesome, dude</td>
    </tr>
  </table>
</div>

그리드 CSS 접근법

#wrapper {
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    left: 0;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: repeat(3, 1fr);
}
.main {
    background-color: #444;
}
<div id="wrapper">
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box main"></div>
</div>

다음과 같은 새롭고 간편한 솔루션을 따라야 합니다.

  .centered-class {
      align-items: center;
      display: flex;
      justify-content: center;
      width: 100vw;
      height: 100vh;
    }
<div class="centered-class">
  I'm in center vertically and horizontally.
</div>

저에게 가장 간단하고 깨끗한 해결책은 CSS3 속성 "변환"을 사용하는 것입니다.

.container {
  position: relative;
}

.container a {
  position: absolute;
  top: 50%;
  transform: translate(0,-50%);
}
<div class="container">
  <a href="#">Hello world!</a>
</div>

요소를 수직 및 수평으로 중앙에 배치하기 위해 아래에 언급된 속성을 사용할 수도 있습니다.

이 CSS 속성은 항목을 수직으로 정렬하고 다음 값을 허용합니다.

플렉스 스타트:항목이 용기의 상단에 정렬됩니다.

유연한 끝:항목이 용기 하단에 정렬됩니다.

center(중심): 용기의 수직 중심에 항목이 정렬됩니다.

기준선:항목은 컨테이너의 기준선에 표시됩니다.

확장:컨테이너에 맞게 항목이 늘어납니다.

이 CSS 속성은 항목을 수평으로 정렬하고 다음 값을 허용하는 내용을 정당화합니다.

플렉스 스타트:항목이 용기의 왼쪽에 정렬됩니다.

유연한 끝:항목이 용기의 오른쪽에 정렬됩니다.

center(중심): 항목이 용기 중앙에 정렬됩니다.

간격:항목 사이에 동일한 간격으로 표시됩니다.

스페이스 어라운드:항목 주위에 동일한 간격으로 표시됩니다.

위, 아래, 왼쪽, 오른쪽을 0으로 만드세요.

<html>
<head>
<style>
<div> 
{
position: absolute;
margin: auto;
background-color: lightblue;
width: 100px;
height :100px;
padding: 25px;
top :0;
right :0;
bottom:0;
left:0;
}


</style>
</head>
<body>

<div> I am in the middle</div>

</body>
</html>

당신은 CSS(당신의 요소)를 사용하여 이것을 달성할 수 있습니다.display:inline-grid+grid-auto-flow: row;) 그리드 및 플렉스 박스(모체 요소)display:flex;),

아래 스니펫 참조

#leftFrame {
  display: flex;
  height: 100vh;
  width: 100%;
}

#tabs {
  display: inline-grid;
  grid-auto-flow: row;
  grid-gap: 24px;
  justify-items: center;
  margin: auto;
}

html,body {
  margin:0;
  padding:0;
}
<div>
<div id=leftFrame>
  <div id=tabs>
    <div>first</div>
    <div>second</div>        
  </div>
</div>
</div>

이것은 효과가 있을 것입니다.

.center-div {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    text-align: center;
    min-height: 100vh;
}
<div class="center-div">Center Div</div>

플렉스박스, 그리드, 테이블, 또는vertical-align: middle;

할 수 있는 일:

HTML

<div class="box">
    <h2 class="box__label">square</h2>
</div>

CSS

.box {
    box-sizing: border-box;
    width: 100px;
    height: 100px;
    text-align: center;
    border: 1px solid black;
}

.box__label {
    box-sizing: border-box;
    display: inline-block;
    transform: translateY(50%);
    text-align: center;
    border: 1px solid black;
}

텍스트 정렬에 관한 것이라면 간단합니다.다음을 사용합니다.

vertical-align: middle; /* vertical centering*/
text-align: center; /* horizontal centering*/

상위 스타일은 필요하지 않습니다.

부모가 일부 스타일 속성을 가지고 있는 경우 자녀에게 영향을 미칠 수 있으며,경우 제대로 작동하지 않습니다.

  • 접근 6

/*Change units to "%", "px" or whatever*/

#wrapper{
  width: 50%;
  height: 70vh;
  background: rgba(0,0,0,.5);
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  margin: auto;
}
#left{
  width: 50%;
  height: 50vh;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  margin: auto;
  background: red;
}
#right{
  width: 50%;
  height: 50vh;
  position: absolute;
  top: 0;
  bottom: 0;
  right: 0;
  margin: auto;
  background: green;
}
.txt{
  text-align: center;
  line-height: 50vh;
}
<div id="wrapper">
   <div id="left" class="txt">Left</div>
   <div id="right" class="txt">Right</div>
</div>

    .container{ 
               width: 50%;  //Your container width here
               height: 50%; //Your container height here
               position: absolute; 
               top: 0; 
               right: 0;  
               bottom: 0; 
               left: 0; 
               margin: auto;
    }

div의 중심을 수직 및 수평으로 맞추는 가장 쉬운 방법은 다음과 같습니다.

<div style="display: table; width: 200px; height: 200px; border: 1px solid black;">
    <div style="display: table-cell; vertical-align: middle; text-align: center;">
        Text Here
    </div>
</div>

한 가지 더 예:

.parent {
    display: table; 
    width: 100%; 
    height: 100%;
}

.child {
    display: table-cell; 
    vertical-align: middle;
    text-align: center;
}


<div class="parent">
    <div class="child">
        <h4><u>SERVICE IN BANGLADESH FLEET RESERVE <br> AND <br> RE-ENGAGEMENT ORDER FOR DEFENCE SERVICE</u></h4>
    </div>
</div>

저는 이것이 가장 짧고 쉬운 방법이라고 생각합니다.그러나 요소 너비와 높이에 따라 다릅니다.그러니 자유롭게 더 많은 비율을 조정하십시오.translate(50%, 50%);.

.divContainer {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    transform: translate(50%, 50%);
}
<div class="divContainer">I am centered</div>

가장 간단한flexbox접근:

단일 요소의 중심을 수직 및 수평으로 맞추는 가장 쉬운 방법은 요소를 유연한 항목으로 만들고 여백을 다음과 같이 설정하는 것입니다.auto:

Flex 항목에 자동 여백을 적용하면 해당 항목이 자동으로 지정된 여백을 확장하여 Flex 컨테이너의 추가 공간을 차지합니다.

.flex-container {
  height: 150px;
  display: flex;
}

.flex-item {
  margin: auto;
}
<div class="flex-container">
  <div class="flex-item">
    This should be centered!
  </div>
</div>

이렇게 각 방향으로 여백을 확장하면 요소가 용기 중앙으로 정확하게 밀립니다.

텍스트 내용을 내부에 수직으로 정렬하려는 경우button::before그리고.button::after를 사용하여 작동할 수 있었습니다.

button::after {
  vertical-align: text-top;
}

나는 다음 CSS 코드를 사용합니다.

display: grid;
justify-content: center;
align-items: center;

소스는 CSS-Tricks입니다.

이 문제는 검색 시 이 페이지로 이동할 수 있는 관련 문제입니다.'기다림'을 위해 디브의 중심을 잡고 싶을 때...100px 스퀘어 애니메이션 gif, 사용:

.centreDiv {
    position: absolute;
    top:     -moz-calc(50vh - 50px);
    top:  -webkit-calc(50vh - 50px);
    top:          calc(50vh - 50px);
    left:    -moz-calc(50vw - 50px);
    left: -webkit-calc(50vw - 50px);
    left:         calc(50vw - 50px);
    z-index: 1000; /* whatever is required */
}

언급URL : https://stackoverflow.com/questions/19461521/how-to-center-an-element-horizontally-and-vertically

반응형