热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CSS3如何使用column多栏布局实现水平滑页翻页交互

这篇文章将为大家详细讲解有关CSS3如何使用column多栏布局实现水平滑页翻页交互,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这

这篇文章将为大家详细讲解有关CSS3如何使用column多栏布局实现水平滑页翻页交互,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一、CSS3 column多栏布局

CSS3 column多栏布局是支持比较早的CSS3布局方式,目前IE10+以及其他所有现代浏览器都支持,IE浏览器不需要私有前缀,FireFox和Chrome虽然现在也不需要,但是,考虑到移动端以及可能一些用户浏览器升级不及时的现状,因此,-webkit-以及-moz-前缀目前还不能省略。

CSS3如何使用column多栏布局实现水平滑页翻页交互

一般来讲,常用的属性又下面几个:

  1. column-width: 每栏的宽度;

  2. column-count: 最理想的分栏数目,注意这里的措辞,是“理想的”,这个词很微妙的,大家可以多多体会下;

  3. column-gap: 栏目之间的水平间隙;

  4. column-rule: 分割线,形式规则什么的等同于bordercolumn-rule实际上是一个缩写,还有column-rule-widthcolumn-rule-stylecolumn-rule-color之类,就跟border属性一个套路;

  5. column-fill: 效果不明,不算常用。默认值是balance,表示对每栏进行协调。还可以使用值auto,表示每一栏按顺序填充。我是没搞清楚有什么区别。

其中,还有个缩写属性,名为columns,实际上是column-widthcolumn-count的缩写:

columns: 120px;  /* column-width: 120px; column-count: auto */columns: auto 120px; /* column-width: 120px; column-count: auto */columns: 2;   /* column-width: auto; column-count: 2 */columns: 2 auto;  /* column-width: auto; column-count: 2 */columns: auto;  /* column-width: auto; column-count: auto */columns: auto auto; /* column-width: auto; column-count: auto */

如果翻看一些文章或者demo示意,基本上都是下面这种套路,容器指定一个大大的宽度,然后通过column-count属性设定分为了几栏,比方说,如果是:

column-count:4

则会是按下图所示的样子(不同浏览器细节上会有差异):

CSS3如何使用column多栏布局实现水平滑页翻页交互

如果是:

column-count:3

则:
CSS3如何使用column多栏布局实现水平滑页翻页交互

如果是:

column-count:2

则:
CSS3如何使用column多栏布局实现水平滑页翻页交互

看上去好像很厉害,而且离理解上难度并不高,然而,这么多年下来,我几乎就没有看到任何项目中有类似的使用。

column多栏布局和flex弹性布局基本上是同一时间段出现的,从兼容性来讲,column多栏布局一直以来更稳定更兼容,而flex弹性布局前前后后历经多个版本,直至现在有些移动设备支持依然不好,但是两者的命运却截然相反,column多栏布局鲜有人问津,而flex弹性布局则风生水起。面试的时候,就算面试者并未在实际项目中使用过flex弹性布局,也会时不时扯到这东西上来,好像不提flex布局就跟时代脱节一样,其实完全没有必要,每个CSS属性都有它的潜力和价值所在,挖掘其内在价值而不是单纯的被外在的那层表现困于庐山才是真正想要看到的。

回到这里,如果我们仅仅看到上面示意的这种常规表现,必然会觉得多栏布局似乎好像应用场景不是那么广泛,因为只有类似报刊杂志这种排版才会需要多栏布局,在web中,宽度往往是有限的,高度是无限的,所谓多栏布局,一般而言,就是指的分割宽度,但是想想看,宽度本来就不够,何来场景再让你去分呢?综合这些因素导致多栏布局闲有人问津。

但是如果我们挖掘多栏布局的潜力,会发现其实其能够实现的布局或者效果要比表面看上去的多。

我们这里书页的水平滑动浏览效果就是使用的CSS3 column属性实现的。

二、CSS3 column有趣的空间使用特性及水平滑动浏览效果实现

  1. margin也在空间计算之列

    这是什么意思呢?比方说上面4栏的例子,如果我们把文字内容变少,会发现,可能就会这样,Chrome和IE浏览器下都是如此,看上去就好像只有3列显示了:
    CSS3如何使用column多栏布局实现水平滑页翻页交互

    实际上并不是只显示了三列,而是因为示意的HTML结构如下:

    
        

    文字...

默认上下有1emmargin间距的,于是乎,我们看上去好像是第四栏空缺,实际上被

元素的margin-bottom给占据了,如果我们使用下面的CSS重置掉

标签的margin值,会发现,如预期的4列显示了:

.box p {
    margin: 0;
}

