2011-08-17 33 views
5

Tôi đang cố gắng áp dụng hiệu ứng di chuột hình ảnh trên mỗi hàng trong bảng css nhưng cần nó xuất hiện ở bên trái phần tử chứa.Hiệu ứng di chuột hình ảnh bên ngoài phần tử có chứa

View image http://www.weiserwebworld.com/images/view.gif

Bất kỳ ý tưởng nào?

JS:

$(function() { 
    $(".table-row").hover(function() { 
     $(this).addClass("highlight"); 
    }, function() { 
     $(this).removeClass("highlight"); 
    }) 
}) 

CSS:

#container { 
    width: 660px; 
    margin: 20px auto; 
} 

div .table { 
    display: table; 
    border: 1px red solid; 
} 
div .table-row { 
    display: table-row; 
} 
div .table-cell { 
    display: table-cell; 
    width: 145px; 
    padding: 10px; 
    vertical-align: top; 

} 
.highlight { 
    cursor: pointer; 
    background-image: url('click-to-view.png'); 
    background-position: 0 center; 
    background-repeat: no-repeat; 

} 

HTML:

<div id="container"> 
    <div class="table"> 
     <div class="table-row"> 
      <div class="table-cell">Ralph Kramden</div> 
      <div class="table-cell">Truck Driver</div> 
      <div class="table-cell">8/17/2010</div> 
      <div class="table-cell">N/A</div> 
     </div> 
     <div class="table-row"> 
      <div class="table-cell">Ralph Kramden</div> 
      <div class="table-cell">Truck Driver</div> 
      <div class="table-cell">8/17/2010</div> 
      <div class="table-cell">N/A</div> 
     </div> 
    </div> 
</div> 
+3

Tôi phải chỉ ra điều này: đối với một bảng dữ liệu, bạn nên sử dụng '

', không phải zillions của 'div' với' display: table * '.Một '
'là sự lựa chọn đúng đắn, ngữ nghĩa. – thirtydot

+0

Điều này đúng nhưng đây là phiên bản đơn giản của mã thực. Sử dụng bảng không thực tế với mã thực mà chúng tôi cũng đang sử dụng. – YourBudWeiser

+1

@YourBudWeiser: nếu bạn đang sử dụng những thứ như 'display: table- *', bạn rõ ràng không quan tâm đến IE6. Vì vậy, hãy ngừng sử dụng jQuery để thêm một lớp .highlight và bắt đầu sử dụng ': hover' trong CSS của bạn! –

Trả lời

1

Thứ nhất, vứt bỏ này:

$(function() { 
    $(".table-row").hover(function() { 
     $(this).addClass("highlight"); 
    }, function() { 
     $(this).removeClass("highlight"); 
    }) 
}) 

Nó là một điều ghê tởm.

Sau đó, thay đổi công cụ chọn CSS .highlight thành .table-row:hover. Vì bạn rõ ràng không quan tâm đến IE6 (trong đó :hover chỉ hoạt động trên a yếu tố), không có gì sai khi sử dụng :hover.

Hiện tại, phần còn lại của sự cố.


Kỹ thuật mà tôi sẽ sử dụng cho điều này là giả yếu tố before hoặc after. Một cái gì đó như thế này:

.table-row { 
    position: relative; /* So that the position: absolute on the "click to view" makes it relative to the table row */ 
} 
.table-row:hover:after { 
    position: absolute; 
    left: -80px; /* Adjust as desired */ 
    content: url(click-to-view.png); /* This makes it an image */ 
} 

Có rất nhiều tinh chỉnh có thể được thực hiện với điều này, nhưng đó là ý tưởng chung. Không có bản demo trên jsfiddle vì tôi không thể làm phiền việc thực hiện cấu trúc bảng hoặc nhận được một hình ảnh cho nó.

+0

Tôi cũng đã đi tuyến phần tử giả, tuy nhiên nó không hoạt động trong trường hợp này với 'display: table-row'. Nó vẫn liên quan đến cửa sổ chứ không phải '.table-row'. – tw16

+0

Phải không? Tôi đã nghĩ rằng nó sẽ. Tự hỏi nếu đó có thể là một lỗi trình duyệt. Đi ngủ bây giờ, nhưng tôi sẽ đặt nó vào danh sách Những điều cần điều tra khi tôi có thời gian (sẽ không bao giờ). –

+0

Lol, bạn là một chàng trai vui nhộn Chris! Điều này thực sự làm việc. Vị trí bên trái trong ví dụ đẩy hình ảnh ra khỏi màn hình nhưng chỉ cần thay đổi bên trái thành một số dương và ở đó. Cảm ơn! – YourBudWeiser

0

Bạn cần phải đặt hình ảnh của bạn trong một DIV, sau đó vị trí của DIV liên quan đến hàng. Các nền không thể đi ra ngoài ranh giới của vùng chứa của chúng.

1

Bạn có thể thực hiện việc này bằng CSS thuần túy.

Đây là cách nhanh chóng và dơ bẩn, bạn sẽ phải tinh chỉnh nó để làm thế nào bạn muốn, nhưng ý tưởng chung là:

Nếu bạn cung cấp cho hàng của bạn một id(), bạn có thể thêm một phong cách CSS như thế này:

.overlay { 
    display: none; 
    position: absolute; 
    left: -30px; //makes it appear left of box, even though it's technically "in" box. 
} 

#table-row1:hover .overlay { 
    display; block; //Causes div to appear. 
} 

Bây giờ, chỉ cần thêm hình ảnh bạn muốn, sẽ xuất hiện khi bạn cuộn qua hàng.

Lưu ý rằng class = overlay div PHẢI được đặt INSIDE của div = table-row1 div hoặc hover-xuất hiện sẽ không hoạt động!

Tôi cũng khuyên bạn nên làm lại điều này bằng cách sử dụng thẻ giống nhau: phương pháp di chuột, vì phương pháp div hiện tại của bạn có thuộc tính bảng có thể khó sử dụng rất nhanh.

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