多层次浮动的“邪招”

先看图:

文件结构大致如下:图片位于义项1内,义项1.1等为义项1同级元素。按钮(假定为btn)为js创建的。
需要达成的目标:

  1. 按钮呈现右浮动状态,但不会侵入下一义项(标号2处);
  2. 图片呈现右浮动状态,且多条释义之间不会出现空白。

仅达成目标1很简单,只需要在按钮后面加一个清除浮动的元素(假定为clearfix)即可。可以用js创建,并且设定样式为{display:block; clear:both; height:0}
但如此设定,义项1.1会出现在图片之下而非图片左侧——这是由于义项1中的按钮清除浮动,会导致清除浮动的块状元素clearfix位于图片下方。

我整了个邪招:
步骤1:在按钮之前插入一个元素(假定为btn_room),通过js设定其宽、高等于按钮的宽、高,设定display为inline-block,从而占位——如果浮动按钮换行,则btn_room也会换行;
步骤2:如果btn_room距离window左边界大于其所在义项div距离window左边界,说明按钮btn没有换行,此时设定btn_room的display为none;
步骤3:监听window的resize事件,一旦发生窗口大小变化,则设定btn_room为inline-display属性、并重复步骤2。

以上情况只有在极端条件——btn所在义项的宽度小于btn宽度的2倍,才会出现btn前有空行的情况。

话说,大神们可有更好的办法?

1 个赞

最安全简单的方法,就是

把这些按钮放在 它本来就在的那一行的末端或者前端,(成为文字一部分,只是加了按钮功能的文字。而不是漂浮在最右边的特殊的梗)

这需要把本行(一般来说是previous sibling 或者直接previous element) 从div 换成span,从block变inline,按钮群要么是inline (末端)要么是 float:left (前端)

换言之,最安全的地方就是 它自己所在的位置 的最前最后,而不是整个荧幕的边框上和其他东西冲突。

大道至简,有必要,给界面弄太多的分层吗?如果是手机的话,视觉上分层太多,有限的屏幕,弄得跟密集恐惧症似的,如果是电脑屏幕多少界面还能大点儿,分层弄太多,一层一个视觉过滤代码的话,代码膨胀起来维护也比较闹心。这种事儿,还是仓库里看看有啥现成的合适的框架吧,没必要自己搭建轮子。