Tôi có nên kích thước một vùng văn bản với các thuộc tính chiều rộng / chiều cao hoặc HTML cols / rows không?


307

Mỗi lần tôi phát triển một hình thức mới bao gồm một textareavấn đề nan giải sau đây khi tôi cần chỉ định kích thước của nó:

Sử dụng CSS hoặc sử dụng các textareathuộc tính colsrows ?

Những ưu và nhược điểm của từng phương pháp là gì?

Các ngữ nghĩa của việc sử dụng các thuộc tính này là gì?

Làm thế nào nó thường được thực hiện?

Câu trả lời:


268

Tôi khuyên bạn nên sử dụng cả hai. Hàng và cols là bắt buộc và hữu ích nếu máy khách không hỗ trợ CSS. Nhưng là một nhà thiết kế, tôi đã ghi đè lên chúng để có được kích thước chính xác mà tôi muốn.

Cách được đề xuất là thông qua biểu định kiểu bên ngoài, ví dụ:

textarea {
  width: 300px;
  height: 150px;
}
<textarea> </textarea>


4
Điều này là ổn, nhưng bạn phải nhận ra rằng bất kỳ không gian tùy ý nào bạn đang đặt kích thước sẽ lãng phí và thực sự chỉ là để hiển thị.
Thuốc nổ gây nổ

4
@tandu: Ý của bạn là "sẽ lãng phí và thực sự chỉ để trưng bày"?
BoltClock

2
hàng / cols dựa trên kích thước ký tự của người dùng. Vì vậy, nếu bạn có chiều rộng / chiều cao được xác định bằng css không thể chia cho các phần tử của một ký tự trong vùng văn bản, sẽ có nhiều khoảng trắng còn lại theo chiều dọc và chiều ngang. Có lẽ sẽ không ai chú ý, nhưng chỉ cần nói.
Thuốc nổ gây nổ

21
Bạn có thể sử dụng "em" làm phép đo, thay vì pixel. 1em là chiều rộng của chữ "M" ở bất kỳ phông chữ và kích thước nào. Nhưng cols chỉ có liên quan nếu được sử dụng với phông chữ đơn cách, trong hầu hết các thiết kế không phải là trường hợp. Để có được sự phù hợp hoàn hảo về chiều cao, hãy sử dụng bội số line-heightcho chiều cao của vùng văn bản của bạn.
kogakure

5
@LeoGalleguillos Bắt buộc và hữu ích nếu khách hàng không hỗ trợ CSS mật . Không ai nói bất cứ điều gì về xác nhận.
Janus Bahs Jacquet

96

textarea { height: auto; }
<textarea rows="10"></textarea>

Điều này sẽ kích hoạt trình duyệt để đặt chiều cao của textarea CHÍNH XÁC với số lượng hàng cộng với phần đệm xung quanh nó. Đặt chiều cao CSS thành một lượng pixel chính xác sẽ để lại các khoảng trắng tùy ý.


4
Thật không may, "Chiều cao của textarea không khớp với các hàng trong Firefox" - đó là "hàng + 1" stackoverflow.com/q/7695945/1266880
apurkrt

2
Không chắc chắn liệu mọi thứ đã thay đổi kể từ '13 hay liệu có điều gì đó không rõ ràng về tình huống cụ thể của tôi hay không, nhưng cài đặt height: auto;trong CSS dường như không ảnh hưởng đến văn bản của tôi.
clozach

10

Theo w3c, cols và hàng đều là các thuộc tính bắt buộc cho textareas. Hàng và Cols là số lượng ký tự sẽ phù hợp với vùng văn bản thay vì pixel hoặc một số giá trị tùy ý khác. Đi với các hàng / cols.


8
Các trường w3c nói rằng bạn có thể đặt nó thông qua thuộc tính hàng và cols nhưng cài đặt chiều cao và chiều rộng sẽ tốt hơn. Không có đề cập đến các hàng và cols là một thuộc tính bắt buộc cho textarea trên w3c.org. w3schools.com/tags/tagiginarea.asp w3.org/wiki/HTML/Elements/textarea
Michael Stramel

17
@MichaelStramel câu trả lời của tôi là bốn tuổi :) - nhân tiện đó không phải là trường w3c. Họ không liên kết. Tôi không chắc rằng HTML5 có khái niệm về các thuộc tính bắt buộc nữa hay không, nhưng tôi có thể sai về điều đó. Tôi vẫn không thấy lý do tại sao cài đặt chiều rộng / chiều cao sẽ tốt hơn hàng / cols mặc dù
Thuốc nổ

3
Tôi nhận ra rằng sau khi tôi bình luận nhưng vẫn cảm thấy nó có liên quan đến bất cứ ai đọc bài viết này. Ngoài ra, với các thiết kế đáp ứng, các hàng và cols có thể gây ra sự cố trừ khi chúng được đặt thông qua JavaScript. IMO đó làm cho việc thiết lập nó thông qua CSS một cách tốt hơn nhiều.
Michael Stramel

