Urara-Blog/urara/css-layout.md
2022-08-06 18:39:48 +08:00

269 lines
4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: CSS · 三种布局方式
slug: css-layouts
tags:
- CSS
created 2022-01-13T10:07:00.000Z
summary: Float / Flexbox / Grid /
lastmod: 2022-05-07T05:30:20.613Z
---
课程:[Build Responsive Real-World Websites with HTML and CSS](https://www.udemy.com/course/design-and-develop-a-killer-website-with-html5-and-css3/)
## Overview
![](https://s2.loli.net/2022/01/08/SjgmE2nl7TkUAqM.png)
## Box-sizing
![https://s2.loli.net/2022/01/09/yCScJXVD9dYIjqK.png](https://s2.loli.net/2022/01/09/yCScJXVD9dYIjqK.png)
> 未定义之前content-box
### reset
```css
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
```
## Float Layout
- 浮动在页面之上,对周围元素没有影响
- 现在很少用了
### left
- 浮动到页面左边
![https://s2.loli.net/2022/01/08/HZlqu9dyfmG5QYV.png](https://s2.loli.net/2022/01/08/HZlqu9dyfmG5QYV.png)
```css
.author-img {
float: left;
}
```
> 此时图片和文本不在同一个层面上
### right
> 浮动到页面右边
![https://s2.loli.net/2022/01/08/ESLcqpbH2VfuNXj.png](https://s2.loli.net/2022/01/08/ESLcqpbH2VfuNXj.png)
```css
p {
float: right;
}
```
### ABSOLUTE POSITIONING VS. FLOATS
![https://s2.loli.net/2022/01/08/g6Zk2rDAWbxLeoI.png](https://s2.loli.net/2022/01/08/g6Zk2rDAWbxLeoI.png)
### Clear Float
- 当没有其他元素可以 clear float 时,在其后新建一个元素设置 clear
- 当存在需要清除的元素时,直接在该元素上清除
#### 方法 1: empty div
使用一个并列的空`<div>`元素来清除
```html
<head>
<h1>title</h1>
<h2>title</h2>
<div class="clear"></div>
</head>
```
```css
/*清除两者*/
.clear {
clear: both;
}
/*清除左边*/
.clear {
clear: left;
}
```
#### 方法 2:clearfix hack
原理和 empty div 的方式一样,但更简单,利用 pseudo element 在 parent element 后增加一个元素
```html
<head class="clearfix">
<h1>title</h1>
<h2>title</h2>
</head>
```
```css
.clearfix::after {
clear: both;
content: '';
display: block;
}
```
## Flexbox
![](https://s2.loli.net/2022/01/09/8HiwTDALGbCZQdf.png)
![](https://s2.loli.net/2022/01/09/RMmiLHxa78n4Atw.png)
> 加粗字体为默认状态
```css
.container {
display: flex;
align-items: center; /*水平居中*/
justify-content: center; /*垂直居中*/
}
```
### Flex container
- flex container takes the height of the tallest items
常用:
```css
.container {
display: flex;
align-items: stretch;
justify-content: flex-start;
}
```
### Flex items
```css
.items {
align-self: flex-start;
}
```
### Propetities
#### order
数字越大越靠后
#### flex-grow
数字越大占比越大
#### flex-basis
items width
#### shorthand
`flex:1` =
```css
flex-grow: 1;
flex-shrink: 1;
flex-basis: 0%;
```
## CSS Grid
![](https://s2.loli.net/2022/01/09/6ovHUJOilxqtkjb.png)
![](https://s2.loli.net/2022/01/09/1vLi2G6okjNzrut.png)
![](https://s2.loli.net/2022/01/09/krsGJ3AgQpR2Uf9.png)
### grid container
```css
.container {
display: grid;
grid-template-columns: 250px 200px; /*两列*/
grid-template-rows: 200px 200px; /*两行*/
}
```
> 通常不定义 rows
#### Gap
用 gap 而不是 margin:
```css
.container {
/*gap:20px;*/
columns-gap: 30px;
row-gap: 20px;
}
```
#### align tracks inside containers
> when the content is smaller than the grid
```css
justify-content: center;
align-content: center;
```
### grid items
```css
.items: {
grid-column: 2/3; /*当前后数值相差只有1位时可省去后面的数字*/
grid-row: 2/3;
/*占几个列/行时*/
grid-column: 1/3;
grid-row: 1/3;
/*或者*/
grid-column: 1 / span 3;
/*自动填充剩余空间*/
grid-column: 1/-1;
}
```
#### align items inside cells
```css
.container {
align-items: center;
justify-items: center;
}
```
```css
.item {
align-self: end;
}
```
### fr
- `1fr`:自动填充剩余空间
- 2:1:1:1 的四列
```css
.container {
grid-template-columns: 2fr 1fr 1fr 1fr;
}
/*shorthand*/
.container {
grid-template-columns: repeat(4, 1fr);
}
```
### implicit row
所定义的空间被用完后多出来的列