이것은 끊임없이 저를 괴롭히는 사소한 CSS 문제 중 하나입니다. Stack Overflow를 둘러싼 사람들은 어떻게 수직 정렬 checkboxes
하고 labels
일관되게 브라우저를 교차 합니까? I (일반적으로 사용하는 Safari에서 올바르게 정렬 할 때마다 vertical-align: baseline
온 input
), 그들은 파이어 폭스와 IE에서 떨어져 완전히입니다. Firefox에서 수정하면 Safari와 IE가 필연적으로 엉망이됩니다. 양식을 작성할 때마다 시간을 낭비합니다.
내가 작업하는 표준 코드는 다음과 같습니다.
<form>
<div>
<label><input type="checkbox" /> Label text</label>
</div>
</form>
나는 보통 Eric Meyer의 재설정을 사용하므로 양식 요소는 대체로 비교적 깨끗합니다. 당신이 제공해야 할 팁이나 트릭을 기대합니다!
답변
한 시간 이상 조정, 테스트 및 다양한 스타일의 마크 업을 시도한 후 적절한 해결책이 있다고 생각합니다. 이 특정 프로젝트의 요구 사항은 다음과 같습니다.
- 입력은 자체 라인에 있어야합니다.
- 확인란 입력은 모든 브라우저에서 비슷하게 (동일하지 않은 경우) 레이블 텍스트와 세로로 정렬되어야합니다.
- 레이블 텍스트가 줄 바꿈되면 들여 쓰기가 필요합니다 (확인란 아래 줄 바꿈 없음).
설명을하기 전에 코드를 알려 드리겠습니다.
label {
display: block;
padding-left: 15px;
text-indent: -15px;
}
input {
width: 13px;
height: 13px;
padding: 0;
margin:0;
vertical-align: bottom;
position: relative;
top: -1px;
*overflow: hidden;
}
<form>
<div>
<label><input type="checkbox" /> Label text</label>
</div>
</form>
다음은 JSFiddle 의 실제 예제입니다 .
이 코드는 양식 입력 여백과 패딩을 재정의하지 않는 Eric Meyer와 같은 재설정을 사용한다고 가정합니다 (따라서 입력 CSS에 여백과 패딩 재설정을 넣음). 분명히 실제 환경에서는 다른 입력 요소를 지원하기 위해 물건을 중첩 / 재정의하는 것이지만 간단하게 유지하고 싶었습니다.
참고 사항 :
*overflow
선언은 인라인 IE 해킹 (스타 재산권 해킹)입니다. IE 6과 7은이를 인식하지만 Safari와 Firefox는이를 무시합니다. 나는 그것이 유효한 CSS 일 것이라고 생각하지만, 조건부 주석을 사용하는 것이 여전히 낫습니다. 간단하게 사용했습니다.- 내가 알 수있는 한,
vertical-align
브라우저에서 일관된 유일한 진술은vertical-align: bottom
입니다. 이것을 설정 한 다음 상대적으로 위쪽으로 배치하면 Safari, Firefox 및 IE에서 픽셀 또는 불일치가 거의 동일하게 거의 동일하게 작동합니다. - 정렬 작업의 주요 문제점은 IE가 입력 요소 주위에 신비한 공간을 많이 가지고 있다는 것입니다. 패딩이나 여백이 아니며 지속적으로 저주됩니다. 확인란에 너비와 높이를 설정 한 다음
overflow: hidden
어떤 이유로 든 여분의 공간이 차단되고 IE의 위치가 Safari 및 Firefox와 매우 유사하게 작동합니다. - 텍스트 크기에 따라 적절한 위치를 잡기 위해 상대 위치, 너비, 높이 등을 조정해야 할 것입니다.
이것이 다른 누군가를 돕기를 바랍니다! 오늘 아침에 작업 한 프로젝트 이외의 다른 프로젝트에서는이 특정 기술을 시도하지 않았으므로보다 일관된 방식으로 작동하는 항목을 찾으면 확실히 정리하십시오.
답변
때로는 세로 정렬이 제대로 작동하려면 서로 옆에 두 개의 인라인 (스팬, 레이블, 입력 등) 요소가 필요합니다. 다음 확인란은 텍스트 크기가 매우 작거나 큰 경우에도 IE, Safari, FF 및 Chrome에서 세로로 올바르게 가운데에 표시됩니다.
그것들은 모두 같은 줄에서 서로 옆에 떠 있지만, 이제 줄 바꿈은 전체 레이블 텍스트가 항상 확인란 옆에 유지됨을 의미합니다.
단점은 의미없는 여분의 SPAN 태그입니다.
.checkboxes label {
display: inline-block;
padding-right: 10px;
white-space: nowrap;
}
.checkboxes input {
vertical-align: middle;
}
.checkboxes label span {
vertical-align: middle;
}
<form>
<div class="checkboxes">
<label for="x"><input type="checkbox" id="x" /> <span>Label text x</span></label>
<label for="y"><input type="checkbox" id="y" /> <span>Label text y</span></label>
<label for="z"><input type="checkbox" id="z" /> <span>Label text z</span></label>
</div>
</form>
이제 확인란 아래에 줄 바꿈없이 줄 바꿈 해야하는 매우 긴 레이블 텍스트가 있는 경우 레이블 요소에 패딩 및 음수 텍스트 들여 쓰기를 사용합니다.
.checkboxes label {
display: block;
padding-right: 10px;
padding-left: 22px;
text-indent: -22px;
}
.checkboxes input {
vertical-align: middle;
}
.checkboxes label span {
vertical-align: middle;
}
<form>
<div class="checkboxes">
<label for="x"><input type="checkbox" id="x" /> <span>Label text x so long that it will probably wrap so let's see how it goes with the proposed CSS (expected: two lines are aligned nicely)</span></label>
<label for="y"><input type="checkbox" id="y" /> <span>Label text y</span></label>
<label for="z"><input type="checkbox" id="z" /> <span>Label text z</span></label>
</div>
</form>
답변
의 해제 작업을 한 크레용의 솔루션 , 내가 나를 위해 작품과 간단이라고 뭔가를 :
.font2 {font-family:Arial; font-size:32px} /* Sample font */
input[type=checkbox], input[type=radio] {
vertical-align: middle;
position: relative;
bottom: 1px;
}
input[type=radio] {
bottom: 2px;
}
<label><input type="checkbox" /> Label text</label>
<p class="font2">
<label><input type="checkbox"/> Label text</label>
</p>
Safari (기준으로 신뢰하는)에서 픽셀 단위로 픽셀을 동일하게 렌더링하며 Firefox와 IE7 모두 양호하게 체크 아웃합니다. 또한 크고 작은 다양한 레이블 글꼴 크기에서도 작동합니다. 이제 선택 및 입력에서 IE의 기준을 수정하기 위해 …
업데이트 : (타사 편집)
올바른 bottom
위치는 글꼴 모음 및 글꼴 크기에 따라 다릅니다! bottom: .08em;
확인란 및 라디오 요소에 사용하는 것이 좋은 일반적인 값이라는 것을 알았습니다 . 몇 가지 작은 / 중간 / 큰 글꼴 크기를 사용하여 Arial & Calibri 글꼴이있는 Windows의 Chrome / Firefox / IE11에서 테스트했습니다.
.font2, .font2 input {font-family:Arial; font-size:32px} /* Sample font */
input[type=checkbox], input[type=radio] {
vertical-align: middle;
position: relative;
bottom: .08em; /* this is a better value for different fonts! */
}
<label><input type="checkbox" /> Label text</label>
<p class="font2">
<label><input type="checkbox"/> Label text</label>
</p>
답변
잘 작동하는 한 가지 쉬운 방법은 세로 정렬로 확인란의 세로 위치 조정을 적용하는 것입니다. 브라우저마다 여전히 다양하지만 솔루션은 복잡하지 않습니다.
input {
vertical-align: -2px;
}
답변
시험 vertical-align: middle
또한 코드는 다음과 같아야합니다.
<form>
<div>
<input id="blah" type="checkbox"><label for="blah">Label text</label>
</div>
</form>
답변
내 솔루션을 시도하고 IE 6, FF2 및 Chrome에서 시도한 결과 세 브라우저 모두에서 픽셀 단위로 렌더링됩니다.
* {
padding: 0px;
margin: 0px;
}
#wb {
width: 15px;
height: 15px;
float: left;
}
#somelabel {
float: left;
padding-left: 3px;
}
<div>
<input id="wb" type="checkbox" />
<label for="wb" id="somelabel">Web Browser</label>
</div>
답변
나를 위해 완벽하게 작동하는 유일한 솔루션은 다음과 같습니다.
input[type=checkbox], input[type=radio] {
vertical-align: -2px;
margin: 0;
padding: 0;
}
오늘 Chrome, Firefox, Opera, IE 7 및 8에서 테스트되었습니다. 예 : 바이올린