首页 > 其他分享 >前端技术对css布局的学习

前端技术对css布局的学习

时间:2024-11-21 19:19:42浏览次数:1  
标签:flex 元素 前端 布局 grid Grid css 属性

css布局


目录

盒模型

CSS盒模型是前端开发中的一个核心概念,它描述了网页布局中元素是如何被组织和渲染的。每个HTML元素都可以被看作是一个矩形的盒子,这个盒子由内容(content)、内边距(padding)、边框(border)和外边距(margin)四个部分组成。下面详细解释这四个部分:

内容(Content)

  • 定义:盒子的实际内容,如文本、图像或其他嵌套元素。
  • 特点:内容区域的大小可以通过CSS的widthheight属性来设置,但这些属性仅指内容区域的大小,不包括内边距、边框和外边距。

内边距(Padding)

  • 定义:内容区域与边框之间的空白区域。
  • 特点:内边距是透明的,可以通过设置padding属性来控制其大小。内边距会把盒子撑大,即如果设置了内边距,盒子的总宽度和总高度会增加。
  • 属性padding-toppadding-rightpadding-bottompadding-left分别控制上下左右的内边距,也可以简写为padding

边框(Border)

  • 定义:围绕内容区域和内边距的线条。
  • 特点:边框可以有不同的样式(如实线、虚线、点状线等)、宽度和颜色。边框不是透明的,会占用空间。
  • 属性border-styleborder-widthborder-color分别控制边框的样式、宽度和颜色,也可以简写为border

外边距(Margin)

  • 定义:盒子与其他元素之间的空白区域。
  • 特点:外边距是透明的,用于控制元素之间的距离。外边距不会影响盒子本身的大小,但会影响盒子与其他元素之间的布局。
  • 属性margin-topmargin-rightmargin-bottommargin-left分别控制上下左右的外边距,也可以简写为margin

CSS盒模型的两种类型

  • W3C盒模型(标准盒模型):在这种盒模型中,元素的宽度和高度仅包括内容区域的大小,不包括内边距、边框和外边距。
  • IE盒模型(怪异盒模型):在这种盒模型中,元素的宽度和高度包括内容区域、内边距和边框的大小,但不包括外边距。

CSS3中的box-sizing属性

  • 为了解决W3C盒模型和IE盒模型之间的差异,CSS3引入了box-sizing属性。
  • box-sizing属性有三个值:content-box(默认值,遵循W3C盒模型)、border-box(遵循IE盒模型)、inherit(从父元素继承该属性的值)。
  • 通过设置box-sizing: border-box;,可以让元素的宽度和高度包含内容区域、内边距和边框的大小,从而简化布局计算。

传统布局

Float(浮动)

float属性最初被设计用于实现文本环绕图像的效果,但后来被广泛用于创建多栏布局。当一个元素的float属性被设置为leftrightnone(默认值)时,它会脱离其正常的文档流,向左或向右移动,直到它的外边缘碰到包含框或另一个浮动元素的边缘。

  • 用途:常用于实现两栏或三栏布局,如侧边栏和内容区的布局。
  • 特点:
    • 浮动元素会脱离文档流,但不会脱离文本流(即文本会环绕浮动元素)。
    • 浮动元素会影响周围元素的布局。
    • 需要清除浮动,以避免布局问题(如父元素高度塌陷)。

Position(定位)

position属性用于指定一个元素在文档中的定位方式。它主要有五个值:static(默认值)、relativeabsolutefixedsticky

  • 用途:
    • static:元素按照正常的文档流进行布局。
    • relative:元素首先按照正常文档流进行布局,然后可以通过toprightbottomleft属性进行偏移,偏移不会脱离文档流。
    • absolute:元素脱离文档流,相对于其最近的已定位(即非static)祖先元素进行定位。如果没有这样的元素,则相对于<html>元素(即整个页面)进行定位。
    • fixed:元素脱离文档流,相对于浏览器窗口进行定位。即使页面滚动,它也会停留在相同的位置。
    • sticky:是relativefixed的混合体。元素根据正常文档流进行定位,直到滚动到某个阈值位置为止,然后表现得像fixed定位一样。
  • 特点:
    • position提供了更多的布局控制,可以实现复杂的布局效果。
    • 使用absolutefixed定位时,需要小心处理元素的堆叠顺序(通过z-index属性)。

比较

  • 用途float主要用于简单的多栏布局,而position则提供了更广泛的定位选项,包括复杂的布局控制。
  • 行为float元素仍然会参与文档流(只是脱离了正常布局),而position中的absolutefixed定位元素则完全脱离了文档流。
  • 兼容性:两者在大多数现代浏览器中都有很好的支持,但position提供了更多的灵活性和控制选项。

Flexbox弹性盒子布局

Flexbox(Flexible Box 布局)是一种 CSS 布局模式,它提供了一种更加有效的方式来布局、对齐和分配容器中项目的空间,即使它们的大小未知或是动态变化的。Flexbox 旨在提供一种更有效的方式来对容器中的项目进行布局、对齐和分配空间,即使它们的大小未知或是动态变化的。

