Đệm css giữ chỗ HTML5


133

Tôi đã xem bài đăng này và đã thử mọi cách có thể để thay đổi phần đệm cho trình giữ chỗ của mình nhưng than ôi, có vẻ như nó không muốn hợp tác.

Dù sao, đây là mã cho css. ( EDIT : Đây là css được tạo từ sass)

#search {
  margin-top: 1px;
  display: inline;
  float: left;
  margin-left: 10px;
  margin-right: 10px;
  width: 220px;
}

#search form {
  position: relative;
}

#search input {
  padding: 0 10px 0 29px;
  color: #555555;
  border: none;
  background: url('/images/bg_searchbar.png?1296191141') no-repeat;
  width: 180px;
  height: 29px;
  overflow: hidden;
}

#search input:hover {
  color: #00ccff;
  background-position: 0px -32px;
}

Và đây là html đơn giản:

<div id="search">
  <form>
    <input type="text" value="" placeholder="Search..." name="q" autocomplete="off" class="">
  </form>
  <div id="jquery-live-search" style="display: block; position: absolute; top: 15px; width: 219px;">
    <ul id="search-results" class="dropdown">
    </ul>
  </div>
</div>

Khá đơn giản? giữ chỗ vì một số lý do nhưng khi bạn cố gắng nhập vào trường nhập, văn bản được căn chỉnh. Có vẻ như bạn chỉ có thể thay đổi màu (cho webkit) của trình giữ chỗ, nhưng nếu tôi cố gắng chỉnh sửa phần đệm của đầu vào chứa, nó sẽ phá hỏng thiết kế của đầu vào! nhổ tóc

Dưới đây là màn hình của trình giữ chỗ và trường nhập liệu có nhập văn bản:

giữ chỗ nhập văn bản

CHỈNH SỬA :

Cho đến bây giờ tôi đã dùng đến plugin jquery này .

Nó hoạt động ngay lập tức và nó khắc phục vấn đề chrome của tôi. Tôi vẫn muốn khám phá vấn đề là gì (nếu nó có liên quan đến chrome của tôi hoặc cái gì đó)

Tôi khá chắc chắn rằng đó không phải là phong cách kể từ khi John Catterfeld tái tạo nó mà không gặp vấn đề gì, vì vậy tôi hy vọng ai đó ngoài kia vẫn có thể chỉ cho tôi hướng đi đúng đắn về lý do tại sao điều này xảy ra với tôi (chrome của khách hàng của tôi cũng vậy. đây có thể là nguồn gốc của Chrome / OSX nếu John đang sử dụng windows)


2
Bạn có thể cung cấp CSS được tạo không? Điều đó sẽ dễ làm việc hơn nhiều so với nguồn SASS.
RoToRa

+1 Plugin đó thật tuyệt vời - đơn giản và có đúng các tùy chọn tôi cần. Có lẽ là giải pháp giữ chỗ tốt nhất mà tôi vấp ngã cho đến bây giờ.
rẻ

Nếu bất cứ ai có vấn đề với bootstrap, hãy đặt hai tùy chọn này: font-size: Large; thay vì px; và chiều cao dòng: bình thường;
17/12/13

Câu trả lời:


229

Tôi đã có cùng một vấn đề.

Tôi đã sửa nó bằng cách loại bỏ chiều cao dòng khỏi đầu vào của tôi. Kiểm tra nếu có một số đường thẳng gây ra vấn đề


6
Sai lầm. Với một yếu tố đầu vào, trình giữ chỗ không bị ảnh hưởng bởi chiều cao dòng, nhưng phần đệm không phải là giải pháp tốt nhất. Cách tốt nhất là sử dụng (và tôi biết nó thường không bao giờ làm bất cứ điều gì, nhưng trong trường hợp này là như vậy) thuộc tính CSS CHỨNG NHẬN.
RIK

1
Vâng, đáng ngạc nhiên, DID khắc phục vấn đề. Và văn bản đánh máy vẫn nằm ở giữa theo chiều dọc ngay cả khi không có sự trợ giúp về chiều cao dòng.
hndcrftd

59
khi không có chiều cao dòng trên đầu vào trực tiếp, thì việc thêm vào line-height: normal;đã tạo ra mánh khóe cho tôi
philfreo

