Bug Tracker

Modify

Ticket #4827 (closed bug: invalid)

Opened 4 years ago

Last modified 2 years ago

img with %-unit inside of inline-block element inside of scaled element does not size properly- whooo

Reported by: eveningsky Owned by:
Priority: minor Milestone: 1.4
Component: core Version: 1.3.2
Keywords: inline-block css percent scale size nested Cc:
Blocking: Blocked by:

Description

I realize this is a bit of an edge case, but it may point to other more important undiscovered issues. It takes a fairly complicated set of circumstances to occur.

Normally an image sized using percentage units will automatically scale if one of it's parents is scaled. If a static or relatively positioned img and an absolutely positioned image are both nested inside an inline-block element which is inside the element to be scaled, the static or relative image will either not scale along with or will scale only partially. I first noticed this with $.animate(), but since $.css() suffers the same, I would consider this a core issue.

The example is also complicated so I have commented frivolously.

<script type="text/javascript">
$(document).ready(function(){
	// two of the same image overlayed with >50% opacity should look like one 100% opacity image
	// lowered opacity make the bug easily viewed as the two images split apart.
	$('img').css('opacity',.6);  
	
	// scale the ultimate parent up on mouseover and down on mouseout
	$('div.hoverAction').hover(
		function(){	$(this).css({width:'400px'}); },
		function(){	$(this).css({width:'200px'}); }
	)
});
</script>

<style type="text/css">
/* zero the padding to be sure this isn't the problem */
div, img {margin:0; padding:0;}

div.hoverAction{
	/* if this is display: static the absolutely positioned img fills 100% of screen */
	position: relative;
	/* default width */
	width: 200px; 
}

/* The Culprit. Take this line out and the problem goes away. */
div.inlineBlock{display: inline-block;}

/* 100% width, should scale to 100% of containing element */
img{width: 100%;}

/* Occurs with one static or relative and one absolute.  Both static or both absolute cause no issues. */
img.scalesPartially{position:static;}
img.scalesProperly{position:absolute; top:0; left:0;}

</style>

<div class="hoverAction">
	<div class="inlineBlock">
    	<!-- This image will either not scale or will scale to about 300px instead of 400px 
          -- I have not figured out what decides which.  In one case it scaled partially
          -- then using the exact same code with a different image, it did not scale at all.-->
        <img alt="" class="scalesPartially" src="assets/images/ron.png" />
        <!-- This image will scale properly to completely fill its 400px wide container -->
        <img alt="" class="scalesProperly" src="assets/images/ron.png" />
    </div>
</div>

<!-- On mouseout both images will return to the same proper initial size. -->

Change History

comment:1 Changed 2 years ago by snover

  • Status changed from new to closed
  • Resolution set to invalid

Thanks for the report, but this is not a jQuery bug. jQuery doesn’t do anything except change the style properties of the object, so any issues you are having are with the browser or the CSS spec.

Please follow the  bug reporting guidlines and use  jsFiddle when providing test cases and demonstrations instead of pasting the code in the ticket.

View

Add a comment

Modify Ticket

Action
as closed
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.