I have an image and some text inside a div and I'd like to put the image and the text in the vertical center of the div using CSS. The problem is that I don't know how many lines of text I will have but the text and the image must be ALWAYS in the middle. For example, when there's only one line of text the div should look like this:
#################################### # _______ # # | | # # | | # # | IMAGE | text text text # # | | # # |_______| # # # ####################################
If eventually I have more lines or the height of text is larger than the height of the image then the image should be aligned, just like this:
#################################### # # # text text text # # _______ text text text # # | | text text text # # | | text text text # # | IMAGE | text text text # # | | text text text # # |_______| text text text # # text text text # # text text text # # # ####################################
I'm in trouble to get this effect, is there any way without using javascript to do this?
Obs. The parent div of the div I'm referring to have position:relative so there's another problem.
Using flex property in css.To align text vertically center by using in flex using align-items:center; if you want to align text horizontally center by using in flex using justify-content:center; .
To align two <div> elements vertically in Bootstrap 3, you can try using the CSS Flexible Box Layout. In the example below, we display the needed row as a flex container box with the CSS display property and then, align the flex-items (columns) vertically with the align-items property.
An <img> element is an inline element (display value of inline-block ). It can be easily centered by adding the text-align: center; CSS property to the parent element that contains it. To center an image using text-align: center; you must place the <img> inside of a block-level element such as a div .
Give both the image and the text a vertical-align: middle - the text needs to be contained in an element that is also display: inline. So markup like this:
<div> <span><img src="blah.jpg" /></span> <span>text text text</span> </div> div { display: table; } img { vertical-align: middle; display: table-cell; } span { vertical-align: middle; display: table-cell; }
should work. Here's a jsfiddle to demonstrate (edited fiddle to show everything is vertically aligned within a container as well.)
EDIT: to get the behavior you want, I recommend using additional display properties - table for the container and table-cell for the contained elements. Fiddle link has been updated with the changes.
EDIT: the only way I could think of to get it to work was to wrap the image in another inline container, in this case a span. I've updated the fiddle to demonstrate.
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