前端的同学们来一起开动脑筋

2015-11-06 20:09:00 +08:00
 sneezry
今天公司有一个 task ,在展示文章列表时,如果某个文章有缩略图,那么 summary 环绕缩略图排布。这是一个非常简单的问题, float:left 完美解决。但是,难点是在 summary 后面要跟着一行 post meta ,显示作者、评论数等等,没有缩略图时, post meta 直接跟着 summary 就可以了,但是,有缩略图时就会略显繁琐,分两种情况:

1 、 summary 完全包围的缩略图, post meta 还是紧跟着 summary

2 、 summary 没有完全包围缩略图, post meta 单独一行和图片底部对齐

示意图如下:



大家开动脑筋,不允许用 js ,看看如何实现。

今天下班前我憋出了一个 hack 方法,一会把整个过程写在博客里分享给大家。
4125 次点击
所在节点    程序员
53 条回复
sneezry
2015-11-06 21:13:44 +08:00
@jarlyyn 哎,审题啊同学,不审题肯定给不出正确答案的嘛!图片的高度不固定啊不固定,肿么设置 min-height 啊,这个 min-height 你要给多少哇~
jarlyyn
2015-11-06 21:18:30 +08:00
@sneezry

设计给出这种图能给我骂回去。这种设计不限定图片尺寸?

变高么也简单, post meta 前 clear both,然后 margin-top:-1em 呗。
sneezry
2015-11-06 21:23:04 +08:00
@jarlyyn 因为呢,这个是一个 wp 的 theme ,不能 hard code ,虽然目前图片的宽度都是一样的,但是如果有一天我们要改图片的 width ,那么整个 theme 就都挂了,这种 code 肯定是无法通过我司 code review 的~
sneezry
2015-11-06 21:28:07 +08:00
@Bijiabo 非常赞,但是有个问题,就是 class 用了 hard code ,这样是无法做到自适应的。
kfll
2015-11-06 21:33:54 +08:00
jarlyyn
2015-11-06 21:37:51 +08:00
借用某人数据

https://jsfiddle.net/jarlyyn/vy8v2ef9/

大概这些样式

.item{margin-bottom:2em}
img{float:left}
.text{padding-bottom:1em}
.text:after{display:block;content:'';clear:both}
.meta{color:blue;margin-top:-1em;}
FragmentLs
2015-11-06 21:38:16 +08:00
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
img {
float: left;
}
.text::after{
content: ".";
visibility: hidden;
display: block;
clear: both;
height: 0;
font-size: 0;
}
</style>
</head>
<body>
<img src="https://lh4.googleusercontent.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAAAAAA/OixOH_h84Po/s0-c-k-no-ns/photo.jpg" width="400px"/>
<div class="text">
This is summary. This is summary. This is summary.<br />
This is summary. This is summary. This is summary.<br />
This is summary. This is summary. This is summary.<br />
This is summary. This is summary. This is summary.<br />
This is summary. This is summary. This is summary.<br />
</div>
<div class="meta">
This is meta. This is meta. This is meta.
</div>
</body>
</html>
Bijiabo
2015-11-06 21:41:57 +08:00
给 25 楼跪了,原来这么写...
FragmentLs
2015-11-06 21:43:06 +08:00
和 25L 一样,几年前在 Jeffrey Way 的视频里学的...
jarlyyn
2015-11-06 21:45:38 +08:00
错了,样式这样

.item{margin-bottom:2em}
img{float:left}
.text{padding-bottom:1em}
.img:after{display:block;content:'';clear:both}
.meta{color:blue;margin-top:-1em;}

https://jsfiddle.net/jarlyyn/vy8v2ef9/
sneezry
2015-11-06 21:47:27 +08:00
@kfll 赞!不过不太明白,为什么 :after 伪类没有清除后面 meta 的浮动呢?
jarlyyn
2015-11-06 21:48:16 +08:00
@FragmentLs

我这里看你这个不行, post meta 分行了。没对齐。

我想要实现楼主的想法,怎么都要 margin-top:-1em 的吧
jarlyyn
2015-11-06 21:49:51 +08:00
@sneezry

meta 啥时候浮动了,正常文本流啊
jarlyyn
2015-11-06 21:53:34 +08:00
jarlyyn
2015-11-06 21:54:12 +08:00
我觉得楼主就是对负 margin 不熟……
sneezry
2015-11-06 21:55:23 +08:00
@jarlyyn 同学,概念搞混了,正常文本流指 position:static 的元素,对应于绝对定位、相对定位和固定定位。浮动是指环绕块级元素排列, meta 在内容少的时候就是环绕图像排布的, 25L 的方法中, meta 左侧的缩减就是图像 float 属性导致的,但是我不太明白前面元素的 after 伪类明明已经通过 clear:both 清除了两端的浮动,为什么 meta 还是会左侧环绕。
sneezry
2015-11-06 21:56:23 +08:00
@jarlyyn 不要乱扣帽子,我在我的书里没少用负的 margin :

http://item.jd.com/11545545.html
jarlyyn
2015-11-06 22:00:21 +08:00
@sneezry
1.正常文本流指的是 meta,meta 不是正常文本流么?

2.环绕是因为图片设置了浮动,文字要正常文本流才能环绕啊

3.clear 是清除了 'img::after'这个在 Html 中没有的元素的浮动,和其他元素都没有关系啊,和加入一个<div style='clear:both'></div>一样啊。加入 clear 是为了让父级的框有正常的高度而已

虽然我有两年年没搞过前端的东西了,但应该还不至于概念搞混吧……
shiye515
2015-11-06 22:00:57 +08:00
@sox 给让一只脚点赞
jarlyyn
2015-11-06 22:01:37 +08:00
@sneezry

这个问题一看就是负 margin 的问题吧?

难道还有其他复杂的地方么……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/234257

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX