2011-08-29 46 views
10

Tôi có một nút HTML đơn giản mà chứa văn bản và hình ảnh:Làm cách nào để căn chỉnh chiều dọc hình ảnh ở kích thước không xác định với tâm của div?

HTML:(Đã có trên http://jsfiddle.net/EFwgN)

<span class="Button"> 
    <img src="http://www.connectedtext.com/Image/ok.gif" /> 
    Small Icon 
</span> 

CSS:

span.Button {display:inline-block; margin:2px 4px;padding:3px 6px; 
      background-color:#ddd; height:24px; line-height:24px; 
      vertical-align:middle;} 
span.Button img {vertical-align:middle;} 

tôi có thể không đưa ra kết hợp phù hợp với các yêu cầu sau:

  • Hình ảnh và văn bản cần phải theo chiều dọc ở giữa div, với văn bản ở giữa hình ảnh. Nó phải gọn gàng.
  • ngang - hình ảnh có thể ở bất kỳ chiều rộng nào và nút sẽ phát triển để hiển thị.
  • Theo chiều dọc - hình ảnh có thể ở bất kỳ chiều cao nào, nhỏ hơn hoặc lớn hơn so với nút. Khi hình ảnh lớn hơn, tôi không bận tâm nếu các pixel thừa được hiển thị hoặc cắt, miễn là nó được căn giữa.
  • Nút ở độ cao cố định. Hiện tại tôi sử dụng line-height để căn giữa văn bản.
  • Nút phải nằm độc đáo phù hợp với các nút và văn bản khác.
  • Các giải pháp cần phải làm việc trên tất cả các phiên bản mới nhất của trình duyệt chính, và Internet Explorer 8.

Dưới đây là một jsfiddle với mã hiện tại của tôi: http://jsfiddle.net/EFwgN
(chú ý vào biểu tượng nhỏ là hơi thấp hơn trung tâm của nút)

+0

Tôi biết có vô số bản sao, nhưng tôi có thể nhận được bất kỳ thứ gì để hoạt động tốt ... – Kobi

+0

Ok, đã bật. * (ít nhất) * ** 150 ** danh tiếng bằng tiền thưởng cho một giải pháp tốt, thêm ** 50 ** nếu giải pháp hỗ trợ IE8 ở chế độ tương thích. – Kobi

+0

Tôi đã tìm thấy cách tắt chế độ xem tương thích - vì vậy không có điểm thưởng! http://twigstechtips.blogspot.com/2010/03/css-ie8-meta-tag-to-disable.html – Kobi

Trả lời

4

Một giải pháp đơn giản, nếu bạn cần không ít hơn IE8 (trong chế độ tiêu chuẩn): http://jsfiddle.net/kizu/EFwgN/31/

Chỉ cần thêm margin: -100px 0-img, do đó lợi nhuận tiêu cực sẽ ăn bất kỳ chiều cao lớn:

span.Button img {vertical-align:middle; margin:-100px 0; 
       position:relative; top:-2px;} 

Tôi đã thêm position: relative; top:-2px; chỉ để trông nó tốt hơn :)

Nhưng nếu bạn cần hỗ trợ chế độ tương thích hoặc IE lt 8 (vì lý do nào đó), điều có lề sẽ không hoạt động. Vì vậy, bạn sẽ cần một đánh dấu phụ: http://jsfiddle.net/kizu/EFwgN/28/, nhưng nó hơi hacky và chỉ hoạt động với chiều cao của nút cố định (như trong ví dụ của bạn).

+0

Chế độ tương thích IE8 đã chết với tôi. quên nó đi:) '. Ngoài ra, hình ảnh không phải là * chính xác * ở giữa, có vẻ tốt hơn với '-1px', đối với tôi, điều này làm tôi lo lắng. Thú vị mặc dù! – Kobi

+0

Nó được căn giữa theo chữ và hậu duệ của phông chữ, nhưng không trực quan, do đó, yeah, '-1px' hoặc' -2px' sẽ sửa phần trực quan :) – kizu

+0

Vì vậy, nếu bạn sử dụng một khối nội tuyến khác thay vì chỉ văn bản, bạn sẽ thấy rằng nó hoàn toàn tập trung: http://jsfiddle.net/kizu/EFwgN/36/ Vấn đề là căn chỉnh theo chiều dọc của văn bản, vì vậy bạn nên sửa nó bằng cách di chuyển hình ảnh một chút. – kizu

0

Tại sao không làm cho hình ảnh co lại trong trường hợp nó thực sự cao hơn nút?

span.Button img { 
    vertical-align:middle; 
    max-height: 100%; 
} 
+0

Tôi không thích - Tôi có một số hình ảnh được đệm với các pixel trong suốt và tôi có thể tự do ẩn chúng. Nó không phải là xấu, bằng cách này, nhưng những hình ảnh vẫn không ở trung tâm của nút. – Kobi

0

Tôi có thể đã bỏ lỡ một số yêu cầu, khi thiết lập span.Button's height to auto đã làm thủ thuật cho tôi.

Nếu những gì bạn muốn là nút tăng trưởng chỉ theo chiều ngang, với tràn dọc cắt, hơn có lẽ tôi muốn làm điều đó như thế này:

span.Button {display:inline-block; margin:2px 4px;padding:3px 6px; 
      background-color:#ddd; width:auto; height:24px; line-height:24px;overflow:hidden; 
      vertical-align:middle; 
      } 

sử dụng một chút javascript để xác định chiều cao img, và sau đó tập trung nó cho phù hợp.

+0

Biểu tượng lớn bị cắt, với chữ OK, nhưng văn bản và biểu tượng không được căn giữa: http://jsfiddle.net/uNDCL/ – Kobi

1

Sử dụng màn hình dựa trên bảng. Yêu cầu thu hẹp hình ảnh do xung đột giữa display:table-cell;height:24px. Rất giống với nỗ lực aborted của bạn từ các ý kiến, nhưng bao gồm các yêu cầu display:block; vào hình ảnh: http://jsfiddle.net/shanethehat/5ck3s/

+0

Cảm ơn vì điều này. Đó là một lựa chọn tốt nếu tôi muốn rescale hình ảnh, nhưng ở đây tôi không muốn. – Kobi

1

Có bạn đi, sử dụng jQuery:

$(".button img").load(function() 
      { 
       $(this).each(function() 
          { 
           sh = $(this).outerHeight(); 
           if (sh > 24){ 
           alert(sh); 
           $(this).css("margin-top", - (sh - 24)/2 + 'px'); 
           } 
          }); 
      }); 

Chỉnh sửa: Chỉ cần thấy rằng bạn muốn nó tinh khiết CSS, cũng , đây là đoạn mã tìm ra!:)

0

Làm thế nào về ... điều này?

http://jsfiddle.net/92K8J/

Added display:inline-block đến những hình ảnh, và loại bỏ các cố định height của container.

+0

Xin lỗi, nhưng chiều cao cố định là một trong những yêu cầu quan trọng nhất ...Tôi có một số hình ảnh đệm với pixel trong suốt, chủ yếu là, và tôi không muốn cắt chúng bởi vì 1. Nó nhàm chán 2. Chúng được chia sẻ với các yếu tố khác, và tôi không muốn sao chép chúng. – Kobi

Các vấn đề liên quan