CSS核心功能手册:从熟悉到精通

CSS核心功能代码

文章目录

  • CSS核心功能代码
    • @[toc]
    • 参考HTML代码
    • 尺寸操作
      • 设置元素尺寸
      • 内边距
      • 外边距
      • 设置默认布局边距
        • 用途和使用场景:
    • 背景设置
      • **背景颜色 (`background-color`)**:
      • **背景图像 (`background-image`)**:
      • **背景重复 (`background-repeat`)**:
      • **背景位置 (`background-position`)**:
      • **背景附着 (`background-attachment`)**:
      • **背景大小 (`background-size`)**:
      • **背景简写属性 (`background`)**:
      • **背景图像的多个背景**:
      • **背景添加阴影效果:**
      • **多重阴影:**
    • 文本处理
      • 1. `text-align` - 文本对齐方式
        • 基本语法:
        • 示例:
      • 2. `text-decoration` - 文本装饰
        • **示例:**
      • 3. `text-transform` - 文本转换
        • **基本语法:**
        • **示例:**
      • 4. `letter-spacing` - 字母间距
        • **基本语法:**
        • **示例:**
      • 5. `word-spacing` - 单词间距
        • **基本语法:**
        • **示例:**
      • 6. `line-height` - 行高
        • **基本语法:**
        • **示例:**
      • 7. `text-indent` - 文本缩进
        • 基本语法:
        • 示例:
      • 8. `font` - 字体设置
        • 基本语法:
        • 示例:
      • 9. `text-shadow` - 文本阴影
        • 基本语法:
        • 示例:
      • 10. `writing-mode` - 写作模式
        • 基本语法:
        • 示例:
      • 11. `text-orientation` - 文本方向
        • 基本语法:
        • 示例:
    • 元素定位
      • 1. `position` - 定位属性
        • 基本语法:
        • 示例:
      • 2. `top`, `right`, `bottom`, `left` - 偏移属性
        • 基本语法:
        • 示例:
  • CSS核心布局技术
    • 布局的引入
    • Flexbox (弹性布局)
      • Flex弹性布局
        • 基本语法:
        • 容器属性:
        • 项目属性:
        • 示例:
      • 2. align-items
        • 基本语法:
        • 可选值:
        • 示例:
      • 3. justify-content
        • 基本语法:
        • 可选值:
        • 示例:
      • 4. flex
        • 基本语法:
        • 可选值:
        • 示例:
      • flex-direction
      • flex-wrap
      • align-content
      • flex-flow
      • align-self
      • flex-basis
      • flex-shrink
      • flex-grow
      • order
    • Grid Layout (网格布局)
      • Grid网格布局
        • 基本语法:
        • 容器属性:
        • 项目属性:
        • 示例:
        • 1. **display**
          • 示例:
        • 2. **grid-template-columns / grid-template-rows**
          • 示例:
        • 3. **grid-column / grid-row**
          • 示例:
        • 4. **grid-gap**
          • 示例:
        • 5. **justify-items / align-items**
          • 示例:
        • 6. **grid-auto-columns / grid-auto-rows**
          • 示例:
    • 过渡与变化
      • `translate`, `translateX`, `translateY`
      • `rotate`
      • `transform-origin`
      • `scale`
      • `skew`
      • `transform-style: preserve-3d`
      • `perspective`
      • 3D变换: `translate3d`, `rotate3d`
    • 动画 (Animation)
      • keyframes
        • 基本语法:
        • 示例:
        • 多个阶段的动画:
      • `@-webkit-keyframes`
      • `animation-name`
      • `animation-duration`
      • `animation-timing-function`
      • `animation-delay`
      • `animation-iteration-count`
      • `animation-direction`
  • 综合项目: 立体旋转相册
  • 综合项目:2栏布局
  • 综合项目:三栏布局
  • 综合项目:CSS动画版轮播图

参考HTML代码

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>example</title><link rel="stylesheet" href="./index.css"><script src="./index.js"></script>
</head>
<body><div><h1>1. CSS</h1><p class="box">CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。</p><span>测试span</span></div><div><h1>2. CSS</h1><p>CCSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。</p></div><div><h1>3. CSS</h1><p>CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。</p></div><div><h1>4. CSS</h1><p>CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。CSS(Cascading Style Sheets,层叠样式表)是用于控制HTML元素在网页上如何显示的一种标记语言。它允许开发者为网页创建样式,包括布局、颜色、字体和响应式设计等。通过CSS,可以将设计和内容分离,使得网页更易于维护和访问。</p></div>
</body>
</html>

尺寸操作

设置元素尺寸

通常用在块级元素内widthheight属性是用来设置元素的宽度和高度的。这些属性定义了元素的尺寸,即宽度(水平方向)和高度(垂直方向)的大小。

默认情况下,浏览器会让元素自动适应浏览器的尺寸和屏幕尺寸,但是你可以使用这两个参数去设置它的具体数值。

  1. width:

    • width属性用于设置元素的宽度。在你的代码中,它被设置为500px,意味着该元素的宽度是500像素。
    • 示例:
    .box {width: 500px; /* 设置元素的宽度为500像素 */
    }
    
  2. height:

    • height属性用于设置元素的高度。在你的代码中,它被设置为280px,意味着该元素的高度是280像素。
    • 示例:
    .box {height: 280px; /* 设置元素的高度为280像素 */
    }
    

这些属性允许你明确地控制元素的大小,以适应你的设计需求。在CSS中,你可以使用不同的单位来指定宽度和高度,例如像素(px)、百分比(%)、em单位、rem单位等。像素是固定的尺寸单位,而百分比、em和rem则是相对的尺寸单位,它们的大小是相对于其他元素或屏幕尺寸而定的。

  1. border

    • 此属性设置元素的边框样式。
    • 示例
    .box {border: 3px dotted grey;
    }
    
    • 3px是边框宽度。
    • dotted表示边框是点状的。
    • grey是边框颜色。
  2. border-radius:

    • 此属性设置元素边框的圆角半径,使得边框拐角处呈现为圆角,而非默认的直角。值会是圆角的半径。

    • 示例

    .box {border-radius: 8px;
    }
    

内边距

内边距(Padding): 内边距是**元素边框与元素内容之间的空间**。它是元素内部的空白区域,用于创建元素内容和元素边框之间的缓冲空间。在CSS中,内边距通过padding属性来设置。

  • 属性
    • padding-top: 设置元素的上内边距。
    • padding-right: 设置元素的右内边距。
    • padding-bottom: 设置元素的下内边距。
    • padding-left: 设置元素的左内边距。
    • padding: 同时设置元素的上、右、下、左内边距。
  • 示例代码
/* 单独设置内边距 */
.element {padding-top: 10px;padding-right: 20px;padding-bottom: 10px;padding-left: 20px;
}/* 使用一个值来设置所有的内边距 */
.element {padding: 10px;
}/* 使用两个值来设置内边距:第一个值为上下内边距,第二个值为左右内边距 */
.element {padding: 10px 20px;
}/* 使用四个值来分别设置上、右、下、左内边距 */
.element {padding: 10px 20px 30px 40px;
}

外边距

