首页 > 其他分享 >[CSS] Create a mobile friendly table with the before pseudo-element

[CSS] Create a mobile friendly table with the before pseudo-element

时间:2024-12-23 16:31:08浏览次数:3  
标签:... React mobile Create pseudo className forwardRef props before

Make an HTML table more readable on mobile devices by using the ::before pseudo-element. We add labels to each cell, so they appear like cards when the table is viewed on smaller screens. The ::before content is set using a data-label attribute for each cell to enhance mobile viewability without horizontal scrolling.

import * as React from "react"

import { cn } from "@/lib/utils"

const Table = React.forwardRef<
  HTMLTableElement,
  React.HTMLAttributes<HTMLTableElement>
>(({ className, ...props }, ref) => (
  <div className="relative w-full overflow-auto">
    <table
      ref={ref}
      className={cn("w-full caption-bottom text-sm", className)}
      {...props}
    />
  </div>
))
Table.displayName = "Table"

const TableHeader = React.forwardRef<
  HTMLTableSectionElement,
  React.HTMLAttributes<HTMLTableSectionElement>
>(({ className, ...props }, ref) => (
  <thead ref={ref} className={cn("[&_tr]:border-b hidden md:table-header-group", className)} {...props} />
))
TableHeader.displayName = "TableHeader"

const TableBody = React.forwardRef<
  HTMLTableSectionElement,
  React.HTMLAttributes<HTMLTableSectionElement>
>(({ className, ...props }, ref) => (
  <tbody
    ref={ref}
    className={cn("[&_tr:last-child]:border-0", className)}
    {...props}
  />
))
TableBody.displayName = "TableBody"

const TableFooter = React.forwardRef<
  HTMLTableSectionElement,
  React.HTMLAttributes<HTMLTableSectionElement>
>(({ className, ...props }, ref) => (
  <tfoot
    ref={ref}
    className={cn(
      "border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",
      className
    )}
    {...props}
  />
))
TableFooter.displayName = "TableFooter"

const TableRow = React.forwardRef<
  HTMLTableRowElement,
  React.HTMLAttributes<HTMLTableRowElement>
>(({ className, ...props }, ref) => (
  <tr
    ref={ref}
    className={cn(
      "border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",
      className
    )}
    {...props}
  />
))
TableRow.displayName = "TableRow"

const TableHead = React.forwardRef<
  HTMLTableCellElement,
  React.ThHTMLAttributes<HTMLTableCellElement>
>(({ className, ...props }, ref) => (
  <th
    ref={ref}
    className={cn(
      "h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
      className
    )}
    {...props}
  />
))
TableHead.displayName = "TableHead"

const TableCell = React.forwardRef<
  HTMLTableCellElement,
  React.TdHTMLAttributes<HTMLTableCellElement>
>(({ className, ...props }, ref) => (
  <td
    ref={ref}
    className={cn(
      "p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
      "flex flex-col before:content-[attr(data-label)] md:table-cell md:justify-normal",
      "before:break-words before:font-medium before:text-muted-foreground md:before:content-none",
      className
    )}
    {...props}
  />
))
TableCell.displayName = "TableCell"

const TableCaption = React.forwardRef<
  HTMLTableCaptionElement,
  React.HTMLAttributes<HTMLTableCaptionElement>
>(({ className, ...props }, ref) => (
  <caption
    ref={ref}
    className={cn("mt-4 text-sm text-muted-foreground", className)}
    {...props}
  />
))
TableCaption.displayName = "TableCaption"

export {
  Table,
  TableHeader,
  TableBody,
  TableFooter,
  TableHead,
  TableRow,
  TableCell,
  TableCaption,
}

 

标签:...,React,mobile,Create,pseudo,className,forwardRef,props,before
From: https://www.cnblogs.com/Answer1215/p/18624398

