css ( cascading style sheets )

css

CSS(Cascading Style Sheets,层叠样式表)是一种用于描述HTML或XML文档的呈现样式的语言。它的主要作用是为Web文档的内容添加美观的样式,使网页更加用户友好和吸引人。以下是对CSS的几个关键点的简要介绍:

CSS 的基本概念

  1. 选择器:
    选择器用于指定需要应用样式的HTML元素。常见的选择器包括类型选择器、类选择器、ID选择器、属性选择器等。

    1. 元素选择器:如 p, div, span

    2. 类选择器:如 .class-name

    3. ID 选择器:如 #id-name

    4. 属性选择器:如 [attribute=“value”]

    5. 伪类和伪元素:如 :hover, ::before 1

      伪类和伪元素是CSS中的两种特殊选择器,用于为特定的元素状态或选择元素的部分应用样式。伪类针对“状态”,伪元素针对“部分”。:

      1. 伪类(Pseudo-class)
        伪类用于选择元素的特定状态,例如鼠标悬停、选中等。它通过:符号表示,例如:

        • :hover:鼠标悬停状态
        • :nth-child():选择特定子元素
        • :focus:元素获得焦点
      2. 伪元素(Pseudo-element)
        伪元素用于样式化元素的一部分内容,例如首字母、子内容等。它通过::符号表示(CSS2中部分伪元素也可用:),例如:

        • ::before:在元素内容前生成内容
        • ::after:在元素内容后生成内容
        • ::first-letter:选择第一字符
  2. 属性和属性值:
    CSS由许多属性组成,这些属性定义了将应用于某个元素的具体样式。每个属性都有一个相对应的属性值,例如 color: red; 将文本的颜色设置为红色。

    • Commonly used CSS properties

      • width-(宽度),unit:px(像素)

      • height -(高度)

      • color-(前景色,也就是文字的颜色)

      • background-color-(背景色)

      • font-size-(字体的大小)

  3. 层叠性和优先级:
    CSS的“层叠性”允许在多个样式规则之间进行选择。优先级规则帮助决定当多个规则应用于同一元素时,哪些规则会生效。通常,特异性(specificity)、源顺序和重要性(通过!important)影响优先级 1

CSS 的用途

  • 排版: 控制文本的字体、大小、颜色、行高、字间距等。

  • 布局: 定义元素的位置、浮动、定位、显示等属性来创建复杂的布局结构。

  • 背景: 设置背景颜色、图像、渐变等。

  • 边框和轮廓:样式、颜色、宽度等

  • 响应式设计: 使用媒体查询来适应不同设备屏幕的宽度,从而使页面在移动设备和桌面设备上都能友好的展示。

    • 媒体查询:根据设备特性应用不同的样式
    • 弹性盒子(Flexbox)和网格(Grid)布局
  • 动画和过渡: 创建复杂的动画效果和元素状态过渡。通过过渡、动画、关键帧等功能,CSS可以实现复杂的视觉特效,不涉及JavaScript。

  • 预处理器

    • Sass, Less, Stylus 等,提供更强大的 CSS 编写功能。Sass, Less, Stylus 等,扩展了CSS的功能,支持变量、嵌套、运算等。
  • 类库和框架: 如Bootstrap、Tailwind CSS,提供预定义的风格和组件,加速开发过程。

引入 CSS

CSS可以通过多种方式引入到HTML文档中:

  1. 行内样式(Inline Styles):
    直接在HTML元素中使用 style 属性定义样式,例如:

    <p style="color:blue;">This is a blue text.</p>
    
  2. 嵌入样式(Embedded Styles):
    使用 <style> 标签直接在HTML文档的 <head> 部分书写样式,例如:

    <style>
      p { color: blue; }
    </style>
    
  3. 外部样式表(External Stylesheets):
    将样式写在一个独立的CSS文件中,然后通过 <link> 标签引用,比如:

    <link rel="stylesheet" href="styles.css">
    