外边距(Margin): 外边距是元素边框外侧到相邻元素边框的空间。它是元素周围的空白区域,用于在元素之间创建空间,以保持页面的清晰和组织良好的布局。在CSS中,外边距通过margin属性来设置。

  • 属性

    • margin-top: 设置元素的上外边距。
    • margin-right: 设置元素的右外边距。值设置为auto的时候可以实现元素垂直居中显示。
    • margin-bottom: 设置元素的下外边距。
    • margin-left: 设置元素的左外边距。值设置为auto的时候可以实现元素垂直居中显示。
    • margin: 同时设置元素的上、右、下、左外边距。设置为0 auto可以实现垂直居中显示
  • 示例代码

    /* 单独设置外边距 */
    .element {margin-top: 10px;margin-right: 20px;margin-bottom: 10px;margin-left: 20px;
    }/* 使用一个值来设置所有的外边距 */
    .element {margin: 10px;
    }/* 使用两个值来设置外边距:第一个值为上下外边距,第二个值为左右外边距 */
    .element {margin: 10px 20px;
    }/* 使用四个值来分别设置上、右、下、左外边距 */
    .element {margin: 10px 20px 30px 40px;
    }
    

特殊处理:%百分比布局

  1. width: 100%的意义:
    当你设置一个元素的width属性为100%时,你是在告诉浏览器将该元素的宽度设置为其父元素的宽度。这意味着,元素会尽可能地扩展以填充其父元素的水平空间。

    .element {width: 100%;
    }
    
  2. 与父容器的宽度计算:
    在默认情况下,一个元素的宽度是由其内容区的宽度、内边距、边框和外边距组成的。当你设置width: 100%时,你只是设置了元素内容区的宽度等于父元素的宽度,而不是整个元素(包括内边距和边框)的宽度。

  3. 可能出现溢出屏幕的情况:
    如果元素具有内边距或边框,那么即使设置了width: 100%,元素的总宽度也会超过其父元素的宽度,可能导致元素溢出其父元素或溢出屏幕。

    .element {width: 100%;padding: 10px;border: 5px solid black;
    }
    
  4. 解决方法 (box-sizing: border-box;):
    box-sizing属性允许你更改浏览器计算元素宽度和高度的方式。通过设置box-sizing: border-box;,你可以告诉浏览器包括内边距和边框在内,但不包括外边距在内,来计算元素的宽度和高度。

    .element {width: 100%;padding: 10px;border: 5px solid black;box-sizing: border-box;
    }
    

    这样,即使有内边距和边框,元素的总宽度也会与其父元素的宽度相匹配,防止溢出。

  5. 为什么这样能解决:
    box-sizing: border-box;是因为它改变了浏览器计算元素宽度的方式。在这种模式下,元素的widthheight属性包括了内边距和边框,而不仅仅是内容区域。这意味着,即使元素有内边距和边框,其宽度也会保持为100%,与父元素的宽度相匹配,从而防止了溢出的问题。

设置默认布局边距

*{ padding: 0; margin: 0;} 是一种CSS重置(CSS Reset)的简单形式。让我们逐一解释:

  1. 通配符 *:
    通配符 * 是一个全局选择器,它匹配页面上的所有元素。

  2. padding: 0;margin: 0;:
    这两条样式规则分别将所有元素的内边距(padding)和外边距(margin)设置为0。

* {padding: 0;margin: 0;
}
用途和使用场景:
  1. 消除浏览器默认样式:
    不同浏览器有不同的默认样式。例如,某些浏览器可能会为<body><h1><p>等元素提供默认的marginpadding值。通过使用* { padding: 0; margin: 0; },你可以重置所有元素的marginpadding值,确保在不同浏览器中的一致性。

  2. 创建清晰的布局:
    在开始创建网站布局之前重置marginpadding值是一个好习惯,我们可以放在css布局里的首行。这样做可以确保你的布局不会受到未预期的空间影响,使布局过程更为清晰和可预测。

  3. 减少样式冲突:
    在大型项目或使用第三方库时,重置marginpadding值可以帮助减少样式冲突,使样式更容易管理和维护。

背景设置

在CSS中,背景属性用于为元素设置背景内容。你可以设置颜色、图像、重复、位置和滚动等属性来配置背景。以下是背景属性及其用法的概述:

背景颜色 (background-color):

设置元素的背景颜色。

.element {background-color: #ff0000; /* 红色 */
}

背景图像 (background-image):

设置元素的背景图像。

.element {background-image: url('background.jpg');
}

背景重复 (background-repeat):

设置背景图像是否以及如何重复。

.element {background-repeat: no-repeat; /* 不重复 */
}

背景位置 (background-position):

设置背景图像的位置。

.element {background-position: center center; /* 水平垂直居中 */
}

背景附着 (background-attachment):

设置背景图像是固定的,还是随着页面的其余部分滚动。

.element {background-attachment: fixed;
}

背景大小 (background-size):

设置背景图像的大小。

.element {background-size: cover; /* 覆盖整个元素 */
}

背景简写属性 (background):

你可以使用 background 属性将所有这些值组合到一个声明中。

.element {background: #ff0000 url('background.jpg') no-repeat center center fixed;
}

背景图像的多个背景:

你还可以为元素设置多个背景图像,每个背景图像之间用逗号分隔。

.element {background-image: url('overlay.png'), url('background.jpg');
}

背景添加阴影效果:

box-shadow 属性是用于向框(即元素的边框外边缘)添加阴影效果。这个属性可以创建出立体效果,或者强调某个元素。box-shadow 属性可以接受多个值,用于控制阴影的水平偏移、垂直偏移、模糊半径、扩展半径和颜色。这里是 box-shadow 属性的基本结构和用法:

基本语法:

box-shadow: h-offset v-offset blur spread color;
  • h-offset (水平偏移): 水平方向上阴影的偏移量。正值向右偏移,负值向左偏移。
  • v-offset (垂直偏移): 垂直方向上阴影的偏移量。正值向下偏移,负值向上偏移。
  • blur (模糊半径): 阴影的模糊度。值越大,阴影越模糊。值为0时,阴影为硬边。
  • spread (扩展半径): 阴影的扩展大小。正值会使阴影扩大,负值会使阴影缩小。
  • color (颜色): 阴影的颜色。

示例:

.element {box-shadow: 10px 10px 5px 0 rgba(0, 0, 0, 0.5);
}

在这个示例中,元素具有一个向右和向下偏移10px的阴影,模糊半径为5px,没有扩展半径(因为它是0),并且阴影的颜色是半透明的黑色。

多重阴影:

你还可以应用多重阴影,只需用逗号分隔每个阴影值即可:

.element {box-shadow: 3px 3px 5px 0 rgba(0, 0, 0, 0.3), -3px -3px 5px 0 rgba(255, 255, 255, 0.3);
}

在这个示例中,元素具有两个阴影:一个向右和向下偏移,另一个向左和向上偏移。

文本处理

在处理文本时,CSS提供了多种属性来控制文本的显示和格式。以下是一些常用的文本处理属性及其用法和示例。

1. text-align - 文本对齐方式

此属性用于设置文本的水平对齐方式。

基本语法:
text-align: left | right | center | justify;
  • left: 文本左对齐(默认值)。
  • right: 文本右对齐。
  • center: 文本居中对齐。
  • justify: 文本两端对齐。
示例:
p {text-align: center;
}

2. text-decoration - 文本装饰

此属性用于设置文本的装饰,如下划线、横线等。

基本语法:

text-decoration: none | underline | overline | line-through | blink;
  • none: 无装饰(默认值)。
  • underline: 下划线。
  • overline: 上划线。
  • line-through: 删除线。
  • blink: 闪烁(不推荐使用,因为它可能导致可用性和可访问性问题)。
示例:
p {text-decoration: underline;
}

3. text-transform - 文本转换

此属性用于控制文本的大小写。

