I have a list of inline-block elements that wrap to form several rows. I'd like to display a div element between on of the rows, depending on where a specific element is located. For example, the first few rows are numbered:
If I wanted to target the third element and display a full length element (100% of the div containing the blocks), then it would look like this:
The position of the full-length div would be the same for any of the blocks 1-5. Or, if another block was targeted, like 7 or 8, it would look like:
Notice how the rows are "shifted down". I understand how to do this with block-level elements, but not in between rows of wrapped inline-block elements. The rows that each of the numbered blocks would be on would change as the browser window width changes, and the full-length div would "know" which row to be positioned beneath.
How would someone go about placing the div below that particular row of elements? Is it possible with some kind of relative or absolute position with CSS? Could the row position change dynamically as the blocks are reordered with window width changes?
UPDATE: Here is a codepen that has the blocks and the inserted div. The div is styled to be absolutely positioned, and can be moved to the appropriate position by inserting it after the desired block element tag, but I still can't get the row beneath it to make room and slide down.
The most common and traditional way (inline-block)The most common way to place two divs side by side is by using inline-block css property. The inline-block property on the parent placed the two divs side by side and as this is inline-block the text-align feature worked here just like an inline element does.
First, we will create a basic HTML code for the div elements and apply different CSS styling to make it display inline. CSS properties: In this article, we will use below CSS properties. Display: We will use display: flex and display: inline-block property to show div elements inline.
Here's a different alternative:
http://jsfiddle.net/SYJaj/7/
There is no need to have the "banner" be absolutely positioned. Just give it display:inline-block;
like everything else, and calculate which block it needs to follow with the offset
method in jQuery.
The key is in this code:
function placeAfter($block) {
$block.after($('#content'));
}
$('.wrapblock').click(function() {
$('#content').css('display','inline-block');
var top = $(this).offset().top;
var $blocks = $(this).nextAll('.wrapblock');
if ($blocks.length == 0) {
placeAfter($(this));
return false;
}
$blocks.each(function(i, j) {
if($(this).offset().top != top) {
placeAfter($(this).prev('.wrapblock'));
return false;
} else if ((i + 1) == $blocks.length) {
placeAfter($(this));
return false;
}
});
});
EDIT: Changed the stylesheet to look like yours.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With