Dù sao, bạn phải thêm chiều cao cho các trình duyệt, nhưng đó là công việc cho safari
Kaloyan Stamatov

95

Tôi gặp vấn đề tương tự, vấn đề của tôi là ở phần đệm bên, và giải pháp là, thụt lề văn bản, tôi không nhận ra rằng văn bản thụt lề ảnh hưởng đến vị trí bên giữ chỗ.

input{
  text-indent: 10px;
}

28

Nếu bạn muốn giữ chiều cao dòng của mình và buộc giữ chỗ phải giống nhau, bạn có thể trực tiếp chỉnh sửa CSS giữ chỗ kể từ các phiên bản trình duyệt mới hơn. Điều đó đã đánh lừa tôi:

input::-webkit-input-placeholder { /* WebKit browsers */
  line-height: 1.5em;
}
input:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
  line-height: 1.5em;
}
input::-moz-placeholder { /* Mozilla Firefox 19+ */
  line-height: 1.5em;
}
input:-ms-input-placeholder { /* Internet Explorer 10+ */
  line-height: 1.5em;
}


2

Việc xóa chiều cao dòng thực sự làm cho văn bản của bạn phù hợp với văn bản giữ chỗ của bạn, nhưng nó không giải quyết đúng vấn đề của bạn vì bạn cần điều chỉnh thiết kế của mình theo lỗ hổng này (đó không phải là lỗi). Thêm liên kết dọc sẽ không làm thỏa thuận. Tôi đã không thử trong tất cả các trình duyệt, nhưng nó không hoạt động trong Safari 5.1.4.

Tôi đã nghe nói về một bản sửa lỗi jQuery cho vấn đề này, đó không phải là hỗ trợ giữ chỗ trên nhiều trình duyệt (jQuery.placeholder), nhưng dành cho các trình giữ chỗ kiểu dáng, nhưng tôi chưa tìm thấy nó.

Trong thời gian chờ đợi, bạn có thể giải quyết bảng trên trang này này hiển thị hỗ trợ trình duyệt khác nhau cho các kiểu khác nhau.

Chỉnh sửa: Tìm thấy plugin! jquery.placeholder.min.js cung cấp cho bạn cả khả năng tạo kiểu đầy đủ và hỗ trợ nhiều trình duyệt để mặc cả.


đã cố gắng tìm một sửa lỗi không giữ chỗ mặc dù tôi đã sử dụng plugin jquery ở trên :) cảm ơn vì sự giúp đỡ!
bị ăn mòn

Hãy ghi nhớ rằng đây là hai plugin khác nhau. Tôi không chắc chắn những gì bạn đang sử dụng (bản demo không hoạt động trong bất kỳ trình duyệt nào của tôi), nhưng bản này sử dụng thuộc tính giữ chỗ của phần tử và tự động tạo một khoảng được hiển thị trên trường đầu vào, mà cung cấp khả năng tạo kiểu tối đa.
zykadelic

2

Tôi đã có một vấn đề, xuất hiện chỉ trong internet explorer. Trường nhập liệu được tạo kiểu

height:38px;
line-height:38px;

Thật không may trong IE, trình giữ chỗ ban đầu xuất hiện không đúng vị trí. Nhưng khi tôi đã nhấp vào trường và sau đó rời khỏi trường này, trình giữ chỗ xuất hiện ở vị trí bên phải.

Giải pháp của tôi là đặt:

line-height:normal;

2

Cài đặt line-height: 0px;cố định nó cho tôi trong Chrome


2
Bạn có thể giải thích những gì điều này thêm vào câu trả lời được chấp nhận từ bốn năm trước?
Nathan Tuggy

1
@NathanTuggy với tôi câu trả lời được chấp nhận đề nghị bạn xóa line-heighthoàn toàn thuộc tính khỏi thành phần. Đối với tôi điều đó chẳng làm được gì, và điều đã khắc phục vấn đề đối với tôi là đặt raline-height: 0px
JobJob

Tương tự ở đây, đây là những gì thực sự khắc phục vấn đề cho tôi.
aeroson

1

Tôi đã tạo một fiddle bằng cách sử dụng ảnh chụp màn hình của bạn làm hình nền và tước bỏ phần đánh dấu thêm, và nó dường như hoạt động tốt