CSS通过提供与HTML结构清晰分离的样式层级,使开发者能够更灵活、高效地控制Web页面的设计和布局。CSS与HTML、JavaScript一起构成前端开发的三大支柱,掌握CSS对于创建现代、响应式的Web界面至关重要。

css syntax

css selectors

box model

every element on a page is a rectangular box.

这是一个使用 CSS Box Model 的简单例子,演示如何设置元素的内容、内边距、边框和外边距,以及它们对元素整体大小的影响。

HTML 示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS Box Model Example</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>

<div class="box">This is a box model example.</div>

</body>
</html>

CSS 示例

.box {
    width: 200px;                  /* 内容宽度 */
    height: 100px;                 /* 内容高度 */
    
    padding: 20px;                 /* 内边距 */
    
    border: 5px solid #000;        /* 边框 */
    
    margin: 15px;                  /* 外边距 */
    
    background-color: lightblue;   /* 背景颜色 */
    color: #333;                   /* 文本颜色 */
    box-sizing: content-box;       /* 默认盒模型 */
}

解析

  • 内容(Content): 这是元素显示文本的区域,宽度为 200px,高度为 100px。

  • 内边距(Padding): 在内容和边框之间有 20px 的空白区域。这使得元素的“视觉”内容区域看起来更宽更高,但内容宽高属性仍然是 200x100px。Padding(内边距)围绕内容,是透明的,用于增加元素内容和其边框之间的距离。

  • 边框(Border): 边框宽度为 5px,围绕着内边距,使元素看起来更有立体感。设置边框颜色为黑色。

  • 外边距(Margin): 元素周围有 15px 的外边距,确保该元素与其他元素之间有一定的空白区域。

  • 背景颜色: 整个元素的背景颜色为淡蓝色。

  • 文本颜色: 设置文本颜色为深灰色。

  • 标准盒模型 vs IE盒模型

    1. 标准盒模型(Content-Box):
      • 元素的实际宽度 = width + padding + border
      • widthheight 只应用于内容区域
    2. IE盒模型(Border-Box):
      • 元素的实际宽度 = width(包含了padding和border)
      • widthheight 包括内容区域、内边距和边框

结果

在这里插入图片描述

在这里插入图片描述

当浏览器渲染这段代码时,.box 元素的总宽度和高度可以通过以下公式计算:

  • 总宽度: 200px (内容宽度) + 20px (左内边距) + 20px (右内边距) + 5px (左边框) + 5px (右边框) = 250px
  • 总高度: 100px (内容高度) + 20px (上内边距) + 20px (下内边距) + 5px (上边框) + 5px (下边框) = 150px

外边距没有包含在总宽度和高度的计算中,但会影响元素在页面上的定位。

CSS Box Model 是 CSS 设计和布局的基础概念之一。它定义了一个包含元素内容、内边距、边框和外边距的矩形盒子。每个 HTML 元素在浏览器中被渲染为盒子,通过理解 Box Model,你可以更好地控制页面元素之间的空间和布局。以下是对盒模型构成的详细解释:

CSS Box Model 组件

  1. Content(内容):

    • 元素的实际内容,例如文本、图像、视频等,内容区的大小由 widthheight 属性控制。
  2. Padding(内边距):

    • 围绕内容的空间,透明的,用于增加元素内容和其边框之间的距离。可单独设置 padding-top, padding-right, padding-bottom, 和 padding-left
  3. Border(边框):

    • 围绕内边距(如果有)的边界,可以设置其宽度、样式和颜色。每边的边框可分别设置,比如 border-widthborder-styleborder-color
  4. Margin(外边距):

    • 在元素边框外的透明区域,用于在该元素与其他元素之间创建空间。类似于内边距,可单独设置 margin-top, margin-right, margin-bottom, 和 margin-left

Box Model 的计算

盒模型的总宽度和高度是通过以下公式计算的:

  • 总宽度: width + padding-left + padding-right + border-left-width + border-right-width + margin-left + margin-right
  • 总高度: height + padding-top + padding-bottom + border-top-width + border-bottom-width + margin-top + margin-bottom

