<li> 태그에서 생성 된 고정 높이와 너비가있는 행에 여러 상자를 표시하고 있습니다. 이제 텍스트를 세로 중앙에 정렬해야합니다. CSS vertical-align은 영향을 미치지 않습니다. 뭔가 빠진 것일까 요 ???
(여백, 패딩, 줄 높이)를 사용하는 트릭을 찾고 있지 않습니다. 일부 텍스트가 길고 두 줄로 나뉘 기 때문에 작동하지 않습니다.
실제 코드를 찾으십시오.
CSS 코드
ul.catBlock{
width:960px;
height: 270px;
border:1px solid #ccc;
}
ul.catBlock li{
list-style: none;
float:left;
display:block;
text-align: center;
width:160px;
height: 100px;
}
ul.catBlock li a{
display: block;
padding: 30px 10px 5px 10px;
height:60px;
}
HTML 코드
<ul class="catBlock">
<li><a href="#">IP Phone</a></li>
<li><a href="#">Dual SIM Switch Server</a></li>
<li><a href="#">IP PBX</a></li>
</ul>
답변
와 부모 정의 display: table
와 함께 요소 자체 vertical-align: middle
와 display: table-cell
.
답변
line-height
텍스트를 세로로 정렬하는 방법입니다. 그것은 꽤 표준이고 나는 그것을 “해킹”이라고 생각하지 않습니다. 그냥 추가 line-height: 100px
하면 ul.catBlock li
괜찮을 것입니다.
이 경우 ul.catBlock li a
안에있는 모든 텍스트 li
도 a
. 이 작업을 할 때 이상한 일이 발생하는 것을 보았으므로 둘 다 시도하고 어떤 것이 작동하는지 확인하십시오.
답변
몇 년이 늦었을지 모르지만이 문제를 접한 사람은
li {
display: flex;
flex-direction: row;
align-items: center;
}
flexbox에 대한 브라우저 지원은 @scottjoudry가 위에 그의 응답을 게시했을 때보 다 훨씬 낫지 만 훨씬 오래된 브라우저를 지원하려는 경우 접두사 또는 다른 옵션을 고려할 수 있습니다. 캐니 우스 : 플렉스
답변
놀랍게도 (또는 그렇지 않은 경우)이 vertical-align
도구는 실제로이 작업에 가장 적합합니다. 무엇보다도 자바 스크립트가 필요하지 않습니다.
다음 예제에서는 outer
클래스를 본문 inner
중간에 배치하고 outer
클래스를 클래스 중간에 배치합니다 .
미리보기 : http://jsfiddle.net/tLkSV/513/
HTML :
<div id="container">
<span></span><div class="outer">
<span></span><div class="inner">
</div>
</div>
</div>
CSS :
html, body {
height: 100%;
margin: 0;
padding: 0; }
#container {
text-align: center;
height: 100%; }
span {
height: 100%;
vertical-align: middle;
display: inline-block; }
.outer {
width: 100px;
height: 200px;
padding: 0;
border: 1px solid #000;
vertical-align: middle;
display: inline-block; }
.inner {
background: red;
width: 30px;
height: 20px;
vertical-align: middle;
display: inline-block; }
수직 정렬은 서로 옆에있는 요소의 중심을 정렬하여 작동합니다. 단일 요소에 수직 정렬을 적용해도 아무런 효과가 없습니다. 너비는 없지만 컨테이너의 높이 인 두 번째 요소를 추가하면 단일 요소가이 너비가없는 요소와 함께 세로 중앙으로 이동하여 세로 중앙에 배치됩니다. 유일한 요구 사항은 두 요소를 인라인 (또는 인라인 블록)으로 설정하고 vertical-align 속성을로 설정하는 것 vertical-align: middle
입니다.
참고 : 아래의 내 코드에서 내 <span>
태그와 <div>
태그가 접촉 하고 있음을 알 수 있습니다 . 둘 다 인라인 요소이기 때문에 공백은 실제로 너비가없는 요소와 div 사이에 공백을 추가하므로 반드시 생략해야합니다.
답변
앞으로이 문제는 flexbox로 해결 될 것입니다. 현재 브라우저 지원은 음울하지만 현재의 모든 브라우저에서 하나 또는 다른 형태로 지원됩니다.
브라우저 지원 : http://caniuse.com/flexbox
.vertically_aligned {
/* older webkit */
display: -webkit-box;
-webkit-box-align: center;
-webkit-justify-content: center;
/* older firefox */
display: -moz-box;
-moz-box-align: center;
-moz-box-pack: center;
/* IE10*/
display: -ms-flexbox;
-ms-flex-align: center;
-ms-flex-pack: center;
/* newer webkit */
display: -webkit-flex;
-webkit-align-items: center;
-webkit-box-pack: center;
/* Standard Form - IE 11+, FF 22+, Chrome 29+, Opera 17+ */
display: flex;
align-items: center;
justify-content: center;
}
Flexbox에 대한 배경 정보 : http://css-tricks.com/snippets/css/a-guide-to-flexbox/
답변
코드 나 예제를 제공하지 않는 Asaf의 답변을 제외하고 여기에 제공된 완벽한 답변이 없으므로 내 기여를하고 싶습니다 …
메이크업의에 중위 vertical-align: middle;
작업, 당신은 사용할 필요가 display: table;
당신을 위해 ul
요소 display: table-cell;
에 대한 li
요소 및 사용할 수있는 것보다 vertical-align: middle;
위해 li
요소.
당신은 어떤 명시를 제공 할 필요가 없습니다 margins
, paddings
당신의 텍스트를 수직으로 중간 만들 수 있습니다.
ul.catBlock{
display: table;
width:960px;
height: 270px;
border:1px solid #ccc;
}
ul.catBlock li {
list-style: none;
display: table-cell;
text-align: center;
width:160px;
vertical-align: middle;
}
ul.catBlock li a {
display: block;
}
답변
여기에 설명 된대로 : https://css-tricks.com/centering-in-the-unknown/ .
실제 사례에서 테스트 한 것처럼 가장 안정적이고 우아한 솔루션은
<li />
첫 번째 자식으로 요소에 일관된 인라인 요소를 삽입하는 것입니다.이 요소는 높이를 100 % (부모 높이의<li />
)로vertical-align
설정하고 중간 으로 설정해야합니다. . 이를 위해를 넣을 수<span />
있지만 가장 편리한 방법은li:after
의사 클래스 를 사용하는 것입니다 .
스크린 샷 :
ul.menu-horizontal {
list-style-type: none;
margin: 0;
padding: 0;
display: inline-block;
vertical-align: middle;
}
ul.menu-horizontal:after {
content: '';
clear: both;
float: none;
display: block;
}
ul.menu-horizontal li {
padding: 5px 10px;
box-sizing: border-box;
height: 100%;
cursor: pointer;
display: inline-block;
vertical-align: middle;
float: left;
}
/* The magic happens here! */
ul.menu-horizontal li:before {
content: '';
display: inline;
height: 100%;
vertical-align: middle;
}