基本语法:
text-transform: none | uppercase | lowercase | capitalize;
  • none: 无转换(默认值)。
  • uppercase: 全部大写。
  • lowercase: 全部小写。
  • capitalize: 每个单词的首字母大写。
示例:
p {text-transform: uppercase;
}

4. letter-spacing - 字母间距

此属性用于设置字符之间的间距。

基本语法:
letter-spacing: normal | length-value;
  • normal: 正常间距(默认值)。
  • length-value: 自定义间距值(例如 2px0.1em等)。
示例:
p {letter-spacing: 2px;
}

5. word-spacing - 单词间距

此属性用于设置单词之间的间距。

基本语法:
word-spacing: normal | length-value;
  • normal: 正常间距(默认值)。
  • length-value: 自定义间距值(例如 4px0.2em等)。
示例:
p {word-spacing: 4px;
}

6. line-height - 行高

此属性用于设置行之间的间距。

基本语法:
line-height: normal | number | length-value | percentage;
  • normal: 正常行高(默认值)。
  • number: 相对于字体大小的倍数(例如 1.5)。
  • length-value: 固定行高值(例如 20px1.5em等)。
  • percentage: 相对于字体大小的百分比(例如 150%)。
示例:
p {line-height: 1.5;
}

7. text-indent - 文本缩进

text-indent 属性用于设置文本的首行缩进。

基本语法:
text-indent: length-value | percentage;
  • length-value: 固定缩进值(例如 20px2em等)。
  • percentage: 相对于包含块宽度的百分比值。
示例:
p {text-indent: 2em;
}

在这个示例中,p 元素的首行将缩进相当于当前字体大小的2倍。


8. font - 字体设置

font 属性是一个复合属性,它允许您在一个声明中设置多个字体属性。

基本语法:
font: font-style font-variant font-weight font-size/line-height font-family;
  • font-style: 字体样式 (normal, italic, oblique)。
  • font-variant: 字体变体 (normal, small-caps)。
  • font-weight: 字体粗细 (normal, bold, bolder, lighter, 100 to 900)。
  • font-size: 字体大小 (medium, xx-small, x-small, small, large, x-large, xx-large, 或者使用长度值例如 12px, 1.5em 等)。
  • line-height: 行高(同上面的 line-height 属性)。
  • font-family: 字体系列(例如 "Helvetica, Arial, sans-serif")。
示例:
p {font: italic small-caps bold 1em/1.5 Arial, sans-serif;
}

在这个示例中,p 元素将有斜体、小型大写字母、粗体、1em字体大小、1.5的行高,以及Arial或sans-serif字体。


9. text-shadow - 文本阴影

text-shadow 属性用于给文本添加阴影效果。

基本语法:
text-shadow: h-offset v-offset blur-radius color;
  • h-offset (水平偏移): 水平方向上阴影的偏移量。正值向右偏移,负值向左偏移。
  • v-offset (垂直偏移): 垂直方向上阴影的偏移量。正值向下偏移,负值向上偏移。
  • blur-radius (模糊半径): 阴影的模糊度。值越大,阴影越模糊。值为0时,阴影为硬边。
  • color (颜色): 阴影的颜色。
示例:
p {text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.3);
}

在这个示例中,p 元素的文本将有一个向右和向下偏移2px,模糊半径为2px,颜色为半透明的黑色的阴影。

10. writing-mode - 写作模式

writing-mode 属性用于定义文本方向和布局方向。

基本语法:
writing-mode: horizontal-tb | vertical-rl | vertical-lr;
  • horizontal-tb (水平从上到下): 文字水平显示,并从上到下排列。
  • vertical-rl (垂直从右到左): 文字垂直显示,并从右到左排列。
  • vertical-lr (垂直从左到右): 文字垂直显示,并从左到右排列。
示例:
p {writing-mode: vertical-rl;
}

在这个示例中,p 元素的文本将垂直显示,并从右向左排列。


11. text-orientation - 文本方向

text-orientation 属性用于设置文字在垂直模式下的方向。

基本语法:
text-orientation: mixed | upright | sideways;
  • mixed: 文字的方向根据单个字符的默认方向来确定。
  • upright: 所有字符都保持直立,不旋转。
  • sideways: 所有字符都侧面显示,旋转90度。
示例:
p {writing-mode: vertical-rl;text-orientation: upright;
}

在这个示例中,p 元素的文本将垂直显示,并且所有字符都保持直立,不旋转。

这两个属性通常一起使用,以实现特定的文本布局和方向效果,特别是对于需要垂直文本布局的语言和设计。

元素定位

1. position - 定位属性

position 属性用于设置元素的定位类型,它决定了元素如何在页面上定位。

基本语法:
position: static | relative | absolute | fixed | sticky;
  • static (静态定位): 默认值,元素按照正常的文档流定位。
  • relative (相对定位): 元素相对于其正常位置进行定位。可以使得子容器按照父容器的位置进行定位,也就是让子容器的定位始终以父容器的尺寸进行活动。
  • absolute (绝对定位): 元素相对于最近的已定位祖先元素进行定位,如果没有已定位的祖先元素,则相对于文档的初始包含块进行定位。
  • fixed (固定定位): 元素相对于浏览器窗口进行定位,即使页面滚动,它也始终保持在相同的位置。可以做返回顶部的方式快捷方式实现。
  • sticky (粘性定位): 是相对定位和固定定位的混合类型,元素在跨越特定点时会切换为固定定位。
示例:
.element {position: absolute;top: 50px;left: 100px;
}

2. top, right, bottom, left - 偏移属性

这些属性用于设置定位元素的偏移量,它们的效果会受到 position 属性的影响。

基本语法:
top: auto | <length> | <percentage>;
right: auto | <length> | <percentage>;
bottom: auto | <length> | <percentage>;
left: auto | <length> | <percentage>;
  • auto: 自动计算偏移量。
  • <length>: 指定偏移量,例如 50px
  • <percentage>: 相对于包含块的百分比偏移。
示例:
.element {position: absolute;top: 10%;left: 20%;
}

在这个示例中,.element 元素被绝对定位,其顶部偏移了包含块高度的 10%,左侧偏移了包含块宽度的 20%。

这些属性允许你精确控制元素的位置,通常与 position 属性一起使用来实现各种布局效果。

CSS核心布局技术

布局的引入

  • 把页面分成一块一块,按左中右、上中下等排列

布局分类

两种

  • 固定宽度布局,一般宽度为960/1000/1024 px
  • 不固定宽度布局,主要靠文档流的原理来布局

文档流本来就是自适应的(响应式的),不需要加额外的样式

第三种布局

  • 响应式布局(旧内容新名字)
  • 意思就是PC上固定宽度,手机上不固定宽度
  • 也就是一种混合布局

布局的两种思路

  • 从大到小

    • 先定下大局
    • 然后完善每个部分的小布局
  • 从小到大

    • 先完成小布局
    • 然后组合成大布局

两种均可

  • 新人推荐用第二种,因为小的简单
  • 老手一般用第一种,因为有大局观

布局需要用到什么属性?

  • DIV+CSS布局(过时说法)
  • CSS布局 √{main,header,fotter等等}
  • 一图流

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Flexbox (弹性布局)

Flexbox 是 CSS3 引入的一种新的布局模式,旨在提供一个更加高效的方式来对容器中的项进行对齐、方向和顺序的控制。

Flex弹性布局