Box Sizing 模式

通过 box-sizing 属性,开发者可以更改元素的盒子模型计算方式:

  • content-box (默认): widthheight 只包含内容区,不包括内边距和边框。
  • border-box: widthheight 包含内容区、内边距和边框。不包括外边距。

使用 border-box 可以让样式和布局更易于控制和计算,避免内边距和边框大小影响到盒子的总大小。

理解和正确应用 CSS Box Model 是创造精确、可控的 Web 布局的重要基础。通过合理设置每个组件的尺寸,开发者可以创建出具有良好视觉效果和用户体验的网站。

position

z-index 是 CSS 中用于控制元素在 Z 轴上(即垂直于页面的轴线上)的堆叠顺序的属性。它决定了元素在网页上是位于更前面还是更后面,适用于定位元素(即使用 position 属性设置为 absoluterelativefixedsticky 的元素 1 )。

在这里插入图片描述

使用场景

在网页设计中,多个元素可能在视觉上互相重叠。z-index 允许开发者指定哪个元素应该显示在顶部。例如,模态窗口、浮动菜单、工具提示等都可以通过调整 z-index 来正确定位。

语法

.element {
    position: relative;  /* 确保元素被定位 */
    z-index: 10;         /* 设置堆叠顺序 */
}

属性值说明

  • 整数值: 可以是正整数、负整数或零。例如,z-index: 10; 表示此元素会比 z-index: 5; 的元素显示得更加靠前。
    • 较大的 z-index 值表示该元素会显示在叠放顺序的上层。
    • 较小的 z-index 值表示该元素会显示在下层。
  • 自动计算: 默认情况下,所有元素的 z-indexauto (默认值,元素按照其在 HTML 中出现的顺序堆叠)。

注意事项

  1. 定位元素: z-index 只对定位元素有效(即 position 属性不是 static 的元素)。
  2. 父子关系: 如果元素的父级元素有 z-index 设置,子元素的 z-index 相对父元素定义的上下文计算。
  3. 堆叠上下文: 创建新的堆叠上下文的元素会限制其子元素的 z-index 作用范围。例如,如果父元素具有 z-index 值,子元素的 z-index 值是相对于这个父元素的,而不是整个文档。
  4. 负值: z-index 可以为负值,这意味着它将被渲染在默认文档流元素之后。
  5. 堆叠上下文
    • z-index 创建了一个堆叠上下文。
    • 元素的 z-index 只在其父堆叠上下文中有效。
  6. 继承
    子元素默认继承父元素的堆叠层级,但可以通过设置自己的 z-index 来改变。
  7. auto 值
    当 z-index 为 auto 时,元素不会创建新的堆叠上下文。
  8. 负值
    负值的 z-index 会使元素显示在默认堆叠顺序之下。
  9. 无单位
    z-index 值不需要单位。

示例

假设我们有两个重叠的盒子:

<div class="box1">Box 1</div>
<div class="box2">Box 2</div>
.box1 {
    position: absolute;
    width: 100px;
    height: 100px;
    background-color: red;
    z-index: 1;
}

.box2 {
    position: absolute;
    width: 100px;
    height: 100px;
    background-color: blue;
    left: 50px; /* 将其定位以便稍微重叠 */
    z-index: 2;
}

在这个例子中,box2 会显示在 box1 上,因为 box2z-index 为 2,而 box1z-index 为 1。通过调整 z-index 值,开发者可以控制哪些元素应该显示在更上层。

flexbox

如何使用弹性盒子, 直接使用吗

弹性盒子(Flexbox)是一个 CSS3 布局模型,用于更有效地排列和对齐容器中的子项,即使它们的大小是动态的,也可以相对均等地分布在容器中。Flexbox 布局试图提供一种更有效的方式来布局,对齐和分布空间,尤其适合需要自适应布局以及复杂布局的场合。这种布局是为了解决不同屏幕尺寸和设备显示内容时的布局问题。