http://jsfiddle.net/fLdQG/2/ (yêu cầu trình duyệt webkit)

công việc này là dành cho bạn? Nếu không, bạn có thể cập nhật fiddle với đánh dấu và CSS chính xác của bạn không?


hmm tôi đã kiểm tra liên kết và nó cũng không hoạt động với tôi Bạn có nghĩ rằng có một plugin / cái gì đó trong chrome của tôi gây ra nó không? ảnh chụp màn hình: Grab.by/8OFf
bị ăn mòn

kiểm tra nó bằng safari và nó hoạt động. Chrome và safari không nên làm điều tương tự?
bị ăn mòn

Hmm, tôi không biết một plugin sẽ ảnh hưởng đến bố cục của bạn như thế này, nhưng cả Chrome và Safari đều hoạt động tốt với tôi (và vâng, chúng sẽ hiển thị cùng một thứ).
ajcw

1
tôi đang sử dụng 9.0.597.84 (chrome) trên mac. bạn đang sử dụng cái gì
bị ăn mòn

Tôi đang sử dụng Chrome 8.0.552.237 trên Windows 7.
ajcw

1

Tôi nhận thấy vấn đề ngay khi tôi cập nhật Chrome trên os x lên bản phát hành ổn định mới nhất (9.0.597.94) vì vậy đây là lỗi của Chrome và hy vọng sẽ được khắc phục.

Tôi bị cám dỗ thậm chí không cố gắng khắc phục sự cố này và chỉ chờ sửa chữa. Nó sẽ chỉ có nghĩa là nhiều công việc lấy nó ra.


Mmm vậy nó được xác nhận rồi sao? Có cách nào để "hạ cấp" chrome của chúng tôi để kiểm tra xem nó có thực sự là chrome không?
bị ăn mòn

1
đó là năm 2013 và tôi vẫn còn có vấn đề này trên phiên bản mới nhất của chrome: Version 27.0.1453.116 m
Postscripter

1

Trình giữ chỗ không bị ảnh hưởng bởi line-heightpadding không nhất quán trên các trình duyệt.

Tôi đã tìm thấy một giải pháp khác mặc dù.

VERTICAL-ALIGN. Đây có lẽ là lần duy nhất nó hoạt động nhưng thay vào đó hãy thử và thay đổi nhiều dòng mã CSS.


2
không làm gì cho tôi
viết bài

1

Xóa chiều cao dòng hoặc đặt bằng cách sử dụng phần đệm ... nó hoạt động trong tất cả các trình duyệt


1

Tôi tìm thấy câu trả lời khắc phục sự thất vọng của tôi về điều này trên blog của John Catterfeld .

... Chrome (v20-30) thực hiện hầu hết tất cả các kiểu nhưng với một cảnh báo lớn - các kiểu giữ chỗ không thay đổi kích thước hộp đầu vào, vì vậy hãy tránh xa những thứ như chiều cao dòng và đệm trên hoặc dưới.

Nếu bạn đang sử dụng chiều cao dòng hoặc phần đệm, bạn sẽ thất vọng với trình giữ chỗ kết quả. Tôi đã không tìm thấy một cách xung quanh cho đến thời điểm này.


1

Nếu bạn muốn di chuyển văn bản giữ chỗ ngay và để con trỏ vào chỗ trống, bạn cần thêm (các) khoảng trống ở đầu thuộc tính giữ chỗ:

<input type="email" placeholder="  Your email" />

1

Tôi đã thử nghiệm gần như tất cả các phương pháp được đưa ra ở đây trong trang này cho ứng dụng Angular của tôi. Chỉ có tôi tìm thấy giải pháp thông qua &nbsp;đó chèn không gian tức là

Vật liệu góc

<input matInput type="text" class="pl-2" placeholder="&nbsp;&nbsp;Email">

Chất liệu phi góc

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>

<div class="container m-3 d-flex flex-column align-items-center justify-content-around" style="height:100px;">
<input type="text" class="pl-0" placeholder="Email with no Padding" style="width:240px;">
<input type="text" class="pl-3" placeholder="Email with 1 rem padding" style="width:240px;">
</div>

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.