0

0

如何用css框架UIKit实现表格布局

P粉602998670

P粉602998670

发布时间:2025-09-21 12:13:01

|

1013人浏览过

|

来源于php中文网

原创

UIKit通过uk-grid实现响应式表格布局,利用uk-child-width控制列数、uk-grid-match统一行高,并结合Flexbox或CSS Grid实现灵活对齐与跨设备适配,优于传统HTML表格的僵硬结构。

如何用css框架uikit实现表格布局

UIKit实现表格布局,通常并非指直接使用HTML的

<table>
标签来构建页面结构,而是巧妙地利用其强大的网格(Grid)系统或弹性盒(Flexbox)工具类,来构建视觉上呈现表格化、规整对齐的内容区域。这能让我们在保持语义化的同时,获得灵活且响应式的布局效果,远比传统表格在布局上更具弹性。

解决方案

要用UIKit实现类似表格的布局,最核心的工具就是

uk-grid
。它提供了一个灵活的、基于CSS Grid或Flexbox的布局系统,可以轻松地划分页面区域,并让内容块在不同屏幕尺寸下自动调整。

一个基本的“表格”布局可以这样开始:

首先,你需要一个容器来承载你的网格:

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

<div class="uk-grid-match uk-child-width-1-3@m uk-child-width-1-2@s uk-grid-small" uk-grid>
    <div>
        <div class="uk-card uk-card-default uk-card-body">单元格内容 A1</div>
    </div>
    <div>
        <div class="uk-card uk-card-default uk-card-body">单元格内容 A2</div>
    </div>
    <div>
        <div class="uk-card uk-card-default uk-card-body">单元格内容 A3</div>
    </div>
    <div>
        <div class="uk-card uk-card-default uk-card-body">单元格内容 B1</div>
    </div>
    <div>
        <div class="uk-card uk-card-default uk-card-body">单元格内容 B2</div>
    </div>
    <div>
        <div class="uk-card uk-card-default uk-card-body">单元格内容 B3</div>
    </div>
</div>

这里面有几个关键点:

  • uk-grid
    : 这是激活网格系统的核心类。
  • uk-grid-match
    : 这个属性很有用,它能让同一行中的所有直接子元素(在这里是
    <div>
    )拥有相同的高度,这在视觉上非常像表格的行高对齐。
  • uk-child-width-1-3@m
    : 这表示在中等(
    @m
    )及以上屏幕尺寸时,每个子元素的宽度是容器的1/3,也就是一行显示3个“单元格”。
  • uk-child-width-1-2@s
    : 在小(
    @s
    )及以上屏幕尺寸时,每个子元素的宽度是容器的1/2,一行显示2个。
  • uk-grid-small
    : 为网格项之间添加一个小的间距。你也可以用
    uk-grid-medium
    uk-grid-large
    uk-grid-collapse
    (无间距)。
  • 每个
    <div>
    内的
    uk-card uk-card-default uk-card-body
    只是为了让内容块有更明显的边界和样式,你可以替换成任何你想要的内容。

通过这样的结构,我们构建了一个响应式的三列表格布局。如果需要更精细的控制,比如某个“单元格”占据两列,可以使用

uk-width-expand
或直接指定宽度类,例如
uk-width-1-2
来覆盖默认的
uk-child-width

对于更复杂的对齐,例如垂直居中,可以在单个“单元格”内部使用

uk-flex
工具类:

<div class="uk-grid-match uk-child-width-1-3@m" uk-grid>
    <div>
        <div class="uk-card uk-card-default uk-card-body uk-flex uk-flex-middle uk-flex-center">
            <p>居中内容</p>
        </div>
    </div>
    <!-- 其他单元格 -->
</div>

这里

uk-flex uk-flex-middle uk-flex-center
让卡片内的内容水平垂直居中,模拟了表格单元格的对齐效果。

UIKit的网格系统与传统HTML表格在布局上有何不同?

UIKit的网格系统与传统HTML表格在布局理念上存在本质差异。传统HTML表格(

<table>
)是为展示结构化数据而设计的,其语义是“数据表”。如果你用它来做页面布局,虽然能实现视觉上的对齐,但会带来很多问题:比如在响应式设计中难以调整列宽、内容排序困难、对屏幕阅读器不友好(可能误导用户以为是数据表格而非布局元素),以及CSS样式控制不如Flexbox或Grid灵活。

而UIKit的

uk-grid
,无论是基于Flexbox还是CSS Grid(取决于UIKit版本和浏览器支持),其核心目的就是页面布局。它关注的是如何将页面内容块有效地排列、对齐和响应式调整。