使用弹性盒子(Flexbox)来布局是一个简洁而强大的方式,可以直接通过CSS属性来实现。通过简单而强大的方式来使容器中的元素具有弹性。解决不同屏幕尺寸和设备显示内容时的布局问题。以下是如何使用弹性盒子的基本步骤:

基本概念

  • 容器(Container):具有 display: flexdisplay: inline-flex 的元素,它们的直接子元素将成为弹性项目(items)。
  • 项目(Items):容器内的子元素,它们会根据容器的属性进行排列和布局。

基本步骤

  1. 定义Flex容器

    • 将HTML元素的 display 属性设置为 flex(块级)或 inline-flex(行内级),这将使该元素成为Flex容器。
    .container {  
        display: flex;  
    }
    
  2. 设置Flex属性

    • 根据需要,可以为Flex容器设置各种布局属性,如 flex-directionjustify-contentalign-items 等。
    .container {  
        display: flex;  
        flex-direction: row;  
        justify-content: space-between;  
        align-items: center;  
    }
    
  3. 配置Flex项目

    • Flex容器中的直接子元素是Flex项目(items),你可以控制它们的行为和排列方式,如 flex-growflex-shrinkorder 等。
    .item {  
        flex: 1; /* 默认1相同大小 */  
    }  
    
    .item-special {  
        flex: 2; /* 占两倍空间 */  
    }
    

示例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        .flex-container {
            display: flex;
            flex-direction: row; /* 项目从左到右排列 */
            justify-content: space-between; /* 项目均匀分布在行中 */
            align-items: center; /* 项目在竖直方向居中对齐 */
            height: 200px; /* 容器高度 */
            border: 1px solid #ccc;
            padding: 10px;
        }

        .flex-item {
            background-color: lightgray;
            padding: 20px;
            margin: 5px;
            flex-grow: 1; /* 每个项目将会平分可用空间 */
        }
    </style>
</head>
<body>
    <div class="flex-container">
        <div class="flex-item">Item 1</div>
        <div class="flex-item">Item 2</div>
        <div class="flex-item">Item 3</div>
    </div>
</body>
</html>

解释

  • display: flex;:将 .flex-container 作为Flex容器。
  • flex-direction: row;:设置主轴为水平方向。
  • justify-content: space-between;:在主轴方向上均匀分布项目,首尾项目紧贴容器边缘。
  • align-items: center;:在交叉轴方向上使项目居中对齐。
  • flex-grow: 1;:每个 .flex-item 项目平分容器的可用空间。

注意事项

  • 浏览器支持:现代浏览器广泛支持Flexbox布局,但若要支持非常旧的浏览器,可能需要添加一些前缀或使用Polyfill。
  • 重写布局:使用Flexbox可以大幅简化传统的浮动 (float) 或定位 (position) 的布局方式,使得代码更简洁且更易维护。
  • 嵌套使用:Flexbox可以嵌套使用,您可以在Flex容器内包含另外的Flex容器以创建复杂的布局。

通过直接在CSS中设置相关属性,就可以使用Flexbox来实现响应式和复杂布局设计。Flexbox提供了强大的布局能力,是构建响应式网站和应用的理想选择。

主轴方向上均匀分布项目,首尾项目紧贴容器边缘。

  • align-items: center;:在交叉轴方向上使项目居中对齐。
  • flex-grow: 1;:每个 .flex-item 项目平分容器的可用空间。

注意事项

  • 浏览器支持:现代浏览器广泛支持Flexbox布局,但若要支持非常旧的浏览器,可能需要添加一些前缀或使用Polyfill。
  • 重写布局:使用Flexbox可以大幅简化传统的浮动 (float) 或定位 (position) 的布局方式,使得代码更简洁且更易维护。
  • 嵌套使用:Flexbox可以嵌套使用,您可以在Flex容器内包含另外的Flex容器以创建复杂的布局。

通过直接在CSS中设置相关属性,就可以使用Flexbox来实现响应式和复杂布局设计。Flexbox提供了强大的布局能力,是构建响应式网站和应用的理想选择。

参考:


  1. css ↩︎ ↩︎ ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值