过去的几年中,CSS布局以及我们开发网站前端的方式发生了巨大变化。现在,在CSS用于开发站点的布局方法方面,我们有了真正的选择,这意味着我们经常需要选择采用哪种方法。在本文中,我将通过解释如何使用它们以及如何使用它们的基础知识,介绍您可以使用的各种布局方法。
通过确保文档以结构良好的方式开始,您可以利用正常的流程。想象一下,如果不是浏览器这种正常流动的概念,而是浏览器将所有盒子堆叠在彼此的角上,直到创建布局。那意味着您将必须将所有单个内容放置在页面上。而是,浏览器以立即可读的方式显示我们的内容。
如果您的CSS无法加载,则用户仍然可以阅读内容,而完全不获取CSS的用户(例如,使用屏幕阅读器的用户)将按照文档中的顺序将内容交付给他们。从可访问性的角度来看,使HTML文档井井有条地开始生活至关重要。但是,这也将使您作为Web开发人员的生活更加轻松。如果您的内容符合用户希望阅读的顺序,则无需对布局进行大量更改即可将其放置在正确的位置。使用更新的布局方法,您可能会惊讶于您要做的事很少。
因此,在考虑布局之前,请考虑文档结构和您希望从文档顶部到底部阅读内容的顺序。
有了结构合理的文档后,我们需要决定如何采用该文档并将其转换为所需的布局。对于我们文档的某些部分,这将涉及偏离正常流程。我们有整套的布局方法可供使用。我们将要研究的第一种方法是float,因为浮点数很好地说明了从正常流中取出元素的含义。
浮动框用于将框向左或向右移动,以使内容围绕它显示。
为了浮动项目,请使用CSS属性float和一个left或right值。float的默认值为none。
值得注意的是,当您浮动一个项目并用文本环绕时,会缩短该内容的行框。如果您浮动某个项目,并且以下包含您的文本的框应用了背景色,则可以看到该背景色将在该浮动项下运行。
在缩短行框以在浮动文本和自动换行文本之间留出空间时,必须在浮动项目上设置边距。文本上的边距只是将文本从容器的边缘移入。对于向左浮动的图像,假设您希望图像与容器的顶部和左侧齐平,则应在右侧和底部添加边距。
内容的背景色在浮动下运行
浮动元素后,以下所有元素将环绕该浮动元素,直到它们包裹在下面,并且正常流程继续进行。如果要防止这种情况,则需要清除浮点数。
在要在浮动之后开始显示的元素上,添加clear值为left 的属性以指示清除向左浮动的项目,向右以清除向右浮动的项目,或同时清除所有浮动。
如果希望元素在浮点后开始,则上述方法有效。如果您发现自己的状态是盒子里有一个漂浮的物品,并且旁边有一些文字,那将无济于事。如果文本比浮动项目短,则将在内容下方绘制该框,而忽略浮动项目。正如我们已经了解的那样,浮点数会缩短线框,其余的布局将继续正常流动。
为了防止这种情况,我们需要清除包装箱内的东西。我们可以添加一个空元素并将其设置为清除所有元素。这涉及将空div粘贴到我们的文档中,这并不理想,如果您的页面是由CMS生成的,则可能无法实现。因此,典型的清除浮动方法是所谓的清除修补程序。此方法通过添加CSS生成的内容并将其设置为清除两者来起作用。
清除框内浮点数的另一种方法是在容器上调用块格式化上下文(BFC)。块格式上下文包含其中的所有内容,其中将包括无法再戳出框底部的浮动项目。有几种强制BFC的方法,清除浮点数时最常见的方法是将溢出属性设置为具有默认可见值以外的值。
以这种方式使用溢出通常会起作用,但是,在某些情况下,您最终可能会在项目上留下阴影或不必要的滚动条。在样式表中看起来也有些混乱:您是否设置了溢出是因为需要滚动条还是只是为了获得这种清除功能?
为了使意图更清晰并防止创建BFC引起不必要的副作用,可以将其flow-root用作该display属性的值。唯一要做的display: flow-root就是创建一个BFC,从而清除浮标而不会引起其他问题。
在使用较新的布局方法来创建列布局之前,浮动技术一直通过为一组项目提供一定的宽度并将它们设置为彼此相邻浮动来起作用。仔细管理这些浮动框的百分比大小可能会产生网格效果。
我不建议立即开始新设计并使用此方法。但是,它将在现有站点中保留很多年。因此,如果遇到几乎所有东西都漂浮的设计,那么这就是使用的技术。
要从普通流中删除元素或将其从普通流中的位置移开,可以使用positionCSS中的属性。正常流动时,元素position的static。这些项目在“块”维度中一个接一个地显示,如果滚动页面,它们也会随之滚动。
更改位置值时,通常还会使用偏移值将框从特定参考点移开。使用的参考点取决于您使用的位置值。
如果项目具有position: relative参考点,则该参考点通常是正常流动的地方。然后,您可以使用偏移的属性值top,left,bottom和right移动从那里通常会显示框。
请注意,页面上的其他项目不会响应元素的新位置。保留了它在正常流程中的位置,因此您需要自己管理所有重叠部分。
设置position: absolute的一个项目,它完全从正常流程中移除。剩下的空间将被删除。然后,将相对于其包含的块定位该项目,除非将其嵌套在另一个定位的元素内,否则它将为视口。
因此,如果position: absolute在项目上进行设置,将会发生的第一件事是,它通常最终会卡在视口的顶部和左侧。然后,您可以使用偏移的属性值top,left,bottom并right从该位置移动框,你希望它是。
通常,您不希望根据视口放置盒子,但是在引用包含元素时,它位于内部。在这种情况下,您需要为包含该元素的位置赋予默认静态值以外的位置值。
由于设置position: relative不会从正常流程中删除该项目,因此这是通常的选择。给您希望设置偏移的父元素,position: relative然后从该元素的边界偏移绝对定位的块。
position: fixed在大多数情况下,带有的东西将相对于视口放置,并从文档流中删除,因此不会为其保留任何空间。滚动页面时,固定元素将相对于视口保持在适当的位置,因为正常流中的其余内容照常滚动。
这有助于启用固定的导航面板,该面板在屏幕上(例如,在内容滚动时)保持在屏幕上。与其他定位值一样,这样做可能会导致重叠,因此应注意所有内容都可以读取并且不会以固定项目结尾。
文是“小网站”系列的第 4 篇。本系列介绍一些作者主观认为值得把玩的“小网站”,愿朋友们多少都能有所收获。这个系列会长期更新,对这个系列感兴趣的朋友可关注,不迷路。
大海环境“白噪音” (VirtOcean)
把玩点:
地址 https://virtocean.com
主观评价:趣味性 3.5 星,技术性 4 星
还有白噪音这么个东西?什么是白噪音?
白噪音是一种比较友好的噪音,它是一种频率相对来说很均匀的声音,人能接受,所以大多数人听上去感觉还很和谐。
大自然中的很多声音都可以称之为白噪音,如风吹树叶沙沙声、雨天雨水滴答声、大海潮起潮落声、沙滩行走声、轮船汽笛声、海浪拍打岩石的声音、鸟鸣鸟叫的声音等等....
今天介绍的VirtOcean就是属于白噪音“小网站”,囊括一切与大海相关的环境音。网站支持电脑与手机端,不过在电脑上表现的要比手机上更优秀,手机上有兼容性的小问题。
电脑上打开网站,映入眼帘的是一片逼真的大海,太逼真了,比3A游戏还要逼真,感觉跟现实中的海水一样。当然,如果电脑太慢的朋友会觉得有点卡,因为使用了与3D相关的技术。
使用主界面
界面顶部右上角的开关支持白天、黑夜两种模式。
黑夜白天模式开关
下面一排菜单中“Mute SFX”是静音、“Full DSP”是界面全屏,“Hide UI”是隐藏操作界面,让你好好的享受大海的。如果点了隐藏操作界面不知道如何还原,试试左下角的SHOW UI。
功能菜单
网站打开默认是没有声音的,打开音箱或者戴上耳机,点击界面上图标就能听到声音了,都有哪些声音呢:
不同类型声音支持多个组合播放,作者通常选择Calming sea 加上 Submarine ambiance 一起组合播放,戴上低音耳机,闭上眼睛,晒着窗外的太阳,躺在椅子上,非常享受且慵懒的睡个午觉。
选择个舒服的姿势,快来一起享受吧!
本小节属于技术解析环节,纯技术性干货,适合技术人员,非行业人士可忽略。
网站虽然很简单,实现技术不简约:
先看声音,经分析,声音是由一些WAV文件组件,声音来源于https://freesound.org 这个网站,很多声音是免费的,可以下载,前提是要有一个账号。
有了声音就要播放,播放的组件来源于一款jQuery的插件,jquery.jplayer.min.js,该插件支持mp3,mp4,ogg,webm,wav,rtmp,flv的播放,操作非常简单,不多赘述。
磨砂玻璃的效果,来源开源代码 https://codepen.io/TurkAysenur/pen/ZEpxeYm ,前端的同学可以自行研究实现原理。
重头戏是大海的模拟,网站的作者采用的是一款开放源代码的实现,名称叫2050,实现地址 https://codepen.io/xorxor_hu/pen/mOWbVG
真正的技术就藏在上述2050项目的JS代码中,实现采用的是three.js框架,它在互联网圈可是鼎鼎有名呢,大到3D游戏,中到三维仿真(物联网、BIM大屏、数字孪生)场景,小到我们介绍的小网站,但凡网页上用到三维的东西,都离不开它。
讲到three.js就不得不提OpenGL和WebGL了。OpenGL是一个跨平台的3D/2D的绘图规范,它是“爷爷”,后来有了在网页上显示3D的需求,怎么办?WebGL协议就出来了,它允许你把JavaScript+OpenGL结合一起玩,不过用WebGL原生的API写程序太复杂,要的数学知识也挺多的,于是three.js出来了,它对WebGL的原始API进行了大量封装,让你极大的提高开发效率,降低学习成本。先前大家喜欢玩的微信跳一跳也是基于three.js开发的哟!
three.js涉及到相当多的3D相关知识点:摄像机、场景、渲染器、材质、灯光、贴图、烘焙、光照、法线、物体、动画、天空盒等...有兴趣的同学可以找些书来深入研究,会这个了,计算机中的3D的世界就被你拿下了...
本系列长期更新!
喜欢的朋友,感谢点赞、分享、收藏三连!
、小白剧场
▲BlackHat Asia 2021海报(图片来自网络)
参考资料
4. 国家地震科学数据中心官网https://data.earthquake.cn/index.html
*请认真填写需求信息,我们会在24小时内与您取得联系。