CSS Grid 深入理解

CSS Grid 深入理解

简介

本教程将深入探讨 CSS 网格布局,并探索几乎所有的属性和功能。读完之后,你将能够用这种出色的 CSS 附加功能去处理任何一种布局。

术语:Grid

Grid 是二维网格系统。它可以用来构建复杂的布局以及较小的界面。

立即学习“前端免费学习笔记(深入)”;

属性:display

只需要把一个元素的 display 属性设置为 grid,它就成了网格。

.grid-to-be {    display: grid;}

这样就使 .grid-to-be 成为 grid 容器,并使其子项成为 grid 项目。

术语:网格线

在定义明确的网格轨道时会创建网格线。你可以用它们去放置网格项。

术语:网格轨道

网格线是两条网格线之间的空间。网格中的行和列是网格轨道。

属性:grid-template-columns

可以使用 grid-template-columns 属性来创建列。要定义列,应该按照你希望它们在网格中出现的顺序,把grid -template-columns 属性设置为列大小。我们来看一下:

.grid {    display: grid;    grid-template-columns: 100px 100px 100px;}

这里定义了三个宽度为 100px 的列。所有网格项将会按顺序排列在这些列中。行高将等于该行中最高元素的高度,但是可以用 grid-template-rows 来进行更改。

请注意,在仅定义列而未定义行的情况下,元素将会填充列,然后在行中折返。这是由于 Grid 使用了网格线和网格线创建的隐式网格。

属性:grid-template-rows

grid-template-rows 用于定义网格中行的数量和大小。它的语法和 grid-template-columns 类似。

.grid {    display: grid;    grid-template-columns: 100px 100px 100px;    grid-template-rows: 100px 100px 100px;}

如果只有 grid-template-rows 而没有 grid-template-columns 属性会导致列宽等于该行中最宽元素的宽度。

属性:grid-template

grid 是 grid-template-rows、grid-template-columns 和 grid-template-areas 三个属性的简写。

使用方式如下:

.grid {    grid-template:        "header    header     header"  80px        "nav       article    article" 600px        / 100px 1fr;}

你可以像平时那样去定义模板区域,将每行的宽度放在最右面,最后再把所有列的宽度放在正斜杠之后。像以前一样,你可以把所有内容放在一行。

数据类型:

fr 是为 CSS 网格布局创建的新单位。 fr 使你不需要计算百分比就能创建灵活的网格, 1fr 表示可用空间的一等份。可用空间被分为等份数字的总数个,所以 3fr 4fr 3fr 把空间划分为 3 + 4 + 3 = 10 个部分,分别为三行或列分配 3、4 和 3 个等份的可用空间。例如:

.grid {    display: grid;    grid-template-columns: 3fr 4fr 3fr;}

如果将固定单位与弹性单位相混合,则每个等份的可用空间是在减去固定空间后计算的。让我们看另一个例子:

.grid {    display: grid;    grid-template-columns: 3fr 200px 3fr;}

单个等份的宽度是这样计算的:( .grid 的宽度 – 200px) / (3 + 3) 。如果存在间隔(gutter)的话,其空间一开始也会从 .grid 的宽度中减去。这是 fr 和 % 之间的区别,即百分比不包括你用 grid-gap 定义的 gutter。

这里的 3fr 200px 3fr 基本上等于 1fr 200px 1fr。

显式网格和隐式网格

显式网格是使用属性 grid-template-rows 或 grid-template-columns 创建的网格。隐式网格由 Grid 创建的 网格线 和 网格轨道 组成,用来保存带有 grid-template-* 属性的手动创建的网格之外的项目。

自动放置(Auto-placement)

当我们创建这样的网格时:

.grid {    display: grid;    grid-template-columns: 1fr 1fr 1fr;}

即使我们只定义了列,但作为 .grid 直接子项的单个单元格仍按行放置。这是因为 Grid 包含自动放置规则。

属性:grid-auto-columns

没有被 grid-template-columns 所定义的隐式创建的网格列轨道所创建的列的大小,可以用 grid-template-columns 属性定义,其默认值为 auto;你可以把它设置为自己所需要的值。

.grid {    display: grid;    grid-template-columns: 100px 100px 100px;    grid-auto-columns: 50px;}

