您的位置:

CSS对表格进行样式美化

在网页设计和开发中,表格是非常重要的元素。它可以用于展示表格化的数据,也可以用于网页布局和样式设计。常见的表格样式设计包括表格线、斑马条纹、边框阴影、表头固定等。而CSS样式表提供了丰富的样式属性和选择器,可以实现各种表格样式效果。

一、表格基本样式

1、表格线条样式

表格线条是最基本的表格样式,可以通过CSS的border属性设置,如下所示。

table {
  border-collapse: collapse;
}

td, th {
  border: 1px solid #ddd;
  padding: 8px;
  text-align: left;
}

其中,border-collapse:collapse用于将表格边框合并为单一线条,避免重复绘制,减少DOM元素数量和页面渲染时间。td和th元素使用相同的样式,设置1像素的实线边框,内部使用8像素的填充。

2、表格斑马条纹

在长表格中,使用斑马条纹可以使网页看起来更加清晰整洁。可以通过CSS中的:nth-child伪类选择器实现斑马条纹效果。

tr:nth-child(even) {
  background-color: #f2f2f2;
}

以上代码用于选择表格中的偶数行,应用背景色为浅灰色,从而实现斑马条纹效果。可以通过设置奇偶性分别设定不同的背景色,更加灵活地控制表格样式。

二、表格进阶样式

1、表格阴影效果

可以为表格应用阴影效果,使表格浮现在页面上。可以通过CSS中的box-shadow属性来为表格添加阴影效果。

table {
  box-shadow: 2px 2px 10px #ccc;
}

以上代码表示为表格应用2像素的偏移距离和模糊半径为10像素的阴影,颜色为浅灰色。可以根据实际情况进行调整,使得页面效果更加美观。

2、表格圆角效果

可以为表格添加圆角效果,使其看起来更加柔和自然。可以通过CSS中的border-radius属性为表格的边框添加圆角效果。

table {
  border-collapse: collapse;
  border-radius: 5px;
  overflow: hidden;
}

以上代码将表格的边框圆角半径设置为5像素,并且使用overflow:hidden属性隐藏表格的溢出部分,避免圆角被遮挡造成不美观的效果。

3、表格宽度和高度

可以自由控制表格的宽度和高度,使其适应各种页面布局情况。可以通过CSS中的width和height属性来设置表格的宽度和高度。

table {
  width: 100%;
  height: 300px;
}

以上代码将表格的宽度设置为100%和高度设置为300像素,可以根据实际情况进行调整,使得表格具有更好的页面布局效果。

三、表格高级样式

1、表头固定效果

为了提高表格的可读性和易用性,可以为表头添加固定效果。当数据较多时,表头可以始终在页面上方,使用户方便查看和操作数据。可以通过使用position属性和一些JavaScript代码来实现表头固定效果。

<div class="table-container">
  <table>
    <thead>
      <tr>
        <th>Column 1</th>
        <th>Column 2</th>
        <th>Column 3</th>
          ...
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Row 1 Data 1</td>
        <td>Row 1 Data 2</td>
        <td>Row 1 Data 3</td>
          ...
      </tr>
      <tr>
        <td>Row 2 Data 1</td>
        <td>Row 2 Data 2</td>
        <td>Row 2 Data 3</td>
          ...
      </tr>
        ...
    </tbody>
  </table>
</div>

<style>
.table-container {
  overflow-y: auto;
  height: 300px;
}

.table-container thead th {
  position: sticky;
  top: 0;
  background-color: #fff;
}
</style>

以上代码用于实现表头固定效果。将表格放置在一个固定高度的容器中,利用overflow-y: auto属性来让容器出现纵向滚动条。thead元素中的th元素使用position: sticky属性和top: 0属性将表头固定在容器的顶部,保证表头始终可见。background-color: #fff属性用于覆盖默认的背景色,避免表头看起来生硬和不协调。

2、表格排序效果

当表格中有大量数据时,可以为表格添加排序功能,使用户方便查看和操作数据。可以通过使用一些JavaScript代码和CSS样式来实现表格排序效果。

<table>
  <thead>
    <tr>
      <th>Column 1</th>
      <th>Column 2</th>
      <th>Column 3</th>
        ...
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Row 1 Data 1</td>
      <td>Row 1 Data 2</td>
      <td>Row 1 Data 3</td>
        ...
    </tr>
    <tr>
      <td>Row 2 Data 1</td>
      <td>Row 2 Data 2</td>
      <td>Row 2 Data 3</td>
        ...
    </tr>
      ...
  </tbody>
</table>

<style>
table {
  border-collapse: collapse;
}

th {
  background-color: #f2f2f2;
  border: 1px solid #ccc;
  cursor: pointer;
  padding: 8px;
  text-align: left;
}

th:hover {
  background-color: #ddd;
}

th.asc:after {
  content: ' \2191';
}

th.desc:after {
  content: ' \2193';
}
</style>

<script>
const headers = document.querySelectorAll('th');