基本概念

  • Flex 容器(Flex Container):设置了 display: flex;display: inline-flex; 的元素成为了一个 flex 容器,其子元素自动成为 flex 项目(flex items)。
  • Flex 项目(Flex Items):Flex 容器中的每一个子元素都是一个 flex 项目。
  • 主轴(Main Axis):Flex 项目沿着主轴进行排列,主轴的方向由 flex-direction 属性决定(默认为 row,即水平方向)。
  • 交叉轴(Cross Axis):与主轴垂直的轴称为交叉轴。

Flex 容器属性

  • display:设置元素为 Flex 容器,常用的值有 flex(块级)和 inline-flex(行内级)。
  • flex-direction:决定主轴的方向,有 row(默认值,从左到右)、row-reverse(从右到左)、column(从上到下)、column-reverse(从下到上)。
  • flex-wrap:控制 flex 项目是否换行,有 nowrap(默认值,不换行)、wrap(换行)、wrap-reverse(反向换行)。
  • justify-content:在主轴上对齐 flex 项目,常用的值有 flex-startflex-endcenterspace-betweenspace-aroundspace-evenly
  • align-items:在交叉轴上对齐 flex 项目,常用的值有 flex-startflex-endcenterbaselinestretch(默认值,项目被拉伸以填满容器的交叉轴)。
  • align-content:在交叉轴上对齐多行 flex 项目,其用法与 justify-content 类似,但作用于多行。

Flex 项目属性

  • flex-grow:定义项目的放大比例,默认为 0,即如果存在剩余空间,也不放大。
  • flex-shrink:定义了项目的缩小比例,默认为 1,即如果空间不足,该项目将缩小。
  • flex-basis:在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为 auto,即项目的本来大小。
  • flex:是 flex-grow, flex-shrinkflex-basis 的简写,默认值为 0 1 auto。后两个属性可选。
  • align-self:允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items 属性。默认值为 auto,表示继承父元素的 align-items 属性,如果没有父元素,则等同于 stretch

示例

<div class="flex-container">
  <div class="flex-item">1</div>
  <div class="flex-item">2</div>
  <div class="flex-item">3</div>
</div>

<style>
.flex-container {
  display: flex;
  justify-content: space-between;
  align-items: center;
  background-color: lightgrey;
}

.flex-item {
  background-color: cornflowerblue;
  color: white;
  padding: 20px;
  text-align: center;
  flex-grow: 1; /* 使所有项目等宽 */
}
</style>

在这个例子中,.flex-container 是一个 flex 容器,它的子元素 .flex-item 是 flex 项目。通过设置 .flex-containerdisplay: flex;,我们使它的子元素成为 flex 项目。然后,我们通过 justify-contentalign-items 属性来控制这些项目的对齐方式,并通过 flex-grow: 1; 使所有项目等宽。

Grid布局(了解)

Grid(网格)布局是CSS中的一种二维布局系统,旨在通过创建行和列来创建复杂的页面布局。与Flexbox布局不同,Grid布局更加灵活,它允许你同时在两个维度(行和列)上对元素进行对齐和分配空间。Grid布局非常适合创建复杂的页面布局,如网格、仪表板等。

基本概念

  • Grid 容器(Grid Container):设置了 display: grid;display: inline-grid; 的元素成为了一个Grid容器,其子元素自动成为Grid项目(Grid Items)。
  • Grid 项目(Grid Items):Grid容器中的每一个子元素都是一个Grid项目。
  • Grid 行(Grid Rows):由 grid-template-rows 属性定义,或者使用 grid-auto-rows 属性为隐式创建的网格行指定大小。
  • Grid 列(Grid Columns):由 grid-template-columns 属性定义,或者使用 grid-auto-columns 属性为隐式创建的网格列指定大小。
  • 单元格(Grid Cell):Grid行和Grid列的交叉点。
  • 区域(Grid Area):由四个Grid线包围的Grid项目的空间。
  • Grid 线(Grid Line):构成Grid结构的分隔线,既可以是显式的(通过 grid-template-columnsgrid-template-rows 定义),也可以是隐式的(由Grid项目自动生成)。

Grid 容器属性

  • displaygridinline-grid,将元素设置为Grid容器。
  • grid-template-columns:定义Grid列的宽度和数量。
  • grid-template-rows:定义Grid行的高度和数量。
  • grid-template-areas:通过命名区域来定义Grid布局。
  • grid-row-gapgrid-column-gap(或简写为 grid-gap):定义Grid行和列之间的间隙。
  • justify-itemsalign-items:分别沿主轴和交叉轴对齐Grid项目。
  • justify-contentalign-content:分别沿主轴和交叉轴对齐整个Grid的内容。

Grid项目属性

  • grid-column-startgrid-column-endgrid-row-startgrid-row-end(或简写为 grid-area):指定Grid项目在Grid中的位置。
  • justify-selfalign-self:分别沿主轴和交叉轴对齐单个Grid项目,覆盖容器的对齐设置。

示例