主要区别在于:

  1. 语义化
    uk-grid
    使用
    <div>
    等无语义标签,更适合布局;
    <table>
    有强烈的语义,应保留给数据表格。
  2. 响应式
    uk-grid
    天生为响应式设计而生,通过
    uk-child-width-*@breakpoint
    等类可以轻松实现不同屏幕尺寸下的列数变化和内容重排。传统表格要实现响应式,往往需要复杂的CSS或JavaScript。
  3. 灵活性:网格系统可以轻松实现复杂的布局,比如某个元素跨多列、不同行元素高度自适应(
    uk-grid-match
    )、或者在小屏幕下堆叠显示。传统表格的单元格合并(
    colspan
    ,
    rowspan
    )虽然也能实现类似效果,但会使结构变得僵硬,难以适应变化。
  4. 控制力:通过CSS,你可以对网格中的每个元素进行独立的样式控制,而不会像表格那样,有时会受到表格单元格模型的影响。
  5. 可访问性:使用语义正确的HTML结构(布局用
    <div>
    ,数据用
    <table>
    )对屏幕阅读器和辅助技术更友好,提升了网站的可访问性。

简而言之,当你需要排列内容块、创建多列布局时,

uk-grid
是现代、推荐的方式;而当你在展示真正的数据集,需要行、列、表头等概念时,才应该考虑使用
<table>

在UIKit中,如何实现带有固定表头和可滚动内容的“表格”?

实现一个带有固定表头和可滚动内容的“表格”是一个常见的需求,尤其是在展示大量数据时。UIKit本身没有直接提供这样的组件,但我们可以结合其网格系统和一些自定义CSS来实现。

核心思路是:

Cutout.Pro
Cutout.Pro

AI驱动的视觉设计平台

下载
  1. 将表头和表体分离。
  2. 表头固定位置。
  3. 表体设置高度限制和滚动条。

这里提供一个基于

uk-grid
和少量自定义CSS的实现思路:

<div class="uk-card uk-card-default uk-card-body">
    <!-- 表头 -->
    <div class="uk-grid uk-grid-small uk-child-width-1-3 uk-text-bold uk-text-center uk-background-muted uk-padding-small fixed-header" uk-grid>
        <div>列标题 1</div>
        <div>列标题 2</div>
        <div>列标题 3</div>
    </div>

    <!-- 可滚动内容区域 -->
    <div class="scrollable-table-body">
        <div class="uk-grid uk-grid-small uk-child-width-1-3 uk-text-center" uk-grid>
            <div>数据 A1</div>
            <div>数据 A2</div>
            <div>数据 A3</div>
        </div>
        <div class="uk-grid uk-grid-small uk-child-width-1-3 uk-text-center" uk-grid>
            <div>数据 B1</div>
            <div>数据 B2</div>
            <div>数据 B3</div>
        </div>
        <!-- 更多数据行 -->
        <div class="uk-grid uk-grid-small uk-child-width-1-3 uk-text-center" uk-grid>
            <div>数据 Z1</div>
            <div>数据 Z2</div>
            <div>数据 Z3</div>
        </div>
    </div>
</div>

<style>
    /* 确保表头和内容区域的列宽一致,这可能需要手动调整或使用JavaScript */
    .fixed-header > div, .scrollable-table-body .uk-grid > div {
        /* 这里可以根据需要微调宽度,确保对齐 */
        /* 例如,如果uk-child-width-1-3,那么每个div的宽度大概是33.333% */
        /* 为了完美对齐,可能需要考虑uk-grid-small的间距 */
        box-sizing: border-box; /* 确保padding和border不增加宽度 */
    }

    .scrollable-table-body {
        max-height: 300px; /* 设置最大高度 */
        overflow-y: auto; /* 垂直滚动 */
        margin-top: -1px; /* 消除与表头之间的1px边框或间隙 */
        border-top: 1px solid #e5e5e5; /* 给滚动区域一个上边框,与表头分隔 */
    }
</style>

在这个例子中:

  • 我们用两个独立的
    uk-grid
    结构来分别表示表头和表体。
  • fixed-header
    类用于表头,你可以进一步添加
    position: sticky; top: 0; z-index: 1;
    如果需要它在父容器滚动时也固定。但在这个场景下,它只是一个普通的固定在顶部的区域。
  • scrollable-table-body
    是关键,它设置了
    max-height
    overflow-y: auto
    ,使得当内容超出指定高度时,出现垂直滚动条。
  • uk-child-width-1-3
    确保了表头和表体在列宽上保持一致。然而,要实现完美对齐,需要注意
    uk-grid
    的间距(
    uk-grid-small
    )也会影响宽度计算。
    在实际项目中,你可能需要用JavaScript动态计算并设置表头列的宽度,使其与表体列精确匹配,或者使用CSS Grid的
    grid-template-columns
    属性来定义更精确的列宽。
  • margin-top: -1px;
    border-top: 1px solid #e5e5e5;
    是为了让表头和滚动区域在视觉上无缝衔接,同时有一个分隔线。

这种方法在大多数情况下都能很好地工作,但要达到像素级的完美对齐,尤其是在有边框和间距的情况下,往往需要一些细致的调整或更高级的CSS Grid布局。

如何利用UIKit的网格系统创建响应式的数据列表或卡片布局?

UIKit的网格系统在创建响应式的数据列表或卡片布局方面表现出色,因为它允许内容块在不同屏幕尺寸下自动重排和调整大小,而无需你手动编写复杂的媒体查询。这比传统的表格布局更现代、更灵活。

核心在于

uk-grid
uk-child-width-*
类的组合。

场景一:响应式数据列表

假设你有一组数据,想以列表形式展示,但在大屏幕上显示多列,小屏幕上则堆叠显示。

