CSS td 너비 절대, 위치 사용


103

JSFIDDLE을 참조하십시오

td.rhead { width: 300px; }

CSS 너비가 작동하지 않는 이유는 무엇입니까?

<table>
<thead>
<tr>
<td class="rhead">need 300px</td>
<td colspan="7">Week #0</td>
<td colspan="7">Week #1</td>
<!-- etc..-->
</tr>
<tr>
<td class="rhead"></td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<!-- etc... -->
</tr>
<thead>
</table>

또한 위치 : 고정, 절대 등이 td 너비에 미치는 영향은 무엇입니까? 나는 수정 이상의 이유를 찾고 있습니다. 어떻게 작동하는지 이해하고 싶습니다.

td 너비가 원하는대로 300px가 아닙니다.


display: table-cell존중하지 않습니다 width(에서 작동하지 않는 것과 같은 방식으로 display: inline). 나는 당신이 무엇에 대해 묻는 것을 이해하지 못합니다position fixed|absolute
Explosion Pills

@ExplosionPills 실제 코드에서는 테이블이 고정되어 있기 때문입니다. 짐작할 수 있듯이 페이지 상단에 타임 라인을 만들려고합니다. 그래서 위치 속성이 너비에 영향을 미치는 경우에만 언급했습니다.
제이크

답변:


144

이것은 당신이 듣고 싶은 것이 아닐 수도 있지만 display: table-cell너비를 존중하지 않으며 전체 테이블의 너비에 따라 축소됩니다. display: block예를 들어 너비를 지정하는 테이블 셀 자체 내부에 요소가 있으면 쉽게 해결할 수 있습니다.

<td><div style="width: 300px;">wide</div></td>

셀의 위치가 테이블에 대해 모두 정적이기 때문에 <table>그 자체가 position: fixed절대적이거나 절대적인 경우에는 큰 차이가 없어야 합니다.

http://jsfiddle.net/ExplosionPIlls/Mkq8L/4/

편집 : 나는 크레딧을받을 수 없지만 주석에서 min-width대신 width테이블 셀 대신 사용할 수 있다고 말합니다 .


31
+1-이전에이 해결 방법을 사용했습니다. , 이상하게도 min-width(가)에 TD크롬과 FF의 작업에 보인다 jsfiddle.net/Mkq8L/7
팀 메 도라

2
사실 항상 그렇듯이 질문을 게시 한 후 min-width: 300px작동 하는 것을 발견했습니다 ! (@TimMedora는 몇 초 빠른했다!)
제이크

가장 좋은 대답은 디스플레이 : 테이블 셀 동작을 언급하는 것입니다. 감사!
Jake

이 동작은 나에게 의미가 있습니다. 같은 열에있는 두 셀에 대해 두 개의 다른 너비를 설정하면 어떻게됩니까? 함께 min-width하지만 문제가없는, 가장 큰을.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

3
이것은 해킹이며 권장하지 않습니다. 결합 된 td 너비가 테이블 너비를 초과합니다. 이게 문제 야. 더 많은 HTML 구조를 추가하여이 문제를 해결해서는 안됩니다.
David

28

사용하는 것이 좋습니다 table-layout: fixed

Auto 는 기본값이며 테이블이 크면 브라우저가 모든 크기가 맞는지 확인하기 위해 반복 할 때 약간의 클라이언트 측 지연이 발생할 수 있습니다.

고정 이 훨씬 더 좋고 페이지에 더 빨리 렌더링됩니다. 테이블의 구조는 테이블 전체 너비와 각 열의 너비에 따라 달라집니다.

여기에서는 원래 예제 인 JSFIDDLE에 적용됩니다. 나머지 열이 뭉개지고 내용이 겹치는 것을 알 수 있습니다. 더 많은 CSS를 사용하여 문제를 해결할 수 있습니다 (제가해야 할 일은 첫 번째 TR에 클래스를 추가하는 것뿐입니다) :

    table {
        width: 100%;
        table-layout: fixed;
    }

    .header-row > td {
        width: 100px;
    }

    td.rhead {
        width: 300px
    }

여기에서 실제로 본 : JSFIDDLE


11