基本语法:
display: flex | inline-flex;
容器属性:
  • flex-direction (方向): 定义主轴的方向(即项目的排列方向)。可选值有 row (水平方向), row-reverse (水平反向), column (垂直方向), column-reverse (垂直反向)。
  • flex-wrap (换行): 定义如果一条轴线排不下,如何换行。可选值有 nowrap (不换行), wrap (换行), wrap-reverse (反向换行)。
  • flex-flow: 是 flex-directionflex-wrap 的简写形式,默认值为 row nowrap
  • justify-content (主轴对齐): 定义项目在主轴上的对齐方式。可选值有 flex-start (头部对齐), flex-end (尾部对齐), center (居中对齐), space-between (两端对齐,项目之间的间隔相等), space-around (每个项目两侧的间隔相等)。
  • align-items (交叉轴对齐): 定义项目在交叉轴上如何对齐。可选值有 flex-start, flex-end, center, baseline, stretch
  • align-content (多行对齐): 定义多轴线的对齐方式。该属性对单行 flex 容器无效。
项目属性:
  • order: 定义项目的排列顺序,数值越小,排列越靠前,默认为0。
  • flex-grow: 定义项目的放大比例,默认为0。
  • flex-shrink: 定义项目的缩小比例,默认为1。
  • flex-basis: 定义项目的原始大小。
  • flex: 是 flex-grow, flex-shrinkflex-basis 的简写,默认值为 0 1 auto
  • align-self: 允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items 属性。
示例:
.container {display: flex;flex-direction: row;justify-content: space-between;
}.item {flex-grow: 1;
}

2. align-items

align-items 属性是用于在 Flexbox(弹性布局)或 Grid(网格布局)容器中对齐交叉轴上的项目。

基本语法:
align-items: stretch | flex-start | flex-end | center | baseline | first baseline | last baseline | start | end | self-start | self-end | safe center | unsafe center;
可选值:
  • stretch (默认值): 项目被拉伸以适应容器。
  • flex-start / start: 项目位于容器的开头。
  • flex-end / end: 项目位于容器的末尾。
  • center: 项目位于容器的中心。
  • baseline: 项目的基线对齐。
  • first baseline: 对齐到容器的第一个项目的基线。
  • last baseline: 对齐到容器的最后一个项目的基线。
  • self-start: 对齐到项目自己的开始位置。
  • self-end: 对齐到项目自己的结束位置。
  • safe center: 当对齐项目可能溢出容器时,将它们安全地对齐在容器的中心。
  • unsafe center: 忽略溢出,强制将项目对齐在容器的中心。
示例:
.container {display: flex;align-items: center;
}

3. justify-content

justify-content 属性用于在 Flexbox(弹性布局)或 Grid(网格布局)容器中对齐主轴上的项目。

基本语法:
justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly | start | end | left | right | safe center | unsafe center;
可选值:
  • flex-start / start / left: 项目位于容器的开头。
  • flex-end / end / right: 项目位于容器的末尾。
  • center: 项目位于容器的中心。
  • space-between: 项目均匀分布在容器里,第一个项目位于容器的开始位置,最后一个项目位于容器的结束位置。
  • space-around: 项目均匀分布在容器里,项目之间的间隔是相同的。
  • space-evenly: 项目均匀分布在容器里,项目之间和容器边缘的间隔是相同的。
示例:
.container {display: flex;justify-content: space-between;
}

4. flex

flex 属性是 flex-grow, flex-shrink, 和 flex-basis 的简写属性。它是用于在 Flexbox(弹性布局)中设置弹性项目的放大、缩小和基础大小。

基本语法:
flex: flex-grow flex-shrink flex-basis | auto | initial | none;
可选值:
  • flex-grow: 定义项目的放大比例。
  • flex-shrink: 定义项目的缩小比例。
  • flex-basis: 定义项目的原始大小。
  • auto: 根据容器和项目的大小自动计算 flex-grow, flex-shrink, 和 flex-basis
  • initial: 设置 flex 的初始值为 0 1 auto
  • none: 设置 flex 的值为 0 0 auto
示例:
.item {flex: 1 0 auto;
}

flex-direction

该属性用于定义主轴的方向,即项目的排列方向。

  • row (default): 从左到右排列。
  • row-reverse: 从右到左排列。
  • column: 从上到下排列。
  • column-reverse: 从下到上排列。
<div style="display: flex; flex-direction: row;"><div>Item 1</div><div>Item 2</div><div>Item 3</div>
</div>

flex-wrap

该属性定义了项目在主轴上如何换行。

  • nowrap (default): 不换行。
  • wrap: 换行,第一行在上方。
  • wrap-reverse: 换行,第一行在下方。
<div style="display: flex; flex-wrap: wrap;"><div>Item 1</div><div>Item 2</div><div>Item 3</div>
</div>

align-content

该属性定义了多轴线的对齐方式。

  • flex-start: 各行向起点对齐。
  • flex-end: 各行向终点对齐。
  • center: 各行居中对齐。
  • space-between: 与交叉轴两端对齐,轴线之间的间隔平均分布。
  • space-around: 轴线之间的间隔平均分布。
<div style="display: flex; flex-wrap: wrap; align-content: flex-start;"><div>Item 1</div><div>Item 2</div><div>Item 3</div>
</div>

flex-flow

flex-flowflex-directionflex-wrap的简写形式,默认值为row nowrap

<div style="display: flex; flex-flow: row wrap;"><div>Item 1</div><div>Item 2</div><div>Item 3</div>
</div>

align-self

该属性允许默认对齐方式被覆盖,用于单个项目。

  • auto: 继承容器的align-items属性,如果没有父容器则为stretch
  • flex-start: 交叉轴的起点对齐。
  • flex-end: 交叉轴的终点对齐。
  • center: 交叉轴的中点对齐。
  • baseline: 项目的第一行文字的基线对齐。
  • stretch: 如果项目未设置高度或设为auto,将占满整个容器的高度。
<div style="display: flex;"><div style="align-self: flex-start;">Item 1</div><div>Item 2</div><div>Item 3</div>
</div>

flex-basis

该属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。它的默认值为auto,即项目的本来大小。

<div style="display: flex;"><div style="flex-basis: 200px;">Item 1</div><div>Item 2</div><div>Item 3</div>
</div>

flex-shrink

该属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。

<div style="display: flex;"><div style="flex-shrink: 2;">Item 1</div><div>Item 2</div><div>Item 3</div>
</div>

flex-grow

该属性定义了项目的放大比例,默认为0,即如果存在剩余空间,也不放大。

<div style="display: flex;"><div style="flex-grow: 1;">Item 1</div><div>Item 2</div><div>Item 3</div>
</div>

order

该属性定义了项目的排列顺序。数值越小,排列越靠前,默认为0

<div style="display: flex;"><div style="order: 2;">Item 1</div><div style="order: 1;">Item 2</div><div style="order: 3;">Item 3</div>
</div>

Grid Layout (网格布局)

CSS Grid Layout 是一个基于网格的布局系统,它可以处理两维布局,行和列。

Grid网格布局

基本语法:
display: grid | inline-grid;
容器属性:
  • grid-template-columns / grid-template-rows: 定义列 / 行的大小。
  • grid-template-areas: 定义区域。
  • grid-template: 是 grid-template-rows, grid-template-columnsgrid-template-areas 的简写。
  • grid-column-gap / grid-row-gap: 定义列 / 行的间隔。
  • grid-gap: 是 grid-row-gapgrid-column-gap 的简写。
  • justify-items / align-items: 定义项目在单元格中的位置。
  • justify-content / align-content: 定义整个网格在容器中的位置。
