当前位置: 首页 > 科技观察

CSS_1

时间:2023-03-12 18:22:07 科技观察

1的诞生。HTML的困境我是一个大名鼎鼎的CSS,很多人都知道我的名字,但对我的原理和细节却知之甚少。这也是可以理解的。比起简单的HTML,我要复杂的多,尤其是我做的漂亮的页面想要用起来,需要知道的细节太多了,这真不是一般人能做到的。儿子。所以大家看到我,顶多打个招呼,然后立马低头绕过去。说起HTML,这家伙其实是个很简单的家伙。他只关注内容的语义。比如他用

表示这是一个标题,用

表示这是一个段落,用表示这里有一张图片,用表示这里是一个链接。链接真是一个有趣的发明。它可以从一个网页跳到另一个网页,从一个网站跳到另一个网站,把全世界的网站连在一起,形成一个大网络。在我出生之前,虽然世界上有很多网站,但它们都有一个共同的特点:丑。原因很简单。一个HTML文档有很多标签。当这些标签组合在一起时,应该如何显示呢? 是什么字体?什么颜色?大部分网站长这样:真是难以想象上个世纪的人用这么简单的网站来购物!无数人向HTML抱怨:你就不能打扮一下自己吗?HTML自信地回答:不,不,我的主人只是让我负责网页的内容和结构。至于这些结构应该如何显示,浏览器可以负责。而浏览器也会推卸责任:“这个我管不了,你不告诉我你用什么字体和颜色,我怎么给你看?”理由很好,对吧,浏览器真的不应该做这个事情。HTML只好向组织申请给自己加了一堆新的标签,专门用来描述和展示相关的东西:这样网页就比以前漂亮了,大家似乎都很满意。只是HTML发现自己变得越来越臃肿。这些负责显示的标签淹没了原来的内容。更何况,修改的难度越来越高。你可以想象一下,当一个HTML文件中有数百个HTML文件时。当你加了一个标签的时候,如果老板让你把字体改小一点,你一定是疯了。该组织看到了问题的症结所在,并决定精简HTML。他定下了一个目标:“内容和风格必须分开!”这个重担交给了我。2selector刚开始的时候,我完全没有概念。如何分离内容和风格?这几天我一直在想这个问题。既然我要给内容应用样式,作为第一步,我必须解决定位问题,换句话说,我需要能够找到HTML中的元素。我问HTML:“你一页有这么多标签,我怎么才能得到你完整的结构呢?”这个东西好办,但是如何定位一个元素,并设置这个元素的字体、颜色等显示属性呢?XML向我建议:“这太容易了,你可以模仿我的XPath,例如,在DOM树中,如果你想选择标题元素,使用/html/head/title,或者简单地使用//title;如果你想要选中第一个div下的h3,可以这样/html/head/div[1]/h3,是不是很方便?(注:其实XPath比CSS出现的晚)“方便就是方便,但是为什么要斜杠? 直接写成htmlhead标题不行吗?”“这……”XML无语。我决定不使用斜杠,我想取悦程序员,所以我使用divulli,它非常简洁,我不想称之为XPath,它是XML的宝贝。我将其称为选择器。比如我要把h3全部变成红色和粗体,我可以这样写:h3{color:blue;font-weight:bold;}当然,我设计的选择器能力不仅如此简单,你可以用它来选择一个特定的节点(如果它有id属性或者class属性),不管这个节点有多深“隐”。您还可以选择节点的兄弟节点、一组元素的第x个子元素、具有属性名称的任何标签名称,等等。总之,有了Selector,你可以尽情浏览DOM树,找到你想要的地方,然后设置样式。内容和风格是分开的。3盒子定位的问题解决了,初步的样式也解决了。但是最令人愉快的排版问题仍然存在。想想你读过的报纸和杂志。它们有丰富的图片和赏心悦目的排版。我们必须努力学习。我仔细研究了杂志的排版,栏目分隔,间距,对齐方式,图文混合,本质上都是由“块”组成的。我对HTML说:我们是不是也可以把内容一个一个做成块,然后把这些块组合起来?HTML回答:“我有块,你不知道吗,所有HTML元素都是块或内联的。”“你是什么意思?”"块级元素(如标题、段落)在页面下方依次堆叠,每个元素占一行;内联元素(如链接、图片)会并列在一行中,并且只会当没有足够的空间并列时折叠到下一行。你可以想象一个文档实际上就是页面上的这些元素只是堆叠和流动,俗称文档流。在这种情况下,我可以将这些元素一个一个地当作“盒子”,为了能够排版,我为每个盒子设置了三个属性:border(边框):OK设置宽度、样式、颜色Padding:距离thecontenttoborderMargin:边框到相邻元素的距离通过调整内外边距和边框,可以对页面排版做一些基本的美化。4.浮动和定位框只是在文档中按顺序流动flow.如果要实现漂亮的排版,就得让它们灵活定位,比如有人想在浏览器的最右边放一个框,这样它就不会随着页面的滚动而滚动;或者一个小的box嵌套在一个大盒子里,小盒子要相对于大盒子定位;或者两个盒子想像报纸杂志一样分栏显示,菜单在左边,内容在中间,和一个右栏;等等。因此,一个盒子必须是一个可以在正常的文档流中重新定位,所以我给盒子添加了两个重要的属性:float和position。float允许框脱离标准文档流并向上浮动,直到它遇到父元素的边框。当有多个框浮动时,可以按顺序形成柱状效果。例如下面的三个

本来就是从上到下排列的。如果给div2和div3加上float:left属性,它们会水平排列:对于位置来说,会更加灵活。如果不设置,就是默认定位,文档流中的位置不变。可以设置为相对于原文档流中框的位置定位(原位置未被其他div占用):也可以设置为绝对相对于某个父元素(图中的祖先元素)定位下面是橙色框,原来div2的位置被div3占据了)。唉,跟你说那么多鸡毛蒜皮的事情,我有点厌倦了。总结就是:我提供多种方式让你的箱子灵活排列。当然,不得不承认这些布局对于程序员来说真的不是那么友好,你不能通过拖拽来布局这些框。为了减少工作量,大量的CSS框架不断推出,比如Bootstrap、SemanticUI、Pure.css、EZ-CSS。.....那是另一个故事了。5CSS浮动和定位可以说是我创建的最复杂的东西了。其他的比如背景、字体、文字就简单多了,不会啰嗦。当我告诉HTML我的定义工作基本完成时,他问了一个问题:“你把这些选择器、盒子模型、浮动和定位、背景、字体等定义到底放在哪里?放在这里?”想了想,要有绝对的灵活性,程序员可以直接写到元素的标签里(叫内联样式),或者写到html的