相关文章

  • 开源轻量级IM框架MobileIMSDK的鸿蒙NEXT客户端库已发布
    一、基本介绍MobileIMSDK-鸿蒙端是一套基于鸿蒙Next(纯血鸿蒙)系统的IM即时通讯客户端库:1)超轻量级(编译后库文件仅50KB)、无任何第3方库依赖(开箱即用);2)纯ArkTS编写、无Native代码、高度提炼、简单易用;3)基于鸿蒙Next标准WebSocket API,简洁优雅;4)可运行于任何支持鸿蒙Next的平台......
  • 2023腾讯游戏安全mobile端初赛wp
    绕过一些简单的检测绕过端口检测。app对27042与23946端口有检测。frida换个启动端口即可。./frida-server-16.1.10-android-arm64-l0.0.0.0:1234adbforwardtcp:1234tcp:1234IDA也换个调试端口./android_server64-p23947adbforwardtcp:23947tcp:23947......
  • sock_create 函数
    sock_create函数是Linux内核编程中用于创建套接字(socket)的函数。其实现位于net/socket.c文件中。这个函数的原型如下:intsock_create(intfamily,inttype,intprotocol,structsocket**res);各个参数的含义如下:1.family:指定协议族(protocolfamily),例如AF_INET表......
  • llama.cpp:Android端测试 MobileVLM -- Android端手机部署图生文大模型
    llama.cpp:Android端测试MobileVLM1.环境需要2.构建项目3.Android测试1.环境需要以下是经实验验证可行的环境参考,也可尝试其他版本。(1)PC:Ubuntu22.04.4(2)硬件设备:Android手机(3)软件环境:如下表所示工具版本安装Anaconda2021.05参考:Anaconda3安装及使用cmake3.26.......
  • 1. K11504 天平[Not so Mobile,UVa839]
    题目描述输入一个树状天平,根据力矩相等原则判断是否平衡。如图所示,所谓力矩相等就是WlDl=WrDr,其中Wl和Wr分别为左右两边砝码的重量,D为距离。输入格式输入的第一行,是一个整数n,表示测试数据的组数。紧接着是一个空行。每组测试数据之间也有一个空行。每组测试数据,包含多......
  • RV1126平台下的MobileSeg量化指南:高效部署低算力硬件
    1引言MobileSeg系列模型采用编解码架构,并以轻量级模型作为骨干网络,专为低算力硬件(如BPU、NPU、ARMCPU等)设计。这使得MobileSeg在边缘设备和移动端应用中表现出色,具备高效能和灵活性。本文将以MobileSeg分割模型为例,详细讲解如何在RV1126平台上进行模型量化操作,最大化发挥......
  • 小麦病虫害识别与防治系统,resnet50,mobilenet模型【pytorch框架+python源码】
     更多目标检测、图像分类识别、目标追踪等项目可看我主页其他文章功能演示:小麦病虫害识别与防治系统,卷积神经网络,resnet50,mobilenet【pytorch框架,python源码】_哔哩哔哩_bilibili(一)简介小麦病虫害识别与防治系统是在pytorch框架下实现的,这是一个完整的项目,包括代码,数据集,......
  • SVN 报错 | Cannot load supported formats: Cannot run program "svn": CreateProces
    问题描述IDEA拉取SVN服务器上的项目时,出现错误。报错信息为“Cannotloadsupportedformats:Cannotrunprogram"svn":CreateProcesserror=2,系统找不到指定的文件。”解决方案报错原因是拉取SVN服务器上的项目时SVN使用了命令行工具,如果在安装TortoiseSVN时没......
  • 关于QFramework UIKit和ResKit生成的UI预制体打包后报错Failed to Create Res. Not Fi
     使用UIKit创建UIPrefb后打包发布后提示FailedtoCreateRes.NotFindByResSearchKeys:AssetName:basepanelBundleName:TypeName:UnityEngine.GameObject,找不到所需资源。下方如图1-1的报错。图1-1问题原因:一开始以为是没有按照教程所说的流程来创建。按照教程所说......
  • 报错:jsmpeg.min.js:1 The AudioContext was not allowed to start. It must be resume
    文章目录问题分析1.添加用户点击监听事件2.使用userGesture事件3.手动触发用户交互4.使用await和async问题在使用jsmpeg接入视频流时控制台报警告,且页面没出现视频分析这个报错是因为浏览器的安全策略限制,AudioContext需要在用户与页面进行交互(如点击、......