<div class="uk-grid-small uk-child-width-1-1 uk-child-width-1-2@s uk-child-width-1-3@m uk-child-width-1-4@l" uk-grid>
    <div>
        <div class="uk-card uk-card-default uk-card-body">
            <h3 class="uk-card-title">产品名称 A</h3>
            <p>描述信息,这是一段关于产品A的简短介绍。</p>
            <p class="uk-text-meta">价格: $19.99</p>
        </div>
    </div>
    <div>
        <div class="uk-card uk-card-default uk-card-body">
            <h3 class="uk-card-title">产品名称 B</h3>
            <p>描述信息,这是一段关于产品B的简短介绍。</p>
            <p class="uk-text-meta">价格: $29.99</p>
        </div>
    </div>
    <div>
        <div class="uk-card uk-card-default uk-card-body">
            <h3 class="uk-card-title">产品名称 C</h3>
            <p>描述信息,这是一段关于产品C的简短介绍。</p>
            <p class="uk-text-meta">价格: $39.99</p>
        </div>
    </div>
    <div>
        <div class="uk-card uk-card-default uk-card-body">
            <h3 class="uk-card-title">产品名称 D</h3>
            <p>描述信息,这是一段关于产品D的简短介绍。</p>
            <p class="uk-text-meta">价格: $49.99</p>
        </div>
    </div>
    <!-- 更多产品项 -->
</div>

这里:

  • uk-child-width-1-1
    : 默认(所有屏幕)一行显示一个(全宽)。
  • uk-child-width-1-2@s
    : 在小(
    @s
    )及以上屏幕,一行显示两个。
  • uk-child-width-1-3@m
    : 在中(
    @m
    )及以上屏幕,一行显示三个。
  • uk-child-width-1-4@l
    : 在大(
    @l
    )及以上屏幕,一行显示四个。
  • 每个数据项都包裹在
    uk-card
    中,这是一种常见的UI模式,为每个数据块提供清晰的边界和样式。

通过这样的设置,你的产品列表在手机上会垂直堆叠,在平板上会变成两列,在桌面电脑上则会是三列或四列,极大地提升了用户体验。

场景二:卡片布局与不同高度内容

如果你的卡片内容高度不一,但你希望它们在视觉上看起来整齐,可以使用

uk-grid-match

<div class="uk-grid-match uk-child-width-1-1 uk-child-width-1-2@s uk-child-width-1-3@m uk-grid-small" uk-grid>
    <div>
        <div class="uk-card uk-card-default uk-card-body">
            <h3 class="uk-card-title">短标题</h3>
            <p>短内容。</p>
        </div>
    </div>
    <div>
        <div class="uk-card uk-card-default uk-card-body">
            <h3 class="uk-card-title">这是一个稍微长一点的标题</h3>
            <p>这段内容相对较长,可能会占据多行,但由于`uk-grid-match`的存在,同行的其他卡片也会自动调整高度以保持对齐。</p>
            <p class="uk-text-meta">一些额外信息。</p>
        </div>
    </div>
    <div>
        <div class="uk-card uk-card-default uk-card-body">
            <h3 class="uk-card-title">另一个标题</h3>
            <p>又一段内容。</p>
        </div>
    </div>
    <!-- 更多卡片 -->
</div>

uk-grid-match
确保了同一行内的所有
<div>
元素(即你的卡片)具有相同的高度,这对于视觉上的整洁和专业感至关重要。即使某个卡片内容较少,它也会被撑高到与该行中内容最多的卡片一样高。

这种响应式卡片布局是现代网站和应用中非常普遍的模式,它比固定列宽的表格更具视觉吸引力和功能性。它能让你的内容在任何设备上都以最佳方式呈现,同时保持了代码的简洁和可维护性。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

448

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

606

2023.08.10

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

236

2023.12.07

CSS position定位有几种方式
CSS position定位有几种方式

有4种,分别是静态定位、相对定位、绝对定位和固定定位。更多关于CSS position定位有几种方式的内容,可以访问下面的文章。

83

2023.11.23

overflow什么意思
overflow什么意思

overflow是一个用于控制元素溢出内容的属性,当元素的内容超出其指定的尺寸时,overflow属性可以决定如何处理这些溢出的内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1867

2024.08.15

margin在css中是啥意思
margin在css中是啥意思

在CSS中,margin是一个用于设置元素外边距的属性。想了解更多margin的相关内容,可以阅读本专题下面的文章。

470

2023.12.18

html边框设置教程
html边框设置教程

本教程将带你全面掌握HTML/CSS边框设置,从基础的border属性讲起,涵盖所有边框样式、圆角设置及高级技巧,帮助你快速上手实现各种边框效果。

44

2025.09.02

flex教程
flex教程

php中文网为大家带来了flex教程合集,Flex是采用Flex布局的元素,称为Flex容器(flex container),简称"容器",它的所有子元素自动成为容器成员,有三个核心概念: flex项,需要布局的元素;flex容器,其包含flex项;排列方向,这决定了flex项的布局方向。php中文网还为大家带来flex的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

372

2023.06.14

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.6万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号