CSS躬行记(11)——管理后台响应式改造

简介: CSS躬行记(11)——管理后台响应式改造

 为了提升业务人员操作管理后台的体验,花了点时间进行响应式的改造,紧急情况时,掏出手机就能工作。


  利用CSS3的媒体查询,就能根据不同屏幕的尺寸采用不同的样式来渲染,目前使用的移动端屏幕阈值为750px。


  为了便于管理,基于Less的语法,声明了一个常量,专门记录屏幕尺寸。

@mobile-screen: ~"(max-width:750px)";


  我们当前使用的管理后台基于UmiJS3.XAnt Design 3.X


一、结构改造


  首先是管理后台整体结构的改造,包括左边的菜单栏,右边的快捷按钮,登录信息等。

  


1)菜单栏


  左边的菜单在手机界面还是蛮占地方的,默认情况下需要将其隐藏,还有那张Logo图,也需要隐藏,最大限度的将区域留给菜单。

  在下面的代码中,当URL的路径发生变化时,判断屏幕尺寸,如果当前是显示状态,那么就更新成隐藏状态。


// 响应式处理
const mobileHandle = () => {
  // 屏幕尺寸小于750的就认为是移动设备的屏幕
  if (window.screen.width <= 750 && !siderFold) {
    dispatch({
      type: "app/switchSider"
    });
  }
};
// 当路径变化时,隐藏菜单栏
useEffect(() => {
  mobileHandle();
}, [location.pathname]);


  在Chrome的控制台,切换成手机屏幕时,右半部分会出现挤压的问题。


  

  可以将右半部分设置为绝对定位,脱离正常流,再向左偏移菜单栏的宽度就能避免内容被挤压。

.main {
  width: 100%;
  position: absolute;
  left: 250px;
}


2)快捷按钮


  快捷按钮有3个,PC界面这块的高度是固定的,并且是横向布局。移动端的屏幕比较窄,更适合纵向布局。

  并且为了节约空间,登录后的昵称,也隐藏了,免得破坏布局。


  


3)全局样式

  这些按钮默认是没有上下间距的,需要手动添加,例如修改Ant Design 的下拉框、搜索框、日期选择框的下边距,存储在 global.css 文件中。

.ant-select,
.ant-input-search,
.ant-calendar-picker {
  margin-bottom: 5px;
}


  有一点需要注意,不能将上述这些样式写在 less 文件内,因为在JavaScript文件中引用(CSS in JS)时,默认会带各种随机后缀。

@media @mobile-screen {
  .ant-select, .ant-input-search {
    margin-bottom: 5px;
  }
}
/* 编译结果 */
@media (max-width: 750px) {
  .ant-select___1JpXW,
  .ant-input-search___WeNgK {
    margin-bottom: 5px;
  }
}


  全局声明需要权衡,当涉及的页面很多时,也许某条样式会破坏某处的结构。


二、页面改造


  在页面中使用了大量的组件,包括自定义和第三方的,默认情况下,都不支持响应式,需要进行手动改造。


1)表格


  管理后台包含很多表格,这些表格都会包含很多列,直接平铺会将页面撑开,出现左右滚动条。

  在观察Ant Design表格滚动的源码后,发现了一个 max-content 关键字,表示宽度就是内容的长度。

.ant-table-body,      /* 表格 */
.ant-tabs-tabpane {   /* 标签栏切换内容 */
  overflow-x: scroll;
  width: 100%;
  -webkit-overflow-scrolling: touch;
}
.ant-table-body table,
.ant-tabs-tabpane table {
  width: max-content;
}


  在表格的父级元素中声明横向滚动,就能避免布局被破坏了。


  

2)内联样式


  在之前的页面开发中,很多组件的宽度都是以内联的方式声明的。当时的确很方便,但是现在改造给我制造了障碍。


  如果直接在CSS文件中声明,那么特殊性不会比内联的高,也就不会生效,所以得用另一种方式。


  后面就想用脚本来做样式的更新,脚本比较好写。但是需要考虑一种情况。

  那就是页面初始化时不存在的DOM元素,需要点击或其他交互后才能被添加进来。

  需要监听DOM的变化,自然就想到了MutationObserver,在下面的代码中会监听 body 元素的直系后代的DOM变化。