项目属性:
  • grid-column-start / grid-column-end / grid-row-start / grid-row-end: 定义项目的位置和区域。
  • grid-column / grid-row: 是 grid-column-start / grid-column-end, grid-row-start / grid-row-end 的简写形式。
  • grid-area: 定义项目所在的区域或位置。
示例:
.container {display: grid;grid-template-columns: repeat(3, 1fr);grid-gap: 10px;
}.item {grid-column: span 2;
}p
1. display

display 属性用于设置元素的显示模式。在 Grid 布局中,它可以设置为 gridinline-grid

  • grid: 此值将元素设置为块级网格容器。
  • inline-grid: 此值将元素设置为内联网格容器。
示例:
.container {display: grid;
}

在此示例中,.container 元素被设置为块级网格容器。

2. grid-template-columns / grid-template-rows

这两个属性用于定义网格的列和行的大小。

  • <track-size>: 可以是长度值、百分比、分数值或者 auto
  • <line-name>: 自定义线名,可以用于更好地定位网格项。
示例:
.container {display: grid;  /* 设置容器为网格布局 */grid-template-columns: repeat(3, 1fr);  /* 设置三列,每列宽度为容器宽度的三分之一 */grid-template-rows: 100px 200px;  /* 设置两行,第一行高度为100px,第二行高度为200px *//* grid-template-columns: 200px 300px 200px; */  /* 设置三列,宽度分别为200px, 300px, 200px *//* grid-template-columns: 1fr 1fr 1fr*/  /* 设置三列,每列宽度为容器宽度的三分之一 *//* grid-template-columns: repeat(3, 1fr); */  /* 设置三列,每列宽度为容器宽度的三分之一,与上面的代码相同 *//* grid-template-columns: repeat(auto-fill, 200px);*/  /* 自动填充尽可能多的200px宽的列 */grid-template-columns: 300px auto 200px;  /* 设置三列,宽度分别为300px, 自动, 200px,中间的列宽度自适应 */height: 600px;  /* 设置容器高度为600px */grid-template-rows: 1fr 2fr;  /* 设置两行,第二行的高度是第一行的两倍 */
}.container_item {padding: 10px;  /* 设置内边距为10px */border: 1px solid #ccc;  /* 设置1px宽的实线边框,颜色为#ccc */border-radius: 5px;  /* 设置边框圆角为5px */background-color: #f9f9f9;  /* 设置背景颜色为#f9f9f9 */overflow: hidden;  /* 设置溢出内容为隐藏 */
}

在此示例中:

  • .container选择器下的代码是用于设置网格容器的布局和尺寸。
  • .container_item选择器下的代码是用于设置网格项的样式,包括内边距、边框、边框圆角、背景颜色和溢出处理。
3. grid-column / grid-row

这两个属性用于指定网格项的位置。

  • <start-line> / <end-line>: 指定网格项的起始和结束位置。
示例:
.item {grid-column: 1 / 3;grid-row: 2 / 4;
}

在此示例中,.item 元素的列位置从第1列线开始到第3列线结束,行位置从第2行线开始到第4行线结束。

4. grid-gap

grid-gap 属性是 row-gapcolumn-gap 的简写,它用于设置行和列之间的间隙。

  • <grid-row-gap>: 行间隙的大小。
  • <grid-column-gap>: 列间隙的大小。
示例:
.container {grid-gap: 10px 15px;
}

在此示例中,设置了10px的行间隙和15px的列间隙。

5. justify-items / align-items

这两个属性用于控制网格容器中的项如何对齐。

  • start: 项对齐到网格的起始边。
  • end: 项对齐到网格的结束边。
  • center: 项在网格中居中对齐。
  • stretch: 项拉伸以填充网格区域。
示例:
.container {justify-items: center;align-items: stretch;
}

在此示例中,所有项在其网格区域中水平居中,垂直方向上拉伸以填充网格区域。

6. grid-auto-columns / grid-auto-rows

当你有超出你明确定义的网格的项时,这些属性为自动创建的网格轨道设置大小。

  • <track-size>: 轨道的大小,可以是长度值、百分比、分数值或者 auto
示例:
.container {grid-auto-columns: 100px;grid-auto-rows: 100px;
}

在此示例中,任何超出明确定义网格的项都会在一个100px宽的列和100px高的行中放置。

Grid 布局是非常强大的,它可以用于创建复杂的布局,而不需要额外的 HTML 元素或复杂的 CSS。它特别适用于构建具有复杂结构的应用程序界面或网页。

过渡与变化

过渡是指元素从一个状态逐渐改变为另一个状态的效果。在CSS中,我们通过transition属性来实现过渡效果。

变换是指通过CSS改变元素的形状和位置。transform属性提供了多种方法来控制元素的变换,包括移动、旋转、缩放和倾斜等。

translate, translateX, translateY

  • translate(x, y): 沿x和y轴移动元素。
  • translateX(x): 沿x轴移动元素。
  • translateY(y): 沿y轴移动元素。
<div style="transform: translate(50px, 50px);">Translate me
</div>

rotate

  • rotate(angle): 旋转元素。参数是旋转的角度,可以是deg, rad, grad 或turn。
<div style="transform: rotate(45deg);">Rotate me
</div>

transform-origin

  • transform-origin: 改变元素的变换原点。
<div style="transform: rotate(45deg); transform-origin: 20% 40%;">Change my origin
</div>

scale

  • scale(x, y): 缩放元素的大小。
<div style="transform: scale(1.5, 1.5);">Scale me
</div>

skew

  • skew(x-angle, y-angle): 倾斜元素。
<div style="transform: skew(30deg, 20deg);">Skew me
</div>

transform-style: preserve-3d

  • transform-style: 设置嵌套元素是位于3D空间还是平面。
  • preserve-3d: 表示嵌套元素位于3D空间。
<div style="transform-style: preserve-3d;">3D space
</div>

perspective

  • perspective: 定义3D元素距视点的距离。
<div style="perspective: 500px;">3D perspective
</div>

3D变换: translate3d, rotate3d

  • translate3d(x, y, z): 沿x, y和z轴移动元素。
  • rotate3d(x, y, z, angle): 围绕一个3D向量旋转元素。
<div style="transform: translate3d(50px, 50px, 50px);">Translate me in 3D
</div>
<div style="transform: rotate3d(1, 1, 1, 45deg);">Rotate me in 3D
</div>

这些属性和方法可以单独使用,也可以组合使用,创建丰富多彩的动画和效果。在3D变换中,preserve-3dperspective属性是非常重要的,它们控制了3D空间的表现和视觉效果。

动画 (Animation)

CSS动画是使元素从一种样式逐渐变为另一种样式的效果。

keyframes

@keyframes 是 CSS 动画的基础,允许你创建动画序列,定义动画过程中的每个阶段。通过 @keyframes, 你可以在不同的时间点指定元素的样式。这些时间点以百分比表示,0% 代表动画开始,100% 代表动画结束,而中间的百分比表示动画过程中的各个阶段。

基本语法:
@keyframes animationName {0% {/* 动画开始时的样式 */}50% {/* 动画中间时的样式 */}100% {/* 动画结束时的样式 */}
}
  • animationName: 是你为此动画定义的名称,它在 animation 属性中使用。
  • 百分比(0%, 50%, 100% 等):代表动画的各个阶段,你可以在每个阶段定义元素的不同样式。
示例:

假设你想创建一个简单的动画,使元素在 2 秒内从左移动到右。你可以如下定义一个 @keyframes 动画:

