最近被一个布局问题给难住了,枉我一向自称掌握最好的前端技能是 CSS,写完博客就得敷脸去

需求是实现一个自适应的正方形卡片,效果如下:

顺便(开个坑)写个系列,总结那些设计精妙的布局结构

本次页面的 HTML 结构如下:

<div class="row clearfix">
<div class="col fl">
<div class="card"></div>
</div>
<div class="col fl">
<div class="card"></div>
</div>
</div>

套路一、垂直 padding + 定位

在 CSS 中,margin 和 padding 的百分比数值总是相对于父元素的宽度来计算

利用这个特性,只要将 padding-top 或者 padding-bottom 设置为与 width 相同的百分比,再将 height 设为 0,最后通过定位实现自适应的正方形盒子

.col {
width: 25%;
height:;
padding-bottom: 25%;
position: relative;
}
.card {
position: absolute;
top:;
right:;
bottom:;
left:;
border: 1px solid #C0C0C0;
}

有很多文章都提到过,因为设置了 height: 0; 导致 max-height 无效

通常会使用伪类元素来解决这个问题,但同时也会有高度溢出的情况

如果采用我上面的 html 结构,只需要将 max-height 写到 .card 上,就不会有这个问题,也就用不着伪类元素了

套路二、新单位 vw

参考文章:http://www.zhangxinxu.com/wordpress/2012/09/new-viewport-relative-units-vw-vh-vm-vmin/

除了常用的 px,em,rem 之外,CSS 中还有很多单位,比如 pt,ch,vh,vmin 等

这里提到的单位 vw 是一个 相对于浏览器内部的可视区域(viewport)宽度的单位(敲黑板,不是父元素)

vw 等于 viewport 宽度的 1%,假设浏览器内部宽度为 1000px,那么 1vw = 10px

然后 CSS 代码就很简单了

.col {
width: 25%;
height:25vw;
}
.card {
width: 100%;
height: 100%;
border: 1px solid #C0C0C0;
}

套路三、用透明图片扩充内容

极不推荐!!

大学的时候见过这种布局,这种套路是黔驴技穷的表现,了解一下就行

在 HTML 结构中添加一个  <img> 标签

<div class="col fl">
<img src="" alt="正方形透明图片" width="100%"/>
<div class="card"></div>
</div>
.col {
width: 25%;
height:;
position: relative;
}
.card {
position: absolute;
top:;
right:;
bottom:;
left:;
border: 1px solid #C0C0C0;
}

最新文章

  1. C语言的内存分配
  2. TableView与delegate、dataResource
  3. JavaScript使用DeviceOne开发实战(三)仿微信应用
  4. C#----格式化字符串的操作
  5. java变量命名规则
  6. 第三百六十天 how can I 坚持
  7. mysql federated engine
  8. Android安全问题 抢先开机启动
  9. 将多个图片整合到一张图片中再用CSS 进行网页背景定位
  10. nginx : TCP代理和负载均衡的stream模块
  11. [spring+springmvc+mybatis实践]学生社团管理系统
  12. C#图解教程 第二十五章 其他主题
  13. CentOS 7.2 yum安装LAMP环境
  14. MongoDB 教程(二):MongoDB 简介
  15. Mybatis-Plus 实战完整学习笔记(十一)------条件构造器删除,修改,conditon
  16. angularjs学习第三天笔记(过滤器第二篇---filter过滤器及其自定义过滤器)
  17. cocos2d-x在IOS7下面文字显示异常的解决办法 CGBitmapContextCreate: unsupported parameter combination
  18. 解决insert语句插入时,需要写列值的问题
  19. 最近在研究FFmpeg编解码
  20. a、button、input点击获取焦点时出现蓝色边框,如何去掉

热门文章

  1. python3 中encode 和decode的使用方法。
  2. PDFBox 打印带背景的文件速度慢
  3. Wes7 剪裁方法
  4. NavMesh--导航网格寻路
  5. 让你的Javascript提升70%性能
  6. Session与Cookie的概念原理
  7. TRITON恶意软件简单分析与防护方案
  8. Python爬虫(二十一)_Selenium与PhantomJS
  9. 高版本号chrome安装flashplayer debuger后无法使用的问题
  10. 趋势科技PC-cillin2015,你来公測我发奖!