Có cách nào để có chiều rộng tập trường chỉ rộng bằng các điều khiển trong chúng không?


80

Có vẻ như tập trường được mặc định bằng 100% chiều rộng của vùng chứa của nó. Có cách nào để bạn có thể đặt trường chỉ lớn như điều khiển rộng nhất bên trong tập trường không?

Câu trả lời:


128

Sử dụng display: inline-block, mặc dù bạn cần phải bọc nó bên trong DIV để ngăn nó thực sự hiển thị nội dòng. Đã thử nghiệm trong Safari.

<style type="text/css">
    .fieldset-auto-width {
         display: inline-block;
    }
</style>
<div>
  <fieldset class="fieldset-auto-width">
      <legend>Blah</legend>
      ...
  </fieldset>
</div>

4
Đây là câu trả lời rõ ràng nhất cho n00b tương đối và nó giải quyết được vấn đề tương tự của tôi. Cảm ơn.
Mawg nói Khôi phục Monica

Vâng, đây là một ý tưởng tốt hơn / đơn giản hơn câu trả lời của tôi nếu nó hoạt động trên tất cả các trình duyệt mà bạn quan tâm.
Tom

3
FYI: display: inline-block;không hoạt động trong iE6 và IE7. Hạnh phúc cho bạn nếu bạn không phải quan tâm đến họ. :)
Diemo

Hoạt động tốt trên IE8 và Firefox 10!
Ed Bayiates 10/02/12

Voodoo với div là gì. Nó có vẻ cần thiết, nhưng tại sao?
superluminary

14

fieldset {display:inline} hoặc là fieldset {display:inline-block}

Nếu bạn muốn tách hai tập trường theo chiều dọc, hãy sử dụng một tập hợp <br/>giữa chúng. Điều này đúng về mặt ngữ nghĩa và không khó hơn nó phải được.


cho IE 11, display: inline làm việc, nhưng không hiển thị: inline-block
Gabe Halsmer

8

Bạn có thể thả nổi nó, sau đó nó sẽ chỉ rộng bằng với nội dung của nó, nhưng bạn sẽ phải đảm bảo rằng bạn đã xóa các phao nổi đó.


1

Điều này cũng hoạt động. 

fieldset {
  width:0px;
}

1
Điều này không hoạt động nếu bạn có nhiều phần tử trong tập trường sẽ xuất hiện trên cùng một dòng.
Matthew Schinckel

Chắc chắn là có, nếu bạn sử dụng một phần tử khối để bao bọc chúng hoặc sự kết hợp của các ngắt ngay ngắn và rõ ràng.
dan.s.ward

1

Rất tiếc là cả hai đều display:inline-blockkhông width:0pxhoạt động trong Internet Explorer lên đến phiên bản 8. Tôi chưa thử Internet Explorer 9. Tôi không muốn bỏ qua Internet Explorer, nhưng tôi không thể.

Tùy chọn duy nhất hoạt động trên Firefox và Internet Explorer 8 là float:left. Hạn chế nhỏ duy nhất là bạn phải nhớ sử dụng clear:bothtrên phần tử theo sau biểu mẫu. Tất nhiên, nó sẽ rất rõ ràng nếu bạn quên ;-)


0

Bạn luôn có thể sử dụng CSS để hạn chế chiều rộng của tập trường, điều này cũng sẽ hạn chế các điều khiển bên trong.

Tôi thấy rằng tôi thường phải hạn chế chiều rộng của các selectđiều khiển, nếu không, văn bản tùy chọn thực sự dài sẽ khiến nó hoàn toàn không thể quản lý được.


nhưng tôi muốn có nó năng động nên fieldset sẽ "AutoSize" chứ không phải là một chiều rộng được xác định trước
Leora

0
 fieldset {

    min-width: 0;

    max-width: 100%;

    width: 100%;
 }

3
Vui lòng thêm một số giải thích
Rarblack

Ngay cả Tim Berners-Lee cũng không thể cho bạn biết lý do tại sao lại có tác dụng này nhưng thật tệ hại, cảm ơn!
lucasjohnson

0

thử cái này

<fieldset>
   <legend style="max-width: max-content;" >Blah</legend>
</fieldset>

-1

tôi đã khắc phục sự cố của mình bằng cách ghi đè kiểu chú giải như Dưới đây

.ui-fieldset-legend
{
  font-size: 1.2em;
  font-weight: bold;
  display: inline-block;
  width: auto;`enter code here`
}

-2

Tiến xa hơn về giải pháp Mihai, căn trái trên nhiều trình duyệt:

<TABLE>
  <TR>
    <TD>
      <FORM>
        <FIELDSET>
          ...
        </FIELDSET>
      </FORM>
    </TD>
  </TR>
</TABLE>

Căn phải trên nhiều trình duyệt:

<TABLE>
  <TR>
    <TD WIDTH=100%></TD>
    <TD>
      <FORM>
        <FIELDSET>
          ...
        </FIELDSET>
      </FORM>
    </TD>
  </TR>
</TABLE>

2
Trong khi công việc sức mạnh này, các bảng thường không được coi là thực hành tốt cho bố trí ... stackoverflow.com/questions/83073/...
StackExchange What The Heck

1
tưởng tượng làm điều này cho 5 bộ trường? 10? 15 ??! đừng làm điều đó!
Taylor Brown

1
Đối với bất kỳ nhà phát triển mới nào đến đây. Đừng làm điều này. Bạn sẽ sử dụng mã nhiều hơn gấp 10 lần bạn cần.
siêu thường

-2
            <table style="position: relative; top: -0px; left: 0px;">
                <tr>
                    <td>
                        <div>   
                            <fieldset style="width:0px">
                                <legend>A legend</legend>
                                <br/>
                                <table cellspacing="0" align="left">
                                    <tbody>
                                        <tr>
                                            <td align='left' style="white-space: nowrap;">
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>
                            </fieldset>
                        </div>
                    </td>
                </tr>
            </table>

-3

Bạn cũng có thể đặt tập trường bên trong bảng, như sau:

<table>
    <tr>
       <td>
           <fieldset>
           .......
           </fieldset>
       </td>
    </tr>
</table>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.