headers.forEach(header => {
  header.addEventListener('click', () => {
    const sortingDirection = header.getAttribute('data-sort') || 'desc';

    headers.forEach(th => {
      th.classList.remove('asc', 'desc');
      th.removeAttribute('data-sort');
    });

    if(sortingDirection === 'desc') {
      header.classList.add('asc');
      header.setAttribute('data-sort', 'asc');
    } else {
      header.classList.add('desc');
      header.setAttribute('data-sort', 'desc');
    }

    const index = Array.prototype.indexOf.call(headers, header);
    sortByColumn(index, sortingDirection);
  });
});

function sortByColumn(columnIndex, direction) {
  const rows = Array.from(document.querySelectorAll('tbody tr'));
  const modifier = direction === 'asc' ? 1 : -1;
  const sorters = [];
  const a = rows[0].children[columnIndex].textContent.toLowerCase();

  if(isNaN(a)) {
    rows.forEach(row => {
      const value = row.children[columnIndex].textContent.toLowerCase();
      sorters.push([value, row]);
    });
  } else {
    rows.forEach(row => {
      const value = Number(row.children[columnIndex].textContent.toLowerCase());
      sorters.push([value, row]);
    });
  }

  const sortedRows = sorters.sort((a, b) => {
    if(a[0] < b[0]) {
      return -1 * modifier;
    } else if(a[0] > b[0]) {
      return 1 * modifier;
    } else {
      return 0;
    }
  }).map(item => {
    return item[1];
  });

  const tbody = document.querySelector('tbody');
  tbody.innerHTML = '';

  sortedRows.forEach(row => {
    tbody.appendChild(row);
  });
}
</script>

以上代码用于实现表格排序效果。点击表头中的任何一个单元格,都会按照单元格中的数据排序,根据数据类型进行不同的排序方式。可以通过箭头图标表示排序方向,并且可以切换升序和降序两种排序方式。利用JavaScript和CSS的特性可以为表格添加各种复杂的交互效果和样式风格。

CSS对表格进行样式美化

2023-05-12
CSS实现表格美化及优化

2023-05-12
风格化的表格CSS样式参考

2023-05-12
HTML表格CSS样式指南

HTML表格是前端开发中经常使用的重要元素,通过合理的CSS样式设置,能够提高表格的可读性、美观度以及用户体验。下面从多个方面对HTML表格的CSS样式做详细阐述。 一、表格基本样式 1、设置表格样式

2023-12-08
CSS 样式大写化

在前端开发领域中,我们经常需要对样式进行操作来实现界面的美化和优化用户体验。而对于样式的书写方式,不同开发者会有不同的风格。其中一种较为流行的风格是大写化CSS样式,即将所有CSS样式的名称和属性都转

2023-12-08
js行内样式怎么写,css行内样式怎么写

本文目录一览: 1、js的行内写法是什么 2、笔记:JS设置CSS样式的几种方式 3、JS里添加样式 4、JS如何设置表格行样式? js的行内写法是什么 就是把方法写在标签里面input type="

2023-12-08
cssjs钟表样式(js表格样式)

本文目录一览: 1、JS调用CSS样式表问题(功能鼠标经过文本域是文本域边框颜色发生变化『给出能够实现功能的源码』) 2、JS中改变CSS样式的问题 3、css怎么样制作钟表 4、如何用JS修改已加载

2023-12-08
表格样式

2023-05-12
CSS样式美化滑块控件

2023-05-18
优雅的表格样式设计 | CSS HTML表格类

2023-05-12
如何在CSS中实现页面样式的美化效果

2023-05-12
如何用CSS优化HTML表格

2023-05-12
使用CSS表格样式优化网页布局的技巧

2023-05-12
when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${item.id} [in template "article/detail/index.ftl" at line 48, column 106] ---- Java stack trace (for programmers): ---- freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...] at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134) at freemarker.core.EvalUtil.coerceModelToTextualCommon(EvalUtil.java:481) at freemarker.core.EvalUtil.coerceModelToStringOrMarkup(EvalUtil.java:401) at freemarker.core.EvalUtil.coerceModelToStringOrMarkup(EvalUtil.java:370) at freemarker.core.DollarVariable.calculateInterpolatedStringOrMarkup(DollarVariable.java:104) at freemarker.core.DollarVariable.accept(DollarVariable.java:63) at freemarker.core.Environment.visit(Environment.java:371) at freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:321) at freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:271) at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:244) at freemarker.core.Environment.visitIteratorBlock(Environment.java:645) at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108) at freemarker.core.IteratorBlock.accept(IteratorBlock.java:94) at freemarker.core.Environment.visit(Environment.java:335) at freemarker.core.Environment.visit(Environment.java:341) at freemarker.core.Environment.visit(Environment.java:341) at freemarker.core.Environment.process(Environment.java:314) at freemarker.template.Template.process(Template.java:383) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:332) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:266) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:220) at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:181) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:314) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1431) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1167) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1106) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at com.software.filter.HttpSpiderIdentifyFilter.doFilter(HttpSpiderIdentifyFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at java.base/java.lang.VirtualThread.run(VirtualThread.java:309)