css - CSS 组件和响应式耦合 - 最佳实践?
问题描述
假设我创建了一个像表格一样的组件,我希望在不同的页面中重复使用它。表格中的内容和列数会因页面而异,但外观应该相同。
.my-table {
background-color: ... etc
color: ... etc
}
当使这个组件具有响应性时——每个页面是否应该有它自己的一组媒体查询来改变这个组件的外观,或者组件本身是否应该定义查询?
IE。在移动设备上查看时,我可能想隐藏此表的第 3 列和第 5 列,但在另一个页面上可能只有 3 列,我不希望在该页面上隐藏第 3 列。在这种情况下使用什么更好的做法?响应式逻辑是否应该与组件样式分离?
另一个例子——我读过的大多数 CSS 指南都建议这样做:
.layout-columns-2 {
float: left;
width: 50%;
}
.layout-columns-4 {
float: left;
width: 25%;
}
每当您需要列并排浮动时,您可以在布局上重复使用它。但是,当您尝试应用响应式规则时,您又遇到了类似的问题。
例如在一页上,当宽度为 600px 时,您想打破特定 div 的浮动,以便垂直堆叠列。但在页面的另一部分,您希望浮动在 800 像素处中断。最好的方法是什么?
解决方案
我建议使用一些 table mixin 创建一个Sass 部分,可以根据需要应用。这将使您可以将表“模块”与实际表分离。解耦通常是一件好事,因为它可以让您更轻松、更一致地添加和更改样式。
由于您希望您的断点因表而异,因此默认情况下,我会将表样式保留为“移动优先”,并根据需要逐个自定义它们。
_tables.scss:
table {
// Global, mobile-first styles go here
}
@mixin columns-2() {
td {
float: left;
width: 50%;
}
}
@mixin columns-4() {
td {
float: left;
width: 25%;
}
}
// Function to return a max breakpoint (1px less)
@function max-break($size) {
@return $size - .0625em;
}
使用您的部分,您可以将您的 mixins 应用到任何特定的表...
特殊页面.scss:
@import 'tables';
.my-table {
// Hide columns 2/4 below 800px
@media (max-width: max-break(50em)) {
td:nth-child(2),
td:nth-child(4) {
display: none;
}
}
// Use 2 columns at 600px
@media (min-width: 37.5em) {
@include columns-2();
}
// Use 4 columns at 600px
@media (min-width: 50em) {
@include columns-4();
}
}
推荐阅读
- database - 如何使用查询匹配 AND 而不是逗号?
- html - 为什么同一个可滚动列表(Chrome)需要 3 个合成层?
- django - 我可以在 django-rest 中使用 google、facebook 等 oauth 吗?
- xml - 基于不同行项目的分组 xsl1.0
- python - Keras - 数据集的数据生成器太大而无法放入内存
- javascript - 如何检查名称是否已在此列表中?
- android - Android 许可证状态未知且无法解决
- java - 从 Lombok / @slf4j / Spring Boot 获取日志严重性统计信息
- flutter - 通过 Image.memory 显示 base64(数据类型字符串)
- regex - VS Code - 查找和替换 - 用 h2 替换所有 div,同时保留内部内容