前端栈学习(二)-Html、CSS初实战
在这篇博客中,我们将以一个简单的猫咪主页项目为例,讨论几个关键的前端开发知识点,包括位置设置、图片处理、字体处理、:root变量的使用、8px设计原则,以及如何利用Flex布局进行页面设计。
项目结构
我们创建了一个名为”Catbook”的页面,HTML结构如下:
1 |
|
CSS样式文件 styles.css
包含了全局变量、组件样式以及实用类。以下是关键知识点的详细解析。
1 | @import url("https://fonts.googleapis.com/css?family=Open+Sans:300,600"); |
有一些使用了
u-
开头,我们称这类只应用一个css属性的类为效用类(utility classese)。
1. 位置设置
内容居中
为了让页面内容居中,我们在 .appContainer
中使用以下样式:
1 | .appContainer { |
max-width: 960px;
确保页面宽度不会超出960px。margin: auto;
水平居中内容。padding
为内容添加内边距,防止内容紧贴边框。
图片位置调整
为了使头像图片在父容器中居中,我们在 .avatar
中使用了:
1 | .avatar { |
margin: 0 auto;
将块级元素水平居中。
此外,通过设置 background-position
属性,使背景图片始终居中:
1 | background-position: center; |
2. 图片处理
响应式设计
头像图片使用以下样式确保在不同设备中保持良好的展示效果:
1 | .avatar { |
max-width: 100%;
防止图片超出容器宽度。padding-top: 100%;
通过设置高度与宽度相等,使图片保持正方形。
圆形裁剪
通过 border-radius
属性将图片裁剪成圆形:
1 | border-radius: 50%; |
3. 字体处理
引入自定义字体
使用 @import
从 Browse Fonts - Google Fonts 引入 “Open Sans” 字体:
1 | @import url("https://fonts.googleapis.com/css?family=Open+Sans:300,600"); |
4. 使用 :root
定义全局变量
:root
提供了一种集中管理颜色、间距等样式的方法:
1 | :root { |
- 定义颜色变量,如
--primary
用于导航栏背景。 - 定义间距变量,确保布局一致性。
使用这些变量,可以轻松更新整个页面的样式。例如:
1 | .navContainer { |
5. 遵循8px网格系统
间距与尺寸
CSS中所有的间距和尺寸都使用了 8px
的倍数:
1 | --xs: 4px; |
4px
用于微调。8px
和16px
用于组件的内外边距。
例如:
1 | .subTitle { |
我们可以在浏览器中检查元素来观察margin和padding:
我们需要注意的是,他们的值是从顶部开始,顺时针方向赋值的
6. Flex布局
好的,下面是 Flex布局中常用的属性以及它们的简要介绍,并附上相应的示例:
1. Flex容器的常用属性
1.1 display: flex
这个属性是启用 Flex 布局的关键,它使得元素成为 Flex 容器,容器中的直接子元素会自动成为 Flex 项。
1 | .container { |
1.2 flex-direction
flex-direction
控制 Flex 项在容器中的排列方向。
row
:默认值,主轴为水平方向,子项从左到右排列。row-reverse
:子项从右到左排列。column
:主轴为垂直方向,子项从上到下排列。column-reverse
:子项从下到上排列。
1 | .container { |
1.3 flex-wrap
flex-wrap
控制 Flex 项是否换行。
nowrap
:默认值,不换行,所有项会在一行内显示。wrap
:当一行容纳不下时,自动换行。wrap-reverse
:换行,但新行的位置在上方。
1 | .container { |
1.4 justify-content
justify-content
控制主轴(默认水平轴)上项的对齐方式。
flex-start
:将所有项对齐到主轴的起点(默认)。flex-end
:将所有项对齐到主轴的终点。center
:将所有项对齐到主轴的中心。space-between
:项之间分配相等的空间,首尾项紧贴容器边缘。space-around
:项之间分配相等的空间,首尾项两端有空隙。
1 | .container { |
1.5 align-items
align-items
控制交叉轴(默认垂直轴)上项的对齐方式。
flex-start
:将所有项对齐到交叉轴的起点。flex-end
:将所有项对齐到交叉轴的终点。center
:将所有项对齐到交叉轴的中心。baseline
:将所有项沿基线对齐。stretch
:默认值,让项拉伸填充交叉轴(一般用于高度)。
1 | .container { |
1.6 align-content
align-content
控制多行的对齐方式。与 align-items
不同,align-content
只在有多行时有效。
flex-start
:将所有行对齐到交叉轴的起点。flex-end
:将所有行对齐到交叉轴的终点。center
:将所有行对齐到交叉轴的中心。space-between
:在行之间分配相等的空间。space-around
:在行之间分配相等的空间。stretch
:让所有行占满容器的交叉轴。
1 | .container { |
2. Flex项的常用属性
2.1 flex-grow
flex-grow
定义了 Flex 项在容器中剩余空间的分配比例,默认值为 0
,表示不放大。
1 | .item { |
2.2 flex-shrink
flex-shrink
定义了 Flex 项在空间不足时的缩小比例,默认值为 1
,表示会缩小。
1 | .item { |
2.3 flex-basis
flex-basis
定义了 Flex 项的初始大小。可以是像素、百分比等。它会在 flex-grow
和 flex-shrink
之前应用。
1 | .item { |
2.4 flex
flex
是 flex-grow
、flex-shrink
和 flex-basis
的简写,可以同时设置这三个属性。例如,flex: 1
等价于 flex-grow: 1; flex-shrink: 1; flex-basis: 0
。
1 | .item { |
2.5 order
order
属性定义了 Flex 项的排列顺序,默认值是 0
,数值越小的项排在前面。通过 order
可以改变元素的顺序,而不影响它们在HTML中的顺序。
1 | .item { |
实现水平排列和等分宽度
通过 .u-flex
和 .subContainer
实现子元素的水平排列:
1 | .u-flex { |
flex-grow: 1;
使所有子容器按比例均分剩余空间。flex-basis: 0;
确保每个子容器初始宽度为0,从而达到等分布局。
添加间距
使用相邻兄弟选择器为子容器之间添加间距:
1 | .subContainer + .subContainer { |
+
选择器仅作用于相邻的.subContainer
,实现精确控制。
结语
通过这篇博客,我们探索了如何使用HTML和CSS构建一个简单的猫咪主页。从位置设置、图片裁剪到字体管理,以及使用 :root
和 Flex 布局实现高效、现代的设计。