useEffect(() => {
  const isMobile = window.screen.width <= 750;
  // 选择器,数字框,文本框,卡片
  const selector = ".ant-input-number[style],.ant-input[style],.ant-calendar-picker[style],.ant-card[style],.ant-input[style]";
  if (!isMobile) return;
  const callback = function (mutationsList, observer) {
    // 为了响应式,将style中的宽度修改成 100%
    const nodes = document.querySelectorAll(selector);
    [...nodes].forEach((item) => {
      if (item.style.width && item.style.width != "100%") {
        item.style.width = "100%";
      }
    });
  };
  // 观察器的配置,直接子节点的更改
  const config = { childList: true };
  const observer = new MutationObserver(callback);
  // 观察目标节点
  observer.observe(document.body, config);
}, []);


3)弹框


  在PC界面中,弹框中的内容会比较多,高度也会被撑开。

  当在移动端显示时,会超过屏幕的底部,无法看到弹框中的内容。

  可以手动的声明弹框的高度,利用calc()函数,以及vh单位,100vh就是视口高度的100%。


height: calc(100vh - 100px)
相关文章
|
7月前
|
编解码 前端开发 JavaScript
|
1月前
|
前端开发
基于CSS3+Bootstrap实现的侧边栏后台菜单源码
CSS3+Bootstrap实现的侧边栏后台菜单特效源码是一段基于Bootstrap和图标库制作的侧边栏菜单后台管理页面效果代码,简洁大方、易于管理,是一段非常不错的后台菜单栏效果,欢迎对此段代码感兴趣的朋友前来下载。
96 54
|
6天前
|
JavaScript
jquery和CSS3响应式轮播图插件jcSlider
jcSlider是一款jquery和CSS3响应式轮播图插件。jcSlider使用CSS3过渡动画,它可以和animate.css完美结合,生成60多种轮播图过渡动画效果。
|
5月前
|
前端开发 UED
使用HTML和CSS创建响应式表格
在网页设计中,表格是一种组织和展示数据的有效方式。本文档将指导你如何使用HTML和CSS来创建一个既美观又响应式的表格,以便在不同设备和屏幕尺寸上都能良好显示。我们将涵盖基础的HTML表格结构,样式美化以及如何实现响应式布局,使得表格内容在小屏设备上也能清晰阅读
212 0
|
7月前
|
UED 开发者 容器
【专栏】Flexbox是CSS3的全新布局模式,提供灵活响应式的页面设计
【4月更文挑战第27天】Flexbox是CSS3的全新布局模式,提供灵活响应式的页面设计。其特点包括灵活性、响应式和易理解,通过主轴和交叉轴控制元素排列对齐。核心概念有容器和项目,常用于导航栏、卡片布局、响应式设计、表格和表单布局。关键属性如flex-direction定义主轴方向,justify-content和align-items控制对齐,flex属性调整项目伸缩,order改变排序。在实践中,要关注响应式、代码维护和浏览器兼容性,以优化布局和用户体验。
179 4
|
4月前
|
编解码 前端开发 开发者
【前端设计达人必备】揭秘CSS尺寸单位的魔力:从基础到实战,打造灵动响应式网页!
【8月更文挑战第26天】本文深入探讨了CSS中常用的尺寸单位,包括像素(px)、百分比(%)、视窗单位(vw/vh/vmin/vmax)、可伸缩相对单位(em/rem)以及Flexbox和Grid中的fr单位。通过具体案例展示了每种单位的特点及其适用场景。像素适用于固定尺寸元素;百分比和em/rem利于构建响应式布局;视窗单位适合全屏设计;fr单位则能有效管理复杂网格布局的空间分配。掌握这些单位有助于开发者设计出更加灵活、高质量的网页布局。
63 4
|
4月前
|
前端开发 JavaScript
HTML+CSS新技能:快速打造响应式步骤条,秒变网页设计达人!
HTML+CSS新技能:快速打造响应式步骤条,秒变网页设计达人!
|
5月前
|
编解码 前端开发 容器
CSS Flex布局实战案例:构建响应式卡片组件
【7月更文挑战第17天】通过上述步骤,我们成功地使用CSS Flex布局构建了一个响应式的卡片组件。Flexbox不仅简化了布局代码,还让我们能够轻松实现复杂的布局效果,如响应式设计。在实战中,掌握Flexbox将大大提高前端开发的效率和网页布局的质量。希望这个案例能够帮助你更好地理解和应用Flexbox布局。
|
4月前
|
编解码 前端开发 容器
CSS弹性布局:打造响应式与灵活的网页设计
CSS弹性布局:打造响应式与灵活的网页设计
102 0
|
7月前
|
Java BI 数据库
基于SSM框架实现面向小微企业的简历管理系统企业简历管理系统(分前后台spring+springmvc+mybatis+maven+jsp+css+echarts)
基于SSM框架实现面向小微企业的简历管理系统企业简历管理系统(分前后台spring+springmvc+mybatis+maven+jsp+css+echarts)
100 0