6

Câu trả lời là "có". Đó là, bạn nên sử dụng cả hai. Không có hàng và cols (và có các giá trị mặc định ngay cả khi bạn không sử dụng chúng một cách rõ ràng), textarea nhỏ đến mức không thể tin được nếu CSS bị vô hiệu hóa hoặc bị ghi đè bởi biểu định kiểu người dùng. Luôn luôn giữ mối quan tâm tiếp cận trong tâm trí. Điều đó đang được nói, nếu biểu định kiểu của bạn được phép kiểm soát sự xuất hiện của textarea, bạn thường sẽ kết thúc với một cái gì đó trông tốt hơn nhiều, phù hợp với thiết kế trang tổng thể có thể thay đổi kích thước để theo kịp đầu vào của người dùng ( trong giới hạn của hương vị tốt, tất nhiên).


6

Đối với vùng văn bản, chúng tôi có thể sử dụng css bên dưới để sửa kích thước

    <textarea  class="form-control" style=" min-width:500px; max-width:100%;min-height:50px;height:100%;width:100%;" ></textarea>

Đã thử nghiệm trong angularjs và angular7


1
Điều này có liên quan gì với Angular? Và làm thế nào để thêm vào so với câu trả lời hiện có từ năm 2010 /
Lazar Ljubenović

5
 <textarea style="width:300px; height:150px;" ></textarea>

19
@ user470962 Hominem quảng cáo. Nếu bạn sửa lỗi cú pháp thành '<textarea style = "width: 300px; height: 150px;">' thì mã vẫn ổn. Không cần phải xúc phạm ai đó. Như bạn có thể thấy câu trả lời phổ biến nhất không giống như của mình. +1
TAAPSogeking

1
@TAAPSogeking trong sự công bằng, đây là câu trả lời tương tự, 4 năm sau. -1
Rambatino

4

Kích thước của một textarea có thể được chỉ định bởi các thuộc tính cols và rows, hoặc thậm chí tốt hơn; thông qua các thuộc tính chiều cao và chiều rộng của CSS. Thuộc tính cols được hỗ trợ trong tất cả các trình duyệt chính. Một sự khác biệt chính là <TEXTAREA ...>thẻ container: nó có thẻ start ().


2

Tôi thường không chỉ định height, nhưng đừng chỉ định width: ...rowscols .

Thông thường, trong các trường hợp của tôi, chỉ widthrowslà cần thiết, để textarea trông đẹp hơn so với các elem khác. (Vàcols là một dự phòng nếu ai đó không sử dụng CSS, như được giải thích trong các câu trả lời khác.)

((Chỉ định cả hai rowsheightcảm thấy hơi giống như sao chép dữ liệu tôi nghĩ vậy?))


2

Một tính năng chính của textareas là chúng có thể mở rộng. Trên trang web, điều này có thể dẫn đến các thanh cuộn xuất hiện trên vùng văn bản nếu độ dài văn bản lấp đầy khoảng trống bạn đặt (có thể là sử dụng hàng hoặc sử dụng CSS. Đó có thể là vấn đề khi người dùng quyết định in, đặc biệt là với 'In' thành PDF - vì vậy hãy đặt chiều cao tối thiểu lớn thoải mái cho các văn bản in bằng quy tắc CSS có điều kiện:

@media print { 
textarea {
min-height: 900px;  
}
}

2

nếu bạn không sử dụng mỗi lần sử dụng chiều cao dòng: '..'; thuộc tính kiểm soát chiều cao của textarea và chiều rộng thuộc tính cho chiều rộng của textarea.

hoặc bạn có thể sử dụng kích thước phông chữ bằng cách làm theo css:

#sbr {
  font-size: 16px;
  line-height:1.4;
  width:100%;
}

2

Các hàng và cols HTML không phản hồi!

Vì vậy, tôi xác định kích thước trong CSS. Mẹo nhỏ: nếu bạn xác định kích thước nhỏ cho điện thoại di động, hãy nghĩ đến việc sử dụngtextarea:focus {};

Thêm một số không gian thừa ở đây, sẽ chỉ mở ra khoảnh khắc người dùng muốn thực sự viết một cái gì đó


-11

CSS


input
{
    width: 300px;
    height: 40px;
} 


HTML


<textarea rows="4" cols="50">HELLO</textarea>

bạn có thể làm với css rất dễ dàng
ASHU

Bạn có thể thực hiện theo cả hai cách bằng css hoặc bạn có thể cung cấp bằng cách thủ công như thế này <textarea rows = "4" cols = "50"> HELLO </ textarea>
ASHU 17/03/2016

Tại sao bạn sẽ áp dụng các tính chất đó cho tất cả các yếu tố?
blackmambo
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.