Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to justify-align floating HTML elements with CSS?

Essentially, I'm trying to achieve the affect of "text-align:justify" but with floating block elements. I have many blocks that I want to justify-align.

Ie. each line is horizontally-spaced differently to make sure lengths of each line are the same. (Non-ragged right edge).

Is there a way to do this with CSS? If not, is there a suitable JS library to achieve this? Or is this just infeasible?

like image 866
rocketmonkeys Avatar asked Dec 06 '10 22:12

rocketmonkeys


People also ask

How do you justify alignment in HTML?

The HTML attribute is used to justify-content is align attribute. The align attribute of <p> tag is used to justify the text on a web page. This can be done by assigning the value to the aligned attribute as justified.

How do you center a float in CSS?

There is no way to float center in CSS layout. So, we can center the elements by using position property. Example 1: This example set the position of elements exactly at the center of the screen.

Can you justify text in CSS?

The text-justify property in CSS is a companion to the text-align property that is used to set the justification method of text when text-align is set to the justify value.


2 Answers

If the items are not actually floating, you can use position:absolute; left:1em; right:1em to have CSS calculate the widths of the items for you based on offsets from some positioned parent.

If you are only using float because you have some block-level items you are trying to make flow, use display:inline-block on the items instead of floating them. If the parent element has text-align:justify this should give you the effect (I imagine that) you want.

Here is a simple test showing you the result of inline-block with text-align:justify.

Edit: I've updated the simple test to more clearly show that the left and right edges are always aligned except for the last line.

like image 177
Phrogz Avatar answered Sep 30 '22 15:09

Phrogz


Completing previous answer, if you want to align DOM nodes created programatically (e.g. by using document.createElement and parentElement.appendChild in javaScript), no white space will be added between aligned elements. This can cause non-working of aligment.

On my Google Chrome 56.0.2924.87 and Firefox 51.0.1 (64-bit) browsers, aligment doesn't work if there aren't any white spaces to separate div elements:

https://jsfiddle.net/jc5qwyaw/

There is an example when I create DOM nodes by javaScript:

https://jsfiddle.net/oa8yeudr/

If you uncomment command wrapDiv.appendChild(document.createTextNode(" "));, you can see the difference. Possible solution can be appending a white space text node after div nodes as example shows above.

Only tested on Chrome 56.0.2924.87 and Firefox 51.0.1 (64-bit).

like image 23
Kristóf Kőhalmy Avatar answered Sep 30 '22 15:09

Kristóf Kőhalmy