@keyframes moveRight {0% {left: 0;}100% {left: 200px;}
}/* 应用动画到元素 */
.element {position: relative;animation: moveRight 2s forwards;
}

HTML代码:

<div class="element">我是一个会移动的元素</div>

在这个示例中:

  • 首先,定义了一个名为 moveRight@keyframes 动画,该动画在 0%(开始)时具有 left 值为 0,在 100%(结束)时具有 left 值为 200px
  • 然后,在 .element 类中使用 animation 属性应用了 moveRight 动画,设置动画持续时间为 2s,并使用 forwards 保留动画结束时的样式。
多个阶段的动画:

你可以在 @keyframes 中定义多个阶段,以创建更复杂的动画。例如,如果你想让元素在动画过程中先变大,然后变小,你可以如下定义动画:

@keyframes growShrink {0% {transform: scale(1);}50% {transform: scale(1.5);}100% {transform: scale(1);}
}/* 应用动画到元素 */
.element {animation: growShrink 2s infinite;
}

HTML代码:

<div class="element">我是一个会变大变小的元素</div>

在这个示例中:

  • @keyframes growShrink 动画在 0% 和 100% 时保持原始大小(scale(1)),在 50% 时变大到 1.5 倍(scale(1.5))。
  • .element 类中的 animation 属性应用了 growShrink 动画,设置动画持续时间为 2s,并使用 infinite 使动画无限次循环。

@-webkit-keyframes

@-webkit-keyframes 是一个专为WebKit浏览器引擎(如Safari和旧版的Chrome)准备的前缀版本的 @keyframes 规则。它的语法和用法与 @keyframes 完全相同,但是加了 -webkit- 前缀以确保兼容性。

在早期,当 CSS 动画刚刚推出时,不同的浏览器需要不同的前缀来支持 CSS 动画。为了确保动画能在所有浏览器上运行,你需要为 @keyframes 规则提供多个版本。

下面是一个使用 @-webkit-keyframes 的示例:

@-webkit-keyframes myAnimation {0% { transform: translateX(0); }50% { transform: translateX(100px); }100% { transform: translateX(0); }
}@keyframes myAnimation {0% { transform: translateX(0); }50% { transform: translateX(100px); }100% { transform: translateX(0); }
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WebKit Animation Example</title>
<style>@-webkit-keyframes myAnimation {0% { transform: translateX(0); }50% { transform: translateX(100px); }100% { transform: translateX(0); }}@keyframes myAnimation {0% { transform: translateX(0); }50% { transform: translateX(100px); }100% { transform: translateX(0); }}.animate {width: 100px;height: 100px;background-color: blue;animation-name: myAnimation;animation-duration: 3s;animation-iteration-count: infinite;}
</style>
</head>
<body><div class="animate">Animate me
</div></body>
</html>

在上述示例中,我们为 @keyframes 规则提供了两个版本 - 一个普通的版本和一个带有 -webkit- 前缀的版本。这样,无论用户是使用WebKit浏览器还是其他浏览器,动画都能正常运行。但请注意,现代浏览器通常不再需要使用这种前缀版本。

animation-name

指定@keyframes动画的名称。

<div style="animation-name: mymove;">Animate me
</div>

animation-duration

指定动画完成一个周期所花费的时间。

<div style="animation-duration: 5s;">Animate me
</div>

animation-timing-function

指定动画的速度曲线。

<div style="animation-timing-function: ease-in;">Animate me
</div>

animation-delay

指定动画何时开始。

<div style="animation-delay: 2s;">Animate me
</div>

animation-iteration-count

指定动画应该播放多少次。

<div style="animation-iteration-count: infinite;">Animate me
</div>

animation-direction

指定动画是否在下一周期逆向播放。

<div style="animation-direction: alternate;">Animate me
</div>

示例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Animation Example</title>
<style>@keyframes myAnimation {0% { transform: translateX(0); }50% { transform: translateX(100px); }100% { transform: translateX(0); }}.animate {width: 100px;height: 100px;background-color: blue;animation-name: myAnimation;animation-duration: 3s;animation-iteration-count: infinite;}
</style>
</head>
<body><div class="animate">Animate me
</div></body>
</html>

在这个示例中,我们创建了一个简单的来回移动的动画。动画的名字是myAnimation,总时长是3秒,会无限次重复播放。

综合项目: 立体旋转相册

立体旋转方块

HTML代码

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>example</title><link rel="stylesheet" href="./index.css"><script src="./index.js"></script>
</head>
<body><!--/*外层最大容器*/--><div class="wrap">
<!--	/*包裹所有元素的容器*/--><div class="cube"><!--前面图片 --><div class="out_front"><div class="pic" id="out_front"> </div> </div><!--后面图片 --><div class="out_back"><div class="pic" id="out_back"> </div> </div><!--左图片 --><div class="out_left"><div class="pic" id="out_left"> </div> </div><div class="out_right"><div class="pic" id="out_right"> </div> </div><div class="out_top"><div class="pic" id="out_top"> </div> </div><div class="out_bottom"><div class="pic" id="out_bottom"> </div> </div><!--小正方体 --> <span class="in_front"><div class="in_pic" id="in_front"> </div> </span><span class="in_back"><div class="in_pic" id="in_back"> </div> </span><span class="in_left"><div class="in_pic" id="in_left"> </div> </span><span class="in_right"><div class="in_pic" id="in_right"> </div> </span><span class="in_top"><div class="in_pic" id="in_top"> </div> </span><span class="in_bottom"><div class="in_pic" id="in_bottom"> </div> </span></div></div>
</body>
</html>

CSS代码

html {background: #000;height: 100%;	
}
/*最外层容器样式*/
.wrap{position: relative;position: absolute;top: 0;right: 0;bottom: 0;left: 0;width: 200px;height: 200px;margin: auto;/*改变左右上下,图片方块移动*/}
/*包裹所有容器样式*/
.cube{width: 200px;height: 200px;margin: 0 auto;transform-style: preserve-3d;transform: rotateX(-30deg) rotateY(-80deg);-webkit-animation: rotate 20s infinite;animation: rotate 20s infinite;/*匀速*/animation-timing-function: linear;
}
@-webkit-keyframes rotate{from{transform: rotateX(0deg) rotateY(0deg);}to{transform: rotateX(360deg) rotateY(360deg);}
}
@keyframes rotate{from{transform: rotateX(0deg) rotateY(0deg);}to{transform: rotateX(360deg) rotateY(360deg);}
}
.cube div{position: absolute;width: 200px;height: 200px;opacity: 0.8;transition: all .4s;
}
/*定义所有图片样式*/
.pic{width: 200px;height: 200px;
}
.cube .pic#out_front {background-color: blueviolet;
}
.cube .pic#out_back {background-color: rgb(47, 49, 180);
}
.cube .pic#out_left {background-color: rgb(255, 230, 1);
}
.cube .pic#out_right {background-color: rgb(255, 94, 0);
}
.cube .pic#out_top {background-color: rgba(43, 226, 58, 0.651);
}
.cube .pic#out_bottom {background-color: rgb(5, 255, 213);
}.cube .in_pic#in_front {background-color: blueviolet;
}
.cube .in_pic#in_back {background-color: rgb(47, 49, 180);
}
.cube .in_pic#in_left {background-color: rgb(255, 230, 1);
}
.cube .in_pic#in_right {background-color: rgb(94, 65, 49);
}
.cube .in_pic#in_bottom {background-color: steelblue;
}.cube .out_front{transform: rotateY(0deg) translateZ(100px);
}
.cube .out_back{transform: translateZ(-100px) rotateY(180deg);
}
.cube .out_left{transform: rotateY(90deg) translateZ(100px);
}
.cube .out_right{transform: rotateY(-90deg) translateZ(100px);
}
.cube .out_top{transform: rotateX(90deg) translateZ(100px);
}
.cube .out_bottom{transform: rotateX(-90deg) translateZ(100px);
}
/*定义小正方体样式*/
.cube span{display: bloack;width: 100px;height: 100px;position: absolute;top: 50px;left: 50px;
}
.cube .in_pic{width: 100px;height: 100px;/* background-color: aqua; */
}
.cube .in_front{transform: rotateY(0deg) translateZ(50px);
}
.cube .in_back{transform: translateZ(-50px) rotateY(180deg);
}
.cube .in_left{transform: rotateY(90deg) translateZ(50px);
}
.cube .in_right{transform: rotateY(-90deg) translateZ(50px);
}
.cube .in_top{transform: rotateX(90deg) translateZ(50px);
}
.cube .in_bottom{transform: rotateX(-90deg) translateZ(50px);
}
/*鼠标移入后样式*/
.cube:hover .out_front{transform: rotateY(0deg) translateZ(200px);
}
.cube:hover .out_back{transform: translateZ(-200px) rotateY(180deg);
}
.cube:hover .out_left{transform: rotateY(90deg) translateZ(200px);
}
.cube:hover .out_right{transform: rotateY(-90deg) translateZ(200px);
}
.cube:hover .out_top{transform: rotateX(90deg) translateZ(200px);
}
.cube:hover .out_bottom{transform: rotateX(-90deg) translateZ(200px);
}