属性:grid-auto-rows

grid-auto-rows 的工作方式类似于 grid-template-columns 。

.grid {    display: grid;    grid-template-rows: 100px 100px 100px;    grid-auto-rows: 50px;}

属性:grid-auto-flow

grid-auto-flow 属性控制 网格单元 如何流入网格,其默认值为 row。

.grid {    display: grid;    grid-template-columns: 100px 100px 100px;    grid-auto-flow: column;}

上面网格中的“网格单元”将会被一一填充,直到没有剩余的项目为止。

基于行的放置

用行号将项目放置在网格中的操作被称为基于行的放置。

属性:grid-row-start

如果你希望特定的网格项从特定的行开始,则可以这样:

.grid-item {    grid-row-start: 3;}

属性:grid-row-end

如果你希望特定的网格项目在特定的行上结束,则可以这样:

.grid-item {    grid-row-end: 6;}

属性:grid-column-start

如果你希望特定的网格项目从特定的列开始,可以这样:

.grid-item {    grid-column-start: 3;}

属性:grid-column-end

如果你希望特定的网格项在特定的列上结束,可以这样:

.grid-item {    grid-column-end: 6;}

属性:grid-row 和 grid-column

可以用 grid-row 和 grid-column 属性来手动放置和调整网格项目的大小。每个属性都是其各自的 star 和 end 属性的简写:grid-row-start,grid-row-end,grid-column-start 和 grid-column-end。

用正斜杠 “/ ”来分隔开始和结束值:

.grid-item {    grid-column: 3 / 5;    grid-row: 2 / 7;}

属性:grid-area

你可以把 grid-area 用于对网格行和网格列的简写。它是这样的:

.grid-item {    grid-area: 2 / 3 / 7 / 5;}

该代码的行为与上一个标题中的代码相同。

跨网格的元素

要使一个元素跨网格,可以使用 grid-row 或 grid-column 属性。设置起始行 1 和结束行 -1。此处 1 表示相关轴上最左边的网格线,-1 表示相关轴上最右边的网格线。在从右到左的书写脚本中,这是相反的,即 1 表示最右边的行,-1 表示最左边的行。

.grid-item-weird {    grid-column: 1 / -1;}

如果你希望单个项目占据整个网格,可以对 grid-row 和 grid-column 都这样做:

.grid-item-weird {    grid-row: 1 / -1;    grid-column: 1 / -1;}

或者简单地:

.grid-item-weird {    grid-area: 1 / 1 / -1 / -1;}

关键字:span

当使用 grid-row 和 grid-column 时,不用显式定义行号,而是可以用 span 关键字来声明该项应涵盖的行数或列数:

.grid-item {    grid-column: 3 / span 2;}

你也可以把项目固定在终点线上,并朝另一个方向跨越。下面的代码实现了与上面相同的结果:

.grid-item {    grid-column: span 2 / 5;}可

以用相同的方式把 span 应用在行上。

术语:网格单元

网格单元格是四个相交的网格线之间的空间,就像表格中的单元格一样。

术语:网格区域

网格区域是占据网格上一个矩形区域的网格单元。它们是用命名的网格区域或基于行的放置创建的。

属性:grid-template-areas (& grid-area)

除了用诸如 span、grid-column之类的东西放置和调整单个网格项目外,还可以用所谓的“模板区域”。grid-template-area 允许你命名网格区域,以便网格项目可以进一步填充它们。

.grid {    display: grid;    grid-template-columns: 100px 1fr 100px;    grid-template-rows: 100px 800px 100px;    grid-template-areas:        "header     header   header"        "sidebar-1  content  sidebar-2"        "footer     footer   footer"}

这里的一对引号代表一行网格。你可以将所有内容放在一行中,而不用列对齐,但是我所做的只是为了使它看起来更加整洁。我首先定义了三列三行,然后为每个单元命名。通过在第一行中重复执行三次 “header”,告诉 CSS 要做的是用名为 header 的网格项覆盖整个过程。其余的也一样。

以下是通过用 grid-template-areas 命名每个网格项目,使其拥有为其定义的空间的方式:

.header {    grid-area: header}.sidebar-1 {    grid-area: sidebar-1}.content {    grid-area: content}.sidebar-2 {    grid-area: sidebar-2}.footer {    grid-area: footer}