제공된 링크에서 작동하지 않는 이유는 300px 열과 52 열을 각각 7 열에 걸쳐 표시하려고하기 때문입니다. 열 수를 줄이면 작동합니다. 화면에 그다지 많지 않습니다.

열을 강제로 맞추려면 설정을 시도하십시오.

body {min-width:4150px;}

내 jsfiddle 참조 : http://jsfiddle.net/Mkq8L/6/ @mike 아직 댓글을 달 수 없습니다.


2
+1은 테이블 너비 임계 값이 본문 너비에 따라 증가 함을 발견합니다.
Jake

8

그 이유는 테이블의 너비를 지정하지 않았고 전체 td가 넘쳐나 기 때문입니다.

예를 들어 , 나는 당신의 요구 사항에 맞을 것이라고 생각한 5000px의 너비를 테이블에 제공했습니다.

table{
    width:5000px;
}

당신이 제공 한 것과 똑같은 코드이며, 단지 테이블 너비에 추가했습니다.

당신의 TD가 기본 테이블 너비를 훨씬 넘었 기 때문입니다. 보시다시피 각 tr에서 약 45 개의 td를 꺼내면 (즉 jsfiddle이 아닌 귀하의 질문에 제공 한 코드) 정확히 작동합니다.


2
+1은 테이블 너비 임계 값이 있음을 나타냅니다. 문제는 때때로 우리가 전체 너비를 미리 알지 못한다는 것입니다. 기본 테이블 너비는 얼마입니까?
Jake

나는 실제로 모른다. 내가 아는 것은 열이 너무 많으면 테이블이 스쿼시되어 모든 자식 노드 너비가 쓸모 없게된다는 것입니다. 나는 전에이 발생했지만, 나는 "아직 m는 기본 값을 찾아 어쩌면 내가 질문으로 그 요청해야합니다..
그는 귀를

이 문제를 해결했다고 생각합니다. stackoverflow.com/questions/14767459/…
He Hui

이것은 높은 등급의 답변이 아닌 실제 답변입니다. 너비는 콘텐츠가 전체 테이블 너비를 넘지 않는 경우에만 설정할 수 있습니다.
David

5

이것을 시도하십시오.

<table>
<thead>
<tr>
<td width="300">need 300px</td>

1
와! ♥ 주셔서 감사합니다
ivahidmontazer

이 코드가 OP에 도움이되는 이유 / 방법에 대한 설명을 추가하십시오. 이는 향후 시청자가 배울 수있는 답을 제공하는 데 도움이 될 것입니다. 자세한 내용은 이 메타 질문 및 답변 을 참조하십시오.
Heretic Monkey

1
의 width 속성은 HTML5에서 더 이상 사용되지 않습니다.
simhumileco

5

사용해보십시오

table {
  table-layout: auto;
}

Bootstrap을 사용하는 경우 클래스 table에는 table-layout: fixed;기본적으로 있습니다.


4

테이블 레이아웃 속성과 "고정"값을 테이블에 사용하십시오.

table {
   table-layout: fixed;
   width: 300px; /* your desired width */
}

테이블의 전체 너비를 설정 한 후 이제 td의 %로 너비를 설정할 수 있습니다.

td:nth-child(1), td:nth-child(2) {
   width: 15%;  
}

http://www.w3schools.com/cssref/pr_tab_table-layout.asp 링크에서에 대해 자세히 알아볼 수 있습니다 .


3

내 미친 해결책.)

$(document).ready(function() {
    $("td").each(function(index) { 
    var htmlText = "<div style='width:300px;'>" + $(this).text() +"</div>";
    $(this).html(htmlText);
  });
});

2

예를 들어 테이블 너비가 100 % 인 경우 td에 대한 백분율 너비 (예 : 20 %)를 사용해보십시오.


2

예를 들어 다음과 같이 div의 첫 번째 셀에서 내용을 래핑합니다.

HTML :

<td><div class="rhead">a little space</div></td>

CSS :

.rhead {
  width: 300px;
}

다음은 jsfiddle 입니다.


1

다음을 사용할 수도 있습니다.

.rhead {
    width:300px;
}

그러나 이것은 내가 올바르게 기억한다면 일부 브라우저에서만 가능합니다 .IE8은 이것을 허용하지 않습니다. 무엇보다도 width=""속성을 그 <td>자체 에 두는 것이 더 안전 합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.