<div class="grid-container">
  <div class="grid-item">1</div>
  <div class="grid-item">2</div>
  <div class="grid-item">3</div>
  <div class="grid-item">4</div>
  <div class="grid-item">5</div>
  <div class="grid-item">6</div>
</div>

<style>
.grid-container {
  display: grid;
  grid-template-columns: repeat(3, 1fr); /* 创建三列,每列宽度相等 */
  grid-gap: 10px; /* 设置网格线和网格项目之间的间隙 */
}

.grid-item {
  background-color: rgba(255, 99, 71, 0.8);
  padding: 20px;
  color: white;
  font-size: 15px;
  text-align: center;
}
</style>

在这个例子中,.grid-container 是一个Grid容器,它包含六个Grid项目(.grid-item)。通过设置 display: grid;grid-template-columns: repeat(3, 1fr);,我们创建了一个包含三列的Grid布局,每列的宽度相等。grid-gap: 10px; 设置了网格线和网格项目之间的间隙。

标签:flex,元素,前端,布局,grid,Grid,css,属性
From: https://www.cnblogs.com/BingBing-8888/p/18561366

相关文章

  • vue3版本实现h5自适应布局
    amfe-flexible和postcss-pxtorem可以一起使用来实现移动端的适配效果。参考的页面地址vite.config.js配置importpxtoremfrom'postcss-pxtorem';exportdefaultdefineConfig({plugins:[vue()],css:{postcss:{plugins:[pxtore......
  • 最简单的纯CSS3滑动开关按钮特效
    在线预览  下载HTML结构该滑动按钮的基本HTML结构使用一个<label>元素来包裹一个<input>元素和2个<span>元素。span.text-switch是按钮上的文字和背景,span.toggle-btn是滑动的按钮。<labelclass="switch-btn">    <inputclass="checked-switch"type="check......
  • 可视化CSS3渐变背景颜色代码生成插件
    在线预览 特效下载 这是一款可以在线生成CSS3渐变背景颜色代码的可视化插件。你可以通过调节界面上给出的颜色、色相、饱和度和亮度滑块,以及渐变方向滑块来生成各种线性渐变,屏幕上会给出相应的CSS3线性渐变代码。该渐变背景颜色插件可以设置的选项有:BaseColor:Hue:色相......
  • 前端开发调试之 PC 端调试学习笔记
    一、引言在前端开发过程中,调试是至关重要的一个环节。它能帮助我们快速定位代码中的问题,无论是页面布局错乱、交互效果异常还是性能不佳等情况,通过有效的调试手段都可以找到根源并进行修复。而在PC端进行调试有着其特定的方法和技巧,以下就是关于前端开发中PC端调试的详细......
  • 前端性能优化到底该怎么做(上)— 开门见山
    前言前端性能优化又是个听起来很高大上的词,确实是的,因为它需要高在性能,大在范围,所幸很多大佬都已经输出了很多高质量的内容供大家参考,作者最近也在学习和了解这方面的内容,对如下文中的一些理解若有不当之处,可在评论区指正!!!前端性能优化这个内容打算分为上下两篇,本来打算......
  • 前端Uin打包校园App小程序免费教程【源码】
    前端部分1、下载uniapp开发工具,导入圈子前端源码。根目录下有个siteinfo.js。所有的配置参数都在此管理,进去看说明修改为你的即可。打开manifest.json。获取一下,在uniapp里会为你自动增加一个应用。视频下载教程:https://gitee.com/DKcui/qz打包APP1、去uniapp官网申......
  • 你有用过CSS预处理器吗?喜欢用哪个?原理是什么?
    我用过CSS预处理器,主要用过Sass、Less和Stylus。我最常用的是Sass,因为它拥有强大的功能、活跃的社区和丰富的学习资源。以下是我喜欢Sass的一些原因:语法简洁易懂:Sass提供了两种语法:SCSS(SassyCSS)和缩进语法。SCSS与CSS语法非常相似,易于上手;缩进语法则更加简......
  • 解释下 CSS sprites的原理和优缺点分别是什么?
    CSSSprites,中文通常被称为“CSS精灵”或“雪碧图”,是一种网页图像优化技术。它的核心原理是将多个小图标或图像合并到一张大图中,然后利用CSS的background-position属性来精确显示需要的那部分图像。原理:合并图像:将多个小图标或图像合并成一张大图(雪碧图)。这张大图通常是PNG......
  • css的属性content有什么作用呢?有哪些场景可以用到?
    CSS的content属性用于在元素的::before和::after伪元素中插入生成的内容。它本身并不直接作用于元素本身,而是作用于这些伪元素,允许你在元素内容的前面或后面添加内容,而无需修改HTML结构。content属性的主要作用是插入各种类型的内容,包括:字符串:可以使用单引号或双引......
  • 大数据界面如此设计,前端工程师看来要掀桌子了。
    有些大数据界面的设计要求,真的会让前端工程师抓狂。比如要求在一个页面中同时呈现多种复杂的可视化图表,像既要展示全球数据分布的热力图,又要有各个地区详细数据的柱状图和折线图,还要保证它们能实时更新和交互。而且界面还要适配各种不同的设备屏幕,从大屏到小屏都不能出现显示......