没有什么比这更容易了,尤其是用于布置内容的 CSS 其他方法。

在前面你已经看到 grid-area 也用于基于行的定位。

如果想把单元格留空,则可以用点 . 来设置:

.grid {    display: grid;    grid-template-columns: 100px 1fr 100px;    grid-template-rows: 100px 800px 100px;    grid-template-areas:        "header header header"        "sidebar content sidebar"        "footer footer ."}

在这里,页脚以第二列结束。

属性:grid-template

grid 是 grid-template-rows,grid-template-columns 和grid-template-areas 三个属性的简写。

使用方式如下所示:

.grid {    grid-template:        "header    header     header"  80px        "nav       article    article" 200px        / 100px auto;}

可以像通常那样定义模板区域,把每行的宽度放在其最右面,然后将所有列的宽度放在正斜杠之后。像以前一样,你可以把所有得内容放在同一行。

函数:repeat()

repeat() 函数有助于使 网格轨道 列表变得不是那么多余,并为其添加了语义层。使用起来非常简单直观。我们来看一下:

你也可以重复某种形式的轨道列表,如下所示:

.grid {    display: grid;    grid-template-columns: repeat(3, 1fr 2fr); // this is the same as: 1fr 2fr 1fr 2fr 1fr 2fr}

repeat() 不必是值的唯一部分。你可以在其前后添加其他的值。例如:grid-template-columns:2fr repeat(5,1fr) 4fr;。

属性:grid

这里的 grid 是 grid-template-rows、 grid-template-columns、 grid-template-areas、 grid-auto-rows、 grid-auto-columns 和 grid-auto-flow 六个属性的简写。

首先,你可以像这样使用 grid-template(上一个示例):

.grid {    grid:        "header    header     header"     80px        "nav       article    article"    200px        / 100px auto;}

其次它不是你看上去的那样,grid 与 css 属性不一样:

是的,你没有看错:一个名为 css 的属性,所有 CSS 属性的简写。我也是在某次思考中偶然知道了它。但是现在我不会教你怎么用,以后有可能会。

第三,你以某种方式使用 grid。你可以将 grid-template-rows 与 grid-auto-columns 或 grid-auto-rows 结合使用。语法非常简单:

.grid-item {    grid:  / ;     grid:  / ; }

例如:

.grid-item-1 {    grid: 50px 200px 200px/ auto-flow 60px;}.grid-item-2 {    grid: auto-flow 50px / repeat(5, 1fr);}

请注意,在该值之前应该先使用 auto-flow 关键字。

术语:Gutter

Gutter 是单独分隔 网格行 和 网格列 的空间。 grid-column-gap, grid-row-gap 和 grid-gap 是用于定义 gutter 的属性。

属性:grid-row-gap

grid-row-gap 用于定义各个 网格行 之间的空间。它是这样的:

.grid {    display: grid;    grid-template-rows: 100px 100px 100px;    grid-row-gap: 10px;}

这会将 网格行 彼此隔开10个像素。

属性:grid-column-gap

grid-column-gap 用于定义各个 网格列 之间的空间。它是这样的:

.grid {    display: grid;    grid-template-columns: 100px 100px 100px;    grid-column-gap: 10px;}

这会将 网格列 彼此隔开 10 个像素。

属性:grid-gap

grid-gap 是将 grid-column-gap 和 grid-row-gap 结合在一起的简写属性。一个值定义了两个 gutter。例如:

.grid {    display: grid;    grid-template-columns: 100px 100px 100px;    grid-template-rows: 100px 100px 100px;    grid-gap: 10px;}

属性:order

可以用 order 属性来控制网格单元的顺序。看下面的例子:

.grid {    display: grid;    grid-template-columns: 100px 100px 100px;    grid-template-rows: 100px 100px 100px;    grid-gap: 10px;}.grid .grid-cell:nth-child(5) {    order: 1;}

在代码中,第五个网格单元被放置在网格的最后,因为其他网格单元根本没有定义顺序。如果定义了顺序,则会遵循数字顺序。两个或多个 网格单元 可以有相同的顺序。具有相同顺序或完全没有顺序的文件将会根据 HTML 文档的逻辑顺序进行放置。再看下面:

.grid {    display: grid;    grid-template-columns: 100px 100px 100px;    grid-template-rows: 100px 100px 100px;    grid-gap: 10px;}.grid .grid-cell {    order: 1}.grid .grid-cell:nth-child(5) {    order: 2;}

上面的例子产生的结果与前面的例子相同。

函数:minmax()

maxmax() 函数是 CSS 网格布局的新增功能。此功能为我们提供了指定 网格轨道 的最小和最大尺寸的方法。

看下面的例子:

.grid {    display: grid;    grid-template-columns: 1fr minmax(50px, 100px) 1fr;}

使用上面的代码,在减小窗口宽度时,中间列将保持 100px 的宽度,直到第一列和最后一列减小到其内容的宽度为止。这对于制作响应式布局特别有用。

关键字:auto

如果父容器的尺寸是固定的(例如固定宽度),则 auto 关键字作为网格项目的宽度将会使该项目充满容器的整个宽度。在有多个项目的情况下,就像 fr 那样划分空间。但是如果将 auto 与 fr 一起使用,则 auto 表现为该项目内容的宽度,剩余的可用空间被划分为 fr。

函数:fitcontent()

当你希望宽度或高度表现得像 auto 一样,但又希望受到最大宽度或高度约束时,可以用 fitcontent() 函数.

.grid-item {    width: fitcontent(200px);}

在这里,最小为适合内容,最大为 200px。

关键字:auto-fill

你可以用 auto-fill 来用最多的 网格轨道 填充相关的轴(行或列)而不会溢出。要实现这个目的,需要用到 repeat() 函数:

.grid {    display: grid;    grid-template-columns: repeat(auto-fill, 50px);}

但这会降低单个轨道的灵活性。通过与 minmax() 一起使用,可以同时具有自动填充功能和灵活性。

.grid {    display: grid;    grid-template-columns: repeat(auto-fill, minmax(50px, 1fr));}

这样,你可以至少包含一列,并且在特定浏览器宽度中包含多个 50px 的列。

请注意,即使可能未用单元格填充,auto-fill 也会创建网格轨道。

auto-fit

auto-fit 的行为与 auto-fill 相同,不同之处在于它会折叠所有空的重复轨道。空轨道是指没有放置网格项目或跨越网格项目的轨道。

dense

借助 dense 关键字,你可以将项目回填到 空网格单元 中,这些单元是因为你尝试做了一些的奇怪的事(例如spanning)而被创建的。在任何 span 内你都可以将 dense 关键字与 grid-auto-flow 配合使用,如下所示:

.grid {    display: grid;    grid-template-column: repeat(auto-fill, minmax(50px, 1fr));    grid-auto-flow: dense;}

你可以把它用在照片库之类的页面中,但在用于表单时要特别小心,因为这可能会打乱表单子元素的特定顺序。

浏览器支持

在撰写本文时,浏览器对 CSS 网格布局有很好的支持。根据 caniuse.com 的说法,除了 Internet Explorer 11部分支持 -ms 前缀和 Opera Mini 之外,所有主流浏览器均支持 CSS 网格布局。

总结

与以前的方法相比,CSS 网格使我们能够以更高的控制力、便捷性和速度来进行布局。在本教程中,我们学习了 Grid 的所有主要元素,包括创建轨道、定位和调整单元格的大小,以及使网格流畅和响应,以及使用诸如 auto-fill 和 minmax() 之类的关键字。

以上就是CSS Grid 深入理解的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1615151.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
css链接状态有哪些
上一篇 2025年12月24日 04:46:25
关于css文本属性的详细介绍
下一篇 2025年12月24日 04:46:39

相关推荐

  • 修复Django电商项目中AJAX过滤产品列表图片不显示问题

    在Django电商项目中,当使用AJAX动态加载过滤后的产品列表时,常遇到图片无法正常显示的问题。这通常是由于前端模板中图片加载方式(如data-setbg属性结合JavaScript库)与AJAX动态内容更新机制不兼容所致。解决方案是直接在AJAX返回的HTML中使用标准的标签来渲染图片,确保浏览…

    2026年5月10日
    700
  • css max-height属性怎么用

    max-height 属性设置元素的最大高度。 说明 该属性值会对元素的高度设置一个最高限制。因此,元素可以比指定值矮,但不能比其高。不允许指定负值。 注意:max-height 属性不包括外边距、边框和内边距。 立即学习“前端免费学习笔记(深入)”; 值描述none 默认。定义对元素被允许的最大高…

    2026年5月10日
    100
  • 修复点击时按钮抖动:CSS垂直对齐实践

    本文探讨了在Web开发中,交互式按钮(如播放/暂停按钮)在点击时发生意外垂直位移的问题。通过分析CSS样式变化对元素布局的影响,我们发现这是由于按钮不同状态下的边框样式和内边距改变,以及默认的垂直对齐行为共同作用所致。核心解决方案是利用CSS的vertical-align属性,将其设置为middle…

    2026年5月10日
    100
  • 使用 Jupyter Notebook 进行探索性数据分析

    Jupyter Notebook通过单元格实现代码与Markdown结合,支持数据导入(pandas)、清洗(fillna)、探索(matplotlib/seaborn可视化)、统计分析(describe/corr)和特征工程,便于记录与分享分析过程。 Jupyter Notebook 是进行探索性…

    2026年5月10日
    000
  • 如何在HTML中插入表单元素_HTML表单控件与输入类型使用指南

    HTML表单通过标签构建,包含action和method属性定义数据提交目标与方式,常用input类型如text、password、email等适配不同输入需求,配合label、required、placeholder提升可用性,结合textarea、select、button等控件实现完整交互,是…

    2026年5月10日
    300
  • 前端缓存策略与JavaScript存储管理

    根据数据特性选择合适的存储方式并制定清晰的读写与清理逻辑,能显著提升前端性能;合理运用Cookie、localStorage、sessionStorage、IndexedDB及Cache API,结合缓存策略与定期清理机制,可在保证用户体验的同时避免安全与性能隐患。 前端缓存和JavaScript存…

    2026年5月10日
    200
  • JavaScript 动态菜单点击高亮效果实现教程

    本教程详细介绍了如何使用 JavaScript 实现动态菜单的点击高亮功能。通过事件委托和状态管理,当用户点击菜单项时,被点击项会高亮显示(绿色),同时其他菜单项恢复默认样式(白色)。这种方法避免了不必要的DOM操作,提高了性能和代码可维护性,确保了无论点击方向如何,功能都能稳定运行。 动态菜单高亮…

    2026年5月10日
    200
  • html5怎么画实线_HTML5用CSS border-style:solid画元素实线边框【绘制】

    可通过CSS的border-style属性设为solid添加实线边框:一、内联样式用border:2px solid #000;二、内部样式表统一设置如div{border:1px solid #333};三、外部CSS文件定义.my-box{border:3px solid red}并引入;四、单…

    2026年5月10日
    400
  • css如何禁止滚动条

    css禁止滚动条的方法:1、完全隐藏,代码为【】;2、在不需要时隐藏,代码为【】;3、样式表方法。 本教程操作环境:windows7系统、css3版,DELL G3电脑。 1、完全隐藏 在里加入scroll=”no”,可隐藏滚动条;   立即学习“前端免费学习笔记(深入)”;…

    2026年5月10日
    000
  • 动态更新圆形进度条:JavaScript成绩计算器集成指南

    本文档旨在指导开发者如何将JavaScript成绩计算系统与动态圆形进度条集成,实现可视化展示平均成绩。我们将详细讲解如何修改现有的JavaScript代码,使其在计算出平均分后,能够动态更新圆形进度条的进度,从而提供更直观的用户体验。本文档包含详细的代码示例和注意事项,帮助开发者轻松实现这一功能。…

    2026年5月10日
    000
  • React组件中动态属性值的管理与同步:利用状态实现受控组件

    本教程旨在解决react组件中动态属性值同步使用的问题。我们将探讨如何利用react的`usestate` hook来管理组件内部状态,从而实现一个属性的值动态地影响另一个属性,并构建出可预测、易于维护的受控组件。文章将通过具体代码示例,详细阐述从初始化状态到处理状态更新的完整过程,并强调受控组件在…

    2026年5月10日
    000
  • 如何讲html和css_讲解HTML与CSS结合使用基础【基础】

    需将HTML与CSS结合使用以实现网页结构与样式的分离:HTML定义标题、段落等语义结构,CSS控制颜色、字体等外观;可通过内联样式、内部样式表或外部CSS文件引入样式,并利用类选择器和ID选择器精准应用。 如果您希望网页不仅展示内容,还能具备基本的样式和结构布局,则需要将HTML与CSS结合使用。…

    2026年5月10日
    100
  • CSS伪元素与固定背景:移动友好的实现策略

    本文深入探讨了如何利用CSS的::before伪元素、position: fixed和z-index属性,创建一种在移动设备上表现更稳定的全屏固定背景效果,以替代传统background-attachment: fixed可能存在的兼容性问题。教程将详细解析这些核心CSS概念及其在构建响应式布局中的…

    2026年5月10日
    000
  • JavaScript计算器开发:解决数值显示与初始化问题

    本教程深入探讨了使用JavaScript构建计算器时常见的数值显示异常问题,特别是由于类属性未初始化导致的`Cannot read properties of undefined`错误。我们将详细分析问题根源,并通过在构造函数中调用初始化方法来解决该问题,同时优化显示逻辑,确保计算器功能稳定且界面显…

    2026年5月10日
    000
  • HTML表单如何实现PWA支持?怎样添加离线功能?

    答案是利用Service Worker缓存资源并结合Background Sync API实现离线提交与自动同步。通过注册Service Worker缓存表单相关文件,拦截提交行为,将离线数据存入IndexedDB,并注册后台同步任务,待网络恢复后由Service Worker自动发送数据,确保提交…

    2026年5月10日
    000
  • CSS技巧:在复杂悬停效果中确保图像始终可见

    CSS技巧:在复杂悬停效果中确保图像始终可见CSS技巧:在复杂悬停效果中确保图像始终可见CSS技巧:在复杂悬停效果中确保图像始终可见CSS技巧:在复杂悬停效果中确保图像始终可见

    本教程探讨如何在包含悬停效果的CSS卡片布局中,确保图像始终显示在最顶层而不被裁剪或遮挡。通过调整HTML结构,利用CSS的position和z-index属性,以及引入pointer-events,我们将解决图像被overflow: hidden和扩展叠加层遮盖的问题,实现复杂的视觉交互效果。 在…

    2026年5月10日 用户投稿
    000
  • HTML文档如何工作?如何编辑HTML格式文件?

    HTML文档如何工作?如何编辑HTML格式文件?HTML文档如何工作?如何编辑HTML格式文件?HTML文档如何工作?如何编辑HTML格式文件?HTML文档如何工作?如何编辑HTML格式文件?

    浏览器解析和渲染html的过程包括:1. 解析html构建dom树;2. 结合css构建渲染树;3. 布局计算元素位置;4. 绘制像素到屏幕。编辑html可使用记事本、vs code、sublime text等文本或代码编辑器,其中vs code因语法高亮、自动补全和插件生态成为主流选择。标准htm…

    2026年5月10日 用户投稿
    100
  • JavaScript 中使用多个 querySelector 更新页面元素

    本文旨在讲解如何在 JavaScript 的 if 语句中使用多个 querySelector 来更新不同的页面元素,并提供示例代码和注意事项,帮助开发者理解并应用此技术。通过该方法,可以根据特定条件动态修改页面内容,提升用户体验。 使用 querySelector 在 if 语句中更新多个元素 在…

    2026年5月10日
    100
  • HTTP客户端请求缓存与重用优化

    合理使用客户端缓存与连接复用可显著提升Web性能。通过Cache-Control、ETag和Last-Modified实现条件请求,避免重复传输;启用Keep-Alive并维护TCP连接池以减少握手开销;优先采用HTTP/2或HTTP/3实现多路复用与低延迟连接;针对静态资源设置长缓存,动态数据使用…

    2026年5月10日
    100
  • CodeIgniter在IIS环境下实现URL重写与index.php移除指南

    本教程详细指导如何在IIS服务器上部署的CodeIgniter应用中,移除URL中不必要的index.php。核心解决方案涉及修改CodeIgniter的config.php文件,将$config[‘index_page’]设置为空,并辅以正确的IIS web.config重…

    2026年5月10日
    100

发表回复

登录后才能评论
关注微信