综合项目:2栏布局

常见的两栏布局方式是一侧定宽,另一侧自适应宽度,例如左侧栏定宽,右侧自适应宽度,或者右侧栏定宽,左侧自适应宽度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

HTML代码

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>example</title><link rel="stylesheet" href="./index.css"><script src="./index.js"></script>
</head>
<body><div class="container"><div class="sidebar"><p class="title">Sidebar content</p><div class="footer" id="sidebar">Sidebar Footer</div></div><div class="main"><p class="title" id="f_title">Main content</p><div class="footer" id="footer">Main Footer</div></div></div>
</body>
</html>

CSS代码

/* 
全局重置:
margin: 0; 将所有元素的外边距设置为0,以消除浏览器默认的外边距。
padding: 0; 将所有元素的内边距设置为0,以消除浏览器默认的内边距。
*/
* {margin: 0;padding: 0;
}/* 
.container样式:
display: flex; 将.container元素设置为弹性布局容器,使其子元素可以使用弹性布局属性。
height: 100vh; 将.container元素的高度设置为视口高度的100%,使其填充整个视口。
*/
.container {display: flex;height: 100vh;
}/* 
.sidebar和.main样式:
display: flex; 将.sidebar和.main元素设置为弹性布局容器,使其子元素可以使用弹性布局属性。
flex-direction: column; 将.flex容器的主轴方向设置为从上到下,使其子元素垂直排列。
*/
.sidebar, .main {display: flex;flex-direction: column;
}/* 
.sidebar样式:
justify-content: center; 在.sidebar元素的主轴方向上居中对齐其子元素。
width: 200px; 设置.sidebar元素的宽度为200像素。
background-color: #554646; 设置.sidebar元素的背景颜色为#554646。
*/
.sidebar {justify-content: center;width: 200px;  background-color: #554646;  
}/* 
.main样式:
flex-grow: 1; 允许.main元素在主轴方向上占用剩余空间。
background-color: #b37777; 设置.main元素的背景颜色为#b37777。
*/
.main {flex-grow: 1;  background-color: #b37777;  
}/* 
.footer样式:
margin-top: auto; 将.footer元素的顶部外边距设置为自动,使其始终保持在其容器的底部。
padding: 10px; 设置.footer元素的内边距为10像素。
text-align: center; 将.footer元素中的文本居中对齐。
*/
.footer {margin-top: auto;  padding: 10px;text-align: center;
}/* 
.footer#sidebar样式:
background-color: #b0b0b0; 设置ID为sidebar的.footer元素的背景颜色为#b0b0b0。
*/
.footer#sidebar {background-color: #b0b0b0; 
}/* 
.footer#footer样式:
background-color: #5b9db8; 设置ID为footer的.footer元素的背景颜色为#5b9db8。
*/
.footer#footer {background-color: #5b9db8;  
}/* 
.title样式:
background-color: #bb4e4e; 设置.title元素的背景颜色为#bb4e4e。
padding: 20px; 设置.title元素的内边距为20像素。
border: 1px solid #ccc; 设置.title元素的边框宽度为1像素,样式为实线,颜色为#ccc。
*/
.title {background-color: #bb4e4e;padding: 20px;border: 1px solid #ccc;
}/* 
.title#f_title样式:
margin: auto 0; 使ID为f_title的.title元素在其容器中垂直居中。
*/
.title#f_title {margin: auto 0;  
}

综合项目:三栏布局

三栏布局类似于两栏布局,它的具体表现形式为,左侧和右侧两栏定宽,中间区域自适应宽度。

实现效果:

HTML代码

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>example</title><link rel="stylesheet" href="./index.css"><script src="./index.js"></script>
</head>
<body>
<!-- 容器元素 -->
<div class="container"><!-- 左侧栏 --><div class="left-sidebar"><p>Left Sidebar Content</p></div><!-- 中间栏 --><div class="main-content"><p>Main Content</p></div><!-- 右侧栏 --><div class="right-sidebar"><p></p></div>
</div>
</body>
</html>

CSS代码

/* 全局样式重置 */
* {margin: 0;padding: 0;
}
/* 容器样式 */
.container {display: grid;grid-template-columns: 200px auto 200px;height: 100vh;
}
/* 左侧栏、右侧栏和主内容公共样式 */
.left-sidebar, .main-content, .right-sidebar {display: flex;flex-direction: column;justify-content: center;  /* 垂直居中对齐 */align-items: center;  /* 水平居中对齐 */
}
/* 主内容特定样式,重置垂直对齐 */
.main-content {justify-content: flex-start;  /* 垂直顶部对齐 */
}
/* 左侧栏、右侧栏和主内容公共样式 */
.left-sidebar, .main-content, .right-sidebar {padding: 20px;
}
/* 左侧栏和右侧栏背景颜色 */
.left-sidebar, .right-sidebar {background-color: #554646;
}
/* 主内容背景颜色 */
.main-content {background-color: #b37777;
}

综合项目:CSS动画版轮播图

使用CSS动画来实现轮播图。这通常需要使用@keyframes规则来定义动画,并使用animation属性来应用这些动画。

HTML代码

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>example</title><link rel="stylesheet" href="./index.css"><script src="./index.js"></script>
</head>
<body><div class="slider"><div class="slides"><div class="slide" style="background-color: red;"></div><div class="slide" style="background-color: green;"></div><div class="slide" style="background-color: blue;"></div></div></div></body>
</html>

CSS代码

