探码开发文档
  • 探码科技-发开日志
  • 代码规范
  • 前端
    • Bootstrap 模板
      • 图表类
      • Profile 类页面
    • JS Chart图表
    • 图片库
    • Icon图标库
    • Css3
      • 字体+背景混合搭配
      • tranform-origin + transform
      • flex
        • 布局左边自适应,右边固定宽度
    • 用Sass颜色函数控制颜色
    • Draggable组件库
  • Javascript
  • Ruby
    • Ruby on Rails
      • 数据库类
      • 日志类
      • 价格字段的单位转换
      • 部署
      • 根据设备类型自动渲染页面
      • 路由
    • Gems
    • Automating your API with JSON Schema
    • 深度冻结变量 Deep Freeze
    • 搭建私有Gem仓库
    • YAML语法
  • 数据库
    • PostgreSQL
      • 基础知识
        • PostgreSQL中插入数据
        • PostgreSQL中更新数据
        • PostgreSQL中删除数据
      • 数据库管理
      • select jsonb
    • PostgreSQL XL
      • Data Definition
      • 查询技巧
  • Docker
    • Docker日志收集最佳实践
    • Harbor搭建私有镜像服务
  • Kubernetes
    • 参考资源
    • Kubeadm方式安装Kubernetes
    • Rancher方式安装Kubernetes
      • RBAC集成
    • rke方式安装Kubernetes
    • RBAC用户管理
    • Traefik配置
    • 创建etcd集群
    • Kubeapps
    • 工具
    • 安装Helm
    • 亲和度配置
  • 文件系统
    • GlusterFS
  • 日志管理
    • Fluentd
  • VirtualBox
  • 工具软件
    • Alfred
    • 代码版本控制工具
    • Atom
    • Bash Shell
    • Vim
    • fzf(Fuzzy Finder)
    • Gitlab
  • Ubuntu
    • 安装 VPN服务
    • 安装DNSMasq
    • Keepalived
    • OpenSSL 使用技巧
  • Git
  • Nginx
    • 自动更新SSL证书
    • 使用stream模块实现负载均衡
  • 机器学习
Powered by GitBook
On this page
  • flex 左边自适应,右边固定宽度
  • 项目中踩坑集锦
  1. 前端
  2. Css3
  3. flex

布局左边自适应,右边固定宽度

  1. flex 左边自适应,右边固定宽度

  2. 项目中踩坑集锦

简要介绍: 容器(flex container)和 项目(flex item)

flex 左边自适应,右边固定宽度

// html
<div class="demo">
  <div class="left">
  </div>
  <div class="right">
  </div>
</div>

// style
.demo {
  border: 3px solid red;
  display: flex;
  align-items: stretch;

  // 左右空白比为 0:1,所以右边会分配到剩余空白的所有空间
  .left {
    background: #F7E8B4;

    // 宽度自动填充
    width: auto;

    // 有多余的项目空间,分配
    flex-grow: 1;
    height: 200px;
  }

  .right {
    background: #B4D3F7;

    // 设置宽度
    width: 200px;
    min-width: 200px;
    max-width: 200px;

    // 有多余的项目空间,不分配
    flex-grow: 0;
  }
}

效果图如下:

项目中踩坑集锦

接着以上的做法,应用到实际的项目需求中时,发生了下面👇意料之外的情况:

需求: 左侧包含的内容有标题、描述(超出并显示省略号),右侧是一张固定宽高的图片。

根据需求建立如下图:

现在就要解决的是描述(超出并显示省略号) :

.left {
  background: #F7E8B4;

  // 宽度自动填充
  width: auto;

  // 有多余的项目空间,分配
  flex-grow: 1;
  height: 200px;
  
  // 超出并显示省略号
  p {
    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;
  }
}

如下图:

可见左侧的宽度已经将右侧挤出可视宽度区域,这不是我们想要的。

产生的原因:

返回我们刚刚写的css,我们将左侧宽度设置为自适应 width: auto; p 标签样式中(超出并显示省略号)还有个宽度限制的样式没有设置,所以它会继承父级宽度,所以才会出现上图这种情况。

解决方法:

限制父级宽度并且父级宽度做到剩余空间自动分配。这句话搭配起来的意思就是left盒子 width: 0; flex-grow: 1; 将left盒子的宽度设置为 0 并将多余的空间全部分配给 left盒子, 这样 p标签的父级 就不会继承 left盒子样式中width宽度,继承的是 flex-grow 自动分配的宽度;这样需求中的问题也就解决了

PreviousflexNext用Sass颜色函数控制颜色

Last updated 6 years ago