Horizontally and vertically is a common question used in interviews. Suppose there is a parent element containing 1 child element like this:
1 2 3 4 | <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> div</span> <span class="token attr-name">class</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> parent <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> div</span> <span class="token attr-name">class</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> child <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> hello world <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> div</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> div</span> <span class="token punctuation">></span></span> |
In this article we will look at different ways to center the element above the page:
- Use Flex
- Use Grid
- Use absolute position
- Use Table
- Using writing-mode
- Use the Table tab
- Use margin auto
1. Use Flex
When using flex, we can use justify-content
or align-items
to align if needed:
1 2 3 4 5 6 7 | <span class="token selector">.parent</span> <span class="token punctuation">{</span> <span class="token property">height</span> <span class="token punctuation">:</span> 100% <span class="token punctuation">;</span> <span class="token property">display</span> <span class="token punctuation">:</span> flex <span class="token punctuation">;</span> <span class="token property">align-items</span> <span class="token punctuation">:</span> center <span class="token punctuation">;</span> <span class="token property">justify-content</span> <span class="token punctuation">:</span> center <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
2. Use Grid
CSS Grid includes pretty much all the alignment options like flexbox, so we can use it on the parent element like this:
1 2 3 4 5 6 | <span class="token selector">.parent</span> <span class="token punctuation">{</span> <span class="token property">height</span> <span class="token punctuation">:</span> 100vh <span class="token punctuation">;</span> <span class="token property">display</span> <span class="token punctuation">:</span> grid <span class="token punctuation">;</span> <span class="token property">place-items</span> <span class="token punctuation">:</span> center <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Or
1 2 3 4 5 6 7 | <span class="token selector">.parent</span> <span class="token punctuation">{</span> <span class="token property">height</span> <span class="token punctuation">:</span> 100vh <span class="token punctuation">;</span> <span class="token property">display</span> <span class="token punctuation">:</span> grid <span class="token punctuation">;</span> <span class="token property">align-items</span> <span class="token punctuation">:</span> center <span class="token punctuation">;</span> <span class="token property">justify-content</span> <span class="token punctuation">:</span> center <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
3. Use absolute position
A simple trick using position absolute:
1 2 3 4 5 6 7 | <span class="token selector">.parent</span> <span class="token punctuation">{</span> <span class="token property">position</span> <span class="token punctuation">:</span> absolute <span class="token punctuation">;</span> <span class="token property">top</span> <span class="token punctuation">:</span> 50% <span class="token punctuation">;</span> <span class="token property">left</span> <span class="token punctuation">:</span> 50% <span class="token punctuation">;</span> <span class="token property">transform</span> <span class="token punctuation">:</span> <span class="token function">translate</span> <span class="token punctuation">(</span> -50% <span class="token punctuation">,</span> -50% <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
4. Use Table
A really simple approach and one of the first (before, everything was a table), is to use the behavior of table cells and vertical alignment to center an element. on the container.
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token selector">.parent</span> <span class="token punctuation">{</span> <span class="token property">width</span> <span class="token punctuation">:</span> 100vw <span class="token punctuation">;</span> <span class="token property">height</span> <span class="token punctuation">:</span> 100vh <span class="token punctuation">;</span> <span class="token property">display</span> <span class="token punctuation">:</span> table <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.child</span> <span class="token punctuation">{</span> <span class="token property">display</span> <span class="token punctuation">:</span> table-cell <span class="token punctuation">;</span> <span class="token property">vertical-align</span> <span class="token punctuation">:</span> middle <span class="token punctuation">;</span> <span class="token property">text-align</span> <span class="token punctuation">:</span> center <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
5. Using writing-mode
writing-mode can change the way the text is displayed. For example, you can use writing-mode to change the display direction of the text to vertical.
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token selector">.parent</span> <span class="token punctuation">{</span> <span class="token property">writing-mode</span> <span class="token punctuation">:</span> vertical-lr <span class="token punctuation">;</span> <span class="token property">text-align</span> <span class="token punctuation">:</span> center <span class="token punctuation">;</span> <span class="token property">height</span> <span class="token punctuation">:</span> 100vh <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.child</span> <span class="token punctuation">{</span> <span class="token property">writing-mode</span> <span class="token punctuation">:</span> horizontal-tb <span class="token punctuation">;</span> <span class="token property">display</span> <span class="token punctuation">:</span> inline-block <span class="token punctuation">;</span> <span class="token property">width</span> <span class="token punctuation">:</span> 100% <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
6. Use the Table tab
You can also use table
tags
1 2 3 4 5 6 7 8 9 10 | <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> table</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> tbody</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> tr</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> td</span> <span class="token attr-name">class</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> father <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> div</span> <span class="token attr-name">class</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> child <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> hello world <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> div</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> td</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> tr</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> tbody</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> table</span> <span class="token punctuation">></span></span> |
1 2 3 4 5 6 7 8 9 | <span class="token selector">table</span> <span class="token punctuation">{</span> <span class="token property">height</span> <span class="token punctuation">:</span> 100vh <span class="token punctuation">;</span> <span class="token property">width</span> <span class="token punctuation">:</span> 100% <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.father</span> <span class="token punctuation">{</span> <span class="token property">text-align</span> <span class="token punctuation">:</span> center <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
7. Use margin auto
Use margin-auto on the child element, and display on the parent element:
1 2 3 4 5 6 7 8 9 | <span class="token selector">.parent</span> <span class="token punctuation">{</span> <span class="token property">display</span> <span class="token punctuation">:</span> flex <span class="token punctuation">;</span> <span class="token property">height</span> <span class="token punctuation">:</span> 100vh <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token selector">.child</span> <span class="token punctuation">{</span> <span class="token property">margin</span> <span class="token punctuation">:</span> auto <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Best way according to author is Using Flex (1) and Using Grid (2)
Source: dev.to