.slider {position: relative;width: 300px;height: 200px;overflow: hidden;
}
.slides {display: flex;animation: slide-animation 15s infinite;  /* 5s的持续时间 * 3个幻灯片 = 15s */
}
.slide {width: 300px;height: 200px;flex-shrink: 0;transition: transform 1s;margin: 0 auto;display: flex;
}@keyframes slide-animation {0% { transform: translateX(0); }20% { transform: translateX(0); }33.33% { transform: translateX(-300px); }53.33% {transform: translateX(-300px); }66.66% { transform: translateX(-600px); }86.66% { transform: translateX(-600px); }100% { transform: translateX(0); }
}
  1. 我们首先创建了一个外部容器(.slider),它的overflow属性设置为hidden,以确保只显示一个幻灯片。
  2. 我们然后创建了一个内部容器(.slides),它包含所有的幻灯片。我们为这个容器应用了一个无限的动画(slide-animation),其持续时间为15秒(每个幻灯片的显示时间为5秒,总共有3个幻灯片,所以总持续时间为15秒)。
  3. 我们使用@keyframes规则定义了一个动画(slide-animation),它在不同的时间点将.slides容器向左平移,以显示不同的幻灯片。
  4. 最后,我们为每个幻灯片(.slide)设置了宽度、高度和背景色,以便您可以看到动画效果。

这只是一个
bar {
background-color: #554646;
}
/* 主内容背景颜色 */
.main-content {
background-color: #b37777;
}

# 综合项目:CSS动画版轮播图使用CSS动画来实现轮播图。这通常需要使用`@keyframes`规则来定义动画,并使用`animation`属性来应用这些动画。**HTML代码**```HTML
<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>example</title><link rel="stylesheet" href="./index.css"><script src="./index.js"></script>
</head>
<body><div class="slider"><div class="slides"><div class="slide" style="background-color: red;"></div><div class="slide" style="background-color: green;"></div><div class="slide" style="background-color: blue;"></div></div></div></body>
</html>

CSS代码

.slider {position: relative;width: 300px;height: 200px;overflow: hidden;
}
.slides {display: flex;animation: slide-animation 15s infinite;  /* 5s的持续时间 * 3个幻灯片 = 15s */
}
.slide {width: 300px;height: 200px;flex-shrink: 0;transition: transform 1s;margin: 0 auto;display: flex;
}@keyframes slide-animation {0% { transform: translateX(0); }20% { transform: translateX(0); }33.33% { transform: translateX(-300px); }53.33% {transform: translateX(-300px); }66.66% { transform: translateX(-600px); }86.66% { transform: translateX(-600px); }100% { transform: translateX(0); }
}
  1. 我们首先创建了一个外部容器(.slider),它的overflow属性设置为hidden,以确保只显示一个幻灯片。
  2. 我们然后创建了一个内部容器(.slides),它包含所有的幻灯片。我们为这个容器应用了一个无限的动画(slide-animation),其持续时间为15秒(每个幻灯片的显示时间为5秒,总共有3个幻灯片,所以总持续时间为15秒)。
  3. 我们使用@keyframes规则定义了一个动画(slide-animation),它在不同的时间点将.slides容器向左平移,以显示不同的幻灯片。
  4. 最后,我们为每个幻灯片(.slide)设置了宽度、高度和背景色,以便您可以看到动画效果。

这只是一个

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/231639.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试测试文档的编写和阅读

在软件测试中的流程中&#xff0c;测试文档也是一个重要的流程&#xff0c;所以测试人员也需要学习测试文档的编写和阅读。 一、定义&#xff1a; 测试文档&#xff08;Testing Documentation&#xff09;记录和描述了整个测试流程&#xff0c;它是整个测试活动中非常重要的文…

Python Xorbits库:实现无限可能的编程旅程

概要 Python Xorbits是一个强大而多功能的开源Python库&#xff0c;为开发者提供了实现创新和复杂计算的能力。它提供了各种功能和工具&#xff0c;帮助开发者在编程旅程中探索无限可能。本文将详细介绍Python Xorbits的用途和使用教程&#xff0c;帮助读者了解和掌握这个令人…

<蓝桥杯软件赛>零基础备赛20周--第8周第1讲--十大排序

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周&#xff08;读者可以按…

Ilya Sutskever:师从Hinton,“驱逐”奥特曼,一个改变AI世界的天才科学

ChatGPT 已经在全球爆火&#xff0c;但大众在两周之前似乎更熟悉Sam Altman&#xff0c;而对另一位创始人 Ilya Sutskever 却了解不多。 直到前几天因为OpenA眼花缭乱的政权争夺大戏&#xff0c;OpenAI 的首席科学家Ilya Sutskever的名字逐渐被世人所知。 Ilya Sutskever在科…

RabbitMQ消息模型之发布订阅Publish-Subscribe

发布订阅模型 Publish/Subscribe 发布订阅模型也称为广播模型&#xff0c;交换机类型需要指定为Fanout&#xff0c;正如从名称中猜到的那样&#xff0c;它是将接收到的所有消息广播到它知道的所有队列中。每个消费者都监听自己的队列&#xff0c;所以同一个消息&#xff0c;会…

某60物联网安全之IoT漏洞利用实操2学习记录

物联网安全 文章目录 物联网安全IoT漏洞利用实操2&#xff08;内存破坏漏洞&#xff09;实验目的实验环境实验工具实验原理实验内容实验步骤ARM ROP构造与调试MIPS栈溢出漏洞逆向分析 IoT漏洞利用实操2&#xff08;内存破坏漏洞&#xff09; 实验目的 学会ARM栈溢出漏洞的原理…

第二部分 系统管理篇

文件和目录管理 Linux基础 在Linux操作系统中&#xff0c;一切都是文件。Linux文件是区分大小写的。 Linux文件的拓展名和它的种类没有任何关系 Linux的目录结构为树状结构&#xff0c;顶级的目录为根目录“/”。 文件类型 用file命令查看文件类型 文件操作命令 1.mkdir创…

Java---类的继承

文章目录 1. 理解继承2. 继承概述3. 代码块理解4. 继承的好处与弊端5. 继承中变量的访问特点6. super关键字7. 继承中构造方法访问特点8. 继承中成员方法访问特点9. 方法重写10. 方法重写注意事项11. Java继承注意事项 1. 理解继承 2. 继承概述 1. 继承是面向对象的三大特征之一…

MySQL中的JOIN与IN:性能对比与最佳实践

文章目录 JOIN与IN的基本介绍JOININ JOIN与IN性能对比使用JOIN的查询使用IN的查询 何时使用JOIN何时使用IN性能优化的其他考虑因素总结 &#x1f389;MySQL中的JOIN与IN&#xff1a;性能对比与最佳实践 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈…

手机一键“触达”!VR全景助力政务服务大厅数字升级

在我们的日常生活中&#xff0c;去政务服务大厅办事&#xff0c;总是避免不了遭遇“缺一样材料”的烦恼。因此网友总是吐槽&#xff0c;办事服务窗口总是多次要求提供不同证明&#xff0c;“一会儿说要身份证&#xff0c;一会儿又说要护照”&#xff0c;每次带上服务窗口要求的…

flask中路由route根据字典ID展示部分内容,字典名展示全部内容

from flask import Flask, jsonify , request,render_template,app Flask(__name__)app.config[JSON_AS_ASCII] Falsebooks [{"id": 1, "name": 三国演义},{"id": 2, "name": 水浒传},{"id": 3, "name": 西游记…

用Metasploit进行信息收集2

基于FTP协议收集信息 1.查看ftp服务的版本信息 打开metasploit 查看ftp版本的模块&#xff0c;并进入模块 msf6 > search ftp_version msf6 > use auxiliary/scanner/ftp/ftp_version msf6 auxiliary(scanner/ftp/ftp_version) > show options 查看靶机的端口开方情…