CSS3如何使用column多栏布局实现水平滑页翻页交互

  • column布局高度也是重要限制

    上面几个column-count示意都是定了个宽度600px,高度是默认的auto,因此,分栏的表现都很乖巧,反正高度是无限的,无论你设置多少栏,我都可以通过调整高度来实现。

    但是,如果我们高度也设定了固定的值,例如高度60px,则此时很多有意思的事情就会发生了。

    如果说仅仅只是指定了column-count,至少在容器元素的可视尺寸范围内,还是设定的分栏数目,例如column-count:3,虽然视觉上远不止3栏,但是容器可视尺寸范围就是3栏,如下截图示意:

    CSS3如何使用column多栏布局实现水平滑页翻页交互

  • column-width会让column-count打酱油

    这是什么意思呢?比方说下面的CSS:

    .col4 {
        width: 600px;
        column-count: 4;
        column-width: 200px;
    }

    显然这里有矛盾之处,每栏宽度200px,总共要4栏,就算不考虑每栏之间的间隙,也至少需要800px的宽度,但是,我们容器设定的宽度只有600px,怎么办呢?

    那即是column-count忽略无效打酱油,不要觉得不合理,也不要抱不平说为什么牺牲的是column-count,而不是其他属性?那是因为column-count天生注定就是要牺牲的命,因为其语义解释就是“最理想的分栏数目”,所谓最理想,就是你该牺牲的时候就要牺牲。

    实际上这里最终的每栏每列宽度表现并不是200px,如果我没算错的话,在没有样式重置的情况下,应该是292px

  • 高宽同时限制可以实现完美分页

    如下CSS代码:

    .example {
        height: 120px;
        width: 100px;
        column-width: 100px;
    }

    如果我们把100px*120px的这个名为.example的小容器看成是一页内容的话,则此时,我们容器中的所有内容,就被完美的分成了一页一页水平呈现的内容,如下截图:

    CSS3如何使用column多栏布局实现水平滑页翻页交互

    这里就是我们书籍水平滑动浏览的关键所在,此时,如果我们给父元素有个如下的overflow限制:

    .father {
      width: 100px;
      overflow: hidden;
    }

    此时就形成了一个永远只会显示一页宽度的视窗,然后下面的事情就简单了,我们通过JS一些一些touch相关的事件,控制我们的.example元素translateX位移,就可以实现一开始展示的水平滑屏浏览小说内容的效果了。

    完美撒花!

    CSS3如何使用column多栏布局实现水平滑页翻页交互

  • 上面第4点“高宽完美限制”即是起点中文网移动web app阅读页水平阅读布局实现原理,差别就是宽高尺寸不一样,不知赘述。这里顺便提一下开发时候的番外小故事:

    原本滑页是通过改变容器原生的scrollLeft值来实现的,而不是translateX位移,好处在于不要担心边界判断的问题。但是后来发现有两点不足:

    1. 个别Android设备下,滑动不是很流畅;
    2. 这个不足是最为致命的不足,那就是在chrome55之后版本CSS3 column布局出现了非常严重的bug, 容器overflow:hidden/auto之后,后面第3栏开始往后的分栏会直接无法显示;

    于是,最后选择了使用translateX进行位移。

    还别说,真有不少用户使用水平浏览模式,或许是跟原生APP交互形式相一致的原因吧。

    关于“CSS3如何使用column多栏布局实现水平滑页翻页交互”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。


    推荐阅读
    • 关于extjs开发实战pdf的信息
      本文目录一览:1、extjs实用开发指南2、本 ... [详细]
    • mui框架offcanvas侧滑超出部分隐藏无法滚动如何解决
      web前端|js教程off-canvas,部分,超出web前端-js教程mui框架中off-canvas侧滑的一个缺点就是无法出现滚动条,因为它主要用途是设置类似于qq界面的那种格 ... [详细]
    • html结构 ... [详细]
    • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
      本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
    • 本文介绍了Cocos2dx学习笔记中的更新函数scheduleUpdate、进度计时器CCProgressTo和滚动视图CCScrollView的用法。详细介绍了scheduleUpdate函数的作用和使用方法,以及schedule函数的区别。同时,还提供了相关的代码示例。 ... [详细]
    • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
      本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
    • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
    • Tkinter Frame容器grid布局并使用Scrollbar滚动原理
      本文介绍了如何使用Tkinter实现Frame容器的grid布局,并通过Scrollbar实现滚动效果。通过将Canvas作为父容器,使用滚动Canvas来滚动Frame,实现了在Frame中添加多个按钮,并通过Scrollbar进行滚动。同时,还介绍了更新Frame大小和绑定滚动按钮的方法,以及配置Scrollbar的相关参数。 ... [详细]
    •  项目地址https:github.comffmydreamWiCar界面做的很难看,美工方面实在不在行。重点是按钮触摸事件的处理,这里搬了RepeatListener项目代码,例 ... [详细]
    • 本文由编程笔记#小编为大家整理,主要介绍了css回到顶部按钮相关的知识,希望对你有一定的参考价值。 ... [详细]
    • 1.webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用(1) ... [详细]
    • 1使用了下拉刷新后<divclass"mui-scroll"><div>这里面的内容,所有的a标签都的href都无法正常跳转,div,spa ... [详细]
    • 震惊,正儿八经的网页居然在手机上这样显示!
      本篇文章所描述的,是网页移动端开发中的一些概念,以及一些常用标签~一、像素基本知识设备物理像素:设备上的一个像素点设备无关像素࿱ ... [详细]
    • DOM事件大全
      1.事件:js与html的交互就是通过事件的,观察者模式2.事件流:从页面中接收事件的顺序IE::事件冒泡流,事件冒泡,事件从最具体的元素接收,然后逐级向上传播,主流浏览器都支持N ... [详细]
    • h5页面在iOS上的问题解决
      1、ios移动端软键盘收起后,页面内容被顶上去,不下滑回原处代码如下: $(function(){$('input,textarea').on('bl ... [详细]
    author-avatar
    龙欣23
    这个家伙很懒,什么也没留下!
    Tags | 热门标签
    RankList | 热门文章
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有