Skip to content

Commit 10399dd

Browse files
committed
CSS: elements are hidden when either offsetWidth or offsetHeight is zero
- Note: this is a breaking change that has been delayed for several versions. Fixes #10406 Fixes #13132
1 parent 269a27c commit 10399dd

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

src/css/hiddenVisibleSelectors.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ define([
66
jQuery.expr.filters.hidden = function( elem ) {
77
// Support: Opera <= 12.12
88
// Opera reports offsetWidths and offsetHeights less than zero on some elements
9-
return elem.offsetWidth <= 0 && elem.offsetHeight <= 0;
9+
// Use OR instead of AND as the element is not visible if either is true
10+
// See tickets #10406 and #13132
11+
return elem.offsetWidth <= 0 || elem.offsetHeight <= 0;
1012
};
1113
jQuery.expr.filters.visible = function( elem ) {
1214
return !jQuery.expr.filters.hidden( elem );

test/unit/css.js

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -886,29 +886,31 @@ test( "css opacity consistency across browsers (#12685)", function() {
886886
});
887887

888888
test( ":visible/:hidden selectors", function() {
889-
expect( 13 );
889+
expect( 16 );
890+
891+
var $newDiv, $br, $table;
890892

891893
ok( jQuery("#nothiddendiv").is(":visible"), "Modifying CSS display: Assert element is visible" );
892894
jQuery("#nothiddendiv").css({ display: "none" });
893895
ok( !jQuery("#nothiddendiv").is(":visible"), "Modified CSS display: Assert element is hidden" );
894-
jQuery("#nothiddendiv").css({"display": "block"});
896+
jQuery("#nothiddendiv").css({ "display": "block" });
895897
ok( jQuery("#nothiddendiv").is(":visible"), "Modified CSS display: Assert element is visible");
896-
ok( jQuery(window).is(":visible") || true, "Calling is(':visible') on window does not throw an exception (#10267)");
897-
ok( jQuery(document).is(":visible") || true, "Calling is(':visible') on document does not throw an exception (#10267)");
898+
ok( !jQuery(window).is(":visible"), "Calling is(':visible') on window does not throw an exception (#10267).");
899+
ok( !jQuery(document).is(":visible"), "Calling is(':visible') on document does not throw an exception (#10267).");
898900

899901
ok( jQuery("#nothiddendiv").is(":visible"), "Modifying CSS display: Assert element is visible");
900902
jQuery("#nothiddendiv").css("display", "none");
901903
ok( !jQuery("#nothiddendiv").is(":visible"), "Modified CSS display: Assert element is hidden");
902904
jQuery("#nothiddendiv").css("display", "block");
903905
ok( jQuery("#nothiddendiv").is(":visible"), "Modified CSS display: Assert element is visible");
904906

905-
// ok( !jQuery("#siblingspan").is(":visible"), "Span with no content not visible (#13132)" );
906-
// var $newDiv = jQuery("<div><span></span></div>").appendTo("#qunit-fixture");
907-
// equal( $newDiv.find(":visible").length, 0, "Span with no content not visible (#13132)" );
908-
// var $br = jQuery("<br/>").appendTo("#qunit-fixture");
909-
// ok( !$br.is(":visible"), "br element not visible (#10406)");
907+
ok( !jQuery("#siblingspan").is(":visible"), "Span with no content not visible (#13132)" );
908+
$newDiv = jQuery("<div><span></span></div>").appendTo("#qunit-fixture");
909+
equal( $newDiv.find(":visible").length, 0, "Span with no content not visible (#13132)" );
910+
$br = jQuery("<br/>").appendTo("#qunit-fixture");
911+
ok( !$br.is(":visible"), "br element not visible (#10406)");
910912

911-
var $table = jQuery("#table");
913+
$table = jQuery("#table");
912914
$table.html("<tr><td style='display:none'>cell</td><td>cell</td></tr>");
913915
equal(jQuery("#table td:visible").length, 1, "hidden cell is not perceived as visible (#4512). Works on table elements");
914916
$table.css("display", "none").html("<tr><td>cell</td><td>cell</td></tr>");

0 commit comments

Comments
 (0)