《CSS世界》学习笔记(一)

《CSS世界》,张鑫旭著,人民邮电出版社,2017年12月第一版。

1.P9二维码链接文章的demo值得一看,可以实现有关“某些区域颜色始终保持一致”的效果。

 

P9二维码所链接文章的一个demo里,图标用i标签 背景图的形式实现。我在模仿知乎、简书网站的时候发现他们的图标实现和你的不一样。比如回到顶部的按键,知乎是用button svg,简书则是i标签 content属性生成图片。我自己用的是a img实现。
我想知道这些实现有什么区别么?从语义上考量我感觉知乎的更好,因为这个功能就是按键。

鑫大回复:知乎意义好,兼容性不好。知乎放弃了IE8用户。如果图标是按钮,a标签具有键盘可访问性,同时兼容性好(尺寸控制上),同时设置role=”button”具有按钮语义。i标签用在装饰图形上。

role的值不是随便取的,参考:http://www.w3.org/TR/2014/REC-wai-aria-implementation-20140320/#mapping_role

为什么role值不能依开发者自取?

一.role的作用是增强“语义”。这里的“语义”更多的是为了以后的兼容。比如某些浏览器无法支持input<button>,我们只好写<a role="button">让这个通过图像和a标签形成的按键兼容现在和未来——当浏览器支持button后,role的值就会让浏览器把这个标签当作按键渲染了。

二.role的作用不是“解释”。比如你引入一个div,是为了统一某个界面的样式,你不能给这个div加上诸如“bodyStyle”这样的role值,这就是在“解释”了,这是注释的作用。如果允许role随开发者自定,难免会发生这种情况。

当然,如果某种标签在标准中不存在,而开发者需要,可以考虑自己开发后提交标准组织,通过后自然就有相应的role值出现了,哈哈。

 

 

关于vh、vw,参考这篇文章:

1.显示器分辨率和显示器尺寸并无直接关系——所以兼容布局考虑的不是尺寸而是分辨率(你的单位是px,是分辨率而不是“英寸”)

2.1024x768=“一条水平线上有1024个像素点,共768条线”

3.视区宽度=innerwidth;浏览器宽度=outerwidth;显示器宽度=screenwidth

4.弹框图片不超出浏览器窗口;纯CSS实现弹框的水平与垂直居中效果(没有JS计算与定位)

 

2.P11

1.焦点元素=a、button;非焦点元素=没设置tabindex属性的div、span——————这意味着二者是可以互相转化的。

之所以有互相转化的需要,是因为在一些浏览器里面,非焦点元素对伪类“:active”置若罔闻。

 

 

3.P14的链接文章。

为什么浮动元素会使父元素(高度)塌陷?

在文档流中,若父元素未设置高度,那么父元素的高度默认是被子元素撑开的,即子元素多高,父元素就有多高。但是当子元素设置浮动之后,子元素就会完全脱离文档流,父元素还在文档流中,此时父元素的高度就没有子元素撑起(子元素无法撑起父元素的高度),从而导致父元素的高度塌陷。简单来说,就是包含含有浮动的元素的上一级的高度变为0了,下面的元素会上去,这样会导致页面布局混乱。

————引用自文章:https://zhuanlan.zhihu.com/p/27671651?utm_source=qq&utm_medium=social

从上面的讨论可以额外知道一些东西:没有设置高度的元素,默认是auto,宽度同理。auto是怎么个自动法?是根据元素的内部元素的高宽自适应的,对于具体的元素又不同,比如P14链接文章里的div,其高度是根据内部元素所定,所以当内部元素脱离文档流后就会变成高度=0,但是由于div是块级元素,默认是占满一行,所以可以看到其宽度是铺满的,既然是在元素浮动后也是如此。

 

刚开始我没看懂P14文章的原因有二,其一已经在上面解释了,其二就是为什么在后面加个空元素(还得是块级的)就可以解决塌陷问题?

当添加了最后一个冗余元素(未设置clear:both)时;父元素和此冗余元素的高度都为0,并且三个浮动的元素都浮在了它们的上方盖住了它们(可以把它们看成PS中的图层)。现在,给这个冗余元素添加clear:both(clear属性介绍),它便要躲开这三个浮动元素,因此,一直往下跑,直到没有被浮动元素盖住才停下来。而父元素看到这个子元素跑开了,自然想要包裹住它。

————引自文章:http://m.blog.csdn.net/sjinsa/article/details/70932804

百度了好几篇,这一篇的这一段我感觉是比较靠谱的,结合鑫大在书里提到的“正是由于块级元素具有换行特性,因此理论上它都可以配合clear属性来清楚浮动带来的影响”,可以知道为什么后面加的元素还必须是块级元素才能解决塌陷问题——塌陷的父元素是一个块级元素,要想出现“父元素看到这个子元素抛开了,自然想包裹住它”这个效果,就必须要换行,如果不换行,或者换个说法后面加的的内联元素,其在文档流中与父元素是“同一水平面”的(按鑫大的说法,是“木头”不是“水”),无法影响父元素高度;而只有加了clear:both,才能让这个块元素跑到浮动元素的下面,从而让父元素的高度超过图片。

IE浏览器不支持伪元素display值为list-item的原因和为什么设置display:list-item会出现项目符号:p15

 

4.width:auto

1.width默认值是auto

 

2.width:auto时,有至少四种宽度表现:

一:fill-available,充分利用可用空间;二:fit-content,收缩与包裹;三:min-content,收缩到最小;max-content,超出容器限制。

3.P18

外部尺寸的块级元素一旦设置了宽度,流动性就消失了——所谓流动性指,margin/border/padding和content内容区域自动分配水平空间的机制。

 

4.

有包裹性(P20)的元素:display:inline-block;table元素;绝对定位、浮动。———————应用:不需要担心某个元素内容太多而破坏布局,比如:

某个模块的文字内容是动态的,可能是几个字,希望字少的时候居中显示,字超过一行巨作显示(实现见P21或者自己写的Demo:动态文字居中)

 

5.关于首选最小宽度

在CSS世界中,图片和文字的权重要远大于布局,因此,CSS的设计者显然是不会让图文在width:auto时宽度变成0的,此时的表现就是“首选最小宽度”。具体规则见P22

设置width:0,借用首选最小宽度可以实现单竖显示文字的效果(P22);HTML实现凹凸效果(P23或者自己写的Demo:凹凸效果)

类似图片这样的替换元素的最小宽度就是该元素内容本身的宽度。

 

6.content:url()、background(背景图)、<img>的区别。

伪元素的content属性很强大,可以写入各种字符串和部分多媒体文件。但是伪元素的内容只存在于CSS渲染树中,并不存在于真实的DOM中(譬如::before和::after伪元素,用于在CSS渲染中向元素的头部或尾部插入内容,它们不受文档约束,也不影响文档本身,只影响最终样式。这些添加的内容不会出现在DOM中,仅仅是在CSS渲染层中加入。事实上, 伪元素可以被浏览器渲染,但本身并不是DOM元素。它不存在于文档中,所以JS无法直接操作它。 而jQuery的选择器都是基于DOM元素的,因此也并不能直接操作伪元素。)。所以为了SEO优化和HTML的语义化,不要在伪元素中包含与文档相关的内容————基于这个原因,属于内容的图片要用img标签添加。

对于装饰用的图片,最好用伪元素配合background加入——伪元素 content:url()有一个弊端,这样加入的图片是没有办法改变宽高的,必须提前设置好。而通过伪元素 background背景图的形式加入的图片,可以用background-size调整尺寸(其实还是有办法通过JS控制伪元素的属性的,用背景图属性加入的话我们也可以通过修改background-size来动态改变图片大小了)

参考文章:

http://blog.jobbole.com/49173/

https://segmentfault.com/q/1010000009215970

http://www.jb51.net/article/81984.htm

https://developer.mozilla.org/zh-CN/docs/Web/CSS/content


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tautology(poj3295)(DFS)

本题中最多5个命题变项&#xff1a;p,q,r,s,t 每个有0,1两种取值&#xff0c;所以总共32种情况&#xff0c;分别枚举即可。 对于每种情况&#xff0c;计算表达式的值&#xff0c;如果有结果为0的则输出not 难点在于如何计算表达式的值&#xff0c;我们采用递归的方法&#xff0…

Spring重试–与项目集成的方式

如果您需要在代码中实现健壮的重试逻辑&#xff0c;一种行之有效的方法是使用spring重试库。 我的目的不是要展示如何使用spring retry项目本身&#xff0c;而是要展示可以将其集成到代码库中的不同方式。 考虑一种服务来调用外部系统&#xff1a; package retry.service;pub…

(1)《Head First HTML与CSS》学习笔记---HTML基本概念

前言&#xff1a; 1. 这本书并没有面面俱到&#xff0c;涵盖所有内容&#xff0c;只提供作为初学者真正需要的东西&#xff1a;基本知识和信心。所以这不是唯一的参考书。&#xff08;我买了一本《HTML5权威指南》作为参考书和这本一起看&#xff0c;但还是以本书为第一个…

mac中如何从vim文本编辑器退回到命令

有的时候&#xff0c;我们经常从命令行中进入vim文本编辑器&#xff0c;如何退回来呢&#xff1a; 只需要经过两步&#xff1a;1.按下esc键 2.输入":wq"(保存退出) 输入":q!"(不保存退出) 在文件名前面加./ ,表示在当前目录中查找该文件 例如执行可执行文…

拥有您的堆:使用JVMTI迭代类实例

今天&#xff0c;我想谈一谈我们大多数人每天都不会看到和使用的另一种Java&#xff0c;更确切地说&#xff0c;是有关较低级别的绑定&#xff0c;一些本机代码以及如何执行一些小的魔术。 尽管我们不会在JVM上找到真正的魔力源&#xff0c;但是在单个帖子的范围内可以实现一些…

Dojo高级Web2.0 UI组件库---Tree组件

Tree组件可以把有层次关系的数据用树状结构展现出来&#xff0c;就如同 Windows 系统的资源浏览器。Tree有两个模板&#xff0c;一个是Tree模板&#xff0c;一个是TreeNode模板&#xff0c;应该说Tree模板就是一个容器&#xff0c;里面有很多TreeNode.而初始化树&#xff0c;打…

使用Java 8防止日志过宽

一些日志将被机器消耗并永久保存。 其他日志仅用于调试和供人类使用。 在后一种情况下&#xff0c;您通常要确保您不会产生过多的日志&#xff0c;尤其是不会产生太宽的日志&#xff0c;因为一旦行长超过一定大小&#xff08; 例如&#xff0c;此Eclipse bug &#xff09;&…

[one day one question] webpack打包压缩 ES6 js、.vue报错

问题描述&#xff1a; 报错&#xff1a; ERROR in js/test.js from UglifyJs Unexpected token punc ?(?, expected punc ?:? [js/test.js:1374,5]&#xff0c;这怎么破&#xff1f; 解决方案&#xff1a; 配置babel&#xff0c;把配置放到文件【.babelrc】中{"prese…

UVA10236 斐波那契素数

题意&#xff1a;任取斐波那契数列中一项f[i],若对于所有j 解法&#xff1a;这题的理论分析在黑书上有&#xff0c;结论是从第五项开始下标为素数的斐波那契数都是斐波那契素数 #include <stdio.h> #include <string.h> const int MAXN 250010;; int prime[25010]…

[one day one question] safari缓存太厉害

问题描述&#xff1a; safari缓存太厉害&#xff0c;这怎么破&#xff1f; 解决方案&#xff1a; window.onpageshow function(event) {if (event.persisted) {window.location.reload() }}; 君生我未生&#xff0c;我生君已老 君恨我生迟&#xff0c;我恨君生早 君生我未生&…

Android 网络编程之Http通信

Android中提供的HttpURLConnection和HttpClient接口可以用来开发HTTP程序。以下是本人在学习中的总结与归纳。1. HttpURLConnection接口 首先需要明确的是&#xff0c;Http通信中的POST和GET请求方式的不同。GET可以获得静态页面&#xff0c;也可以把参数放在URL字符串后面&…

EE Servlet 3:在Servlet中生成HTML输出

如果您只需要在EE Web模块中处理少量请求URI&#xff0c;则在Servlet代码中生成自己HTML响应可能比使用完整的模板库更容易。 作为示例的一部分&#xff0c;我尝试了一个非常简单的Java DSL&#xff0c;该Java DSL在编写自己的Serlvet时生成html输出。 代码如下&#xff1a; p…

[one day one question] express 不缓存如何实现

问题描述&#xff1a; express 默认缓存&#xff0c;这怎么破&#xff1f; 解决方案&#xff1a; apiRoutes.use(function (req, res, next) {res.setHeader(Cache-Control, no-cache, no-store, must-revalidate);res.setHeader(Pragma, no-cache);res.setHeader(Expires, 0)…

正则表达式摘录

正则表达式到底是什么东西&#xff1f;在编写处理字符串的程序或网页时&#xff0c;经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说&#xff0c;正则表达式就是记录文本规则的代码。常用元字符 代码说明.匹配除换行符以外的任意…

Java生态系统– 2014年我的5大亮点

1. 2月1日-RedMonk Analyst公司宣布Java比以往任何时候都更加流行和多样化&#xff01; 2014年&#xff0c;随着FOSDEM的Free Java会议室的年会&#xff0c;Java生态系统开始轰轰烈烈地响起。 除了关于OpenJDK和相关主题的许多精深的技术讲座外&#xff0c;Steve OGrady&#x…

WEB前端大神之路之基础篇

CSS篇&#xff1a; 1.CSS权重&#xff1a; 不重复造轮子啦&#xff0c;直接传送门&#xff08;CSS选择器的权重与优先规则&#xff09; JavaScript篇&#xff1a; 1.this关键字&#xff1a; 它是一种引用&#xff08;referent&#xff09;。指向的是当前上下文&#xff08;con…

与Java EE和Camel的轻量级集成

Enterprise Java具有不同的风格和观点。 从简单的平台技术开始&#xff0c;即众所周知的Java EE&#xff0c;再到不同的框架和集成方面&#xff0c;最后是涉及以数据为中心的用户界面或特定可视化效果的用例。 Java EE本身无法解决的最突出的问题是“集成”。 有许多来自知名供…

java=====Striing date 转化

java中string与date(日期)格式之间的转换 经常遇到string和date之间的转换&#xff0c;把相关的内容总结在这里吧&#xff1a; 1.string格式转化为Date对象&#xff1a; //把string转化为dateDateFormat fmt new SimpleDateFormat("yyyy-MM-dd"); Date date fmt.par…

oracel Pipelined pipe row的用法

oracle的管道也可以返回集合类型&#xff0c;跟游标类似 CREATE TYPE my_type AS OBJECT ( field1 NUMBER, field2 VARCHAR2 (50) ); CREATE TYPE my_typelist AS TABLE OF my_type; CREATE OR REPLACE FUNCTION pipelineme RETURN my_typelist PIPELINED IS -…

在Spring中使用Netflix Hystrix批注

除了在主页上引述之外&#xff0c;我想不出更好的方式来描述Netflix Hystrix库的特定功能&#xff1a; 延迟和容错方式&#xff1a; 停止级联故障。 后备和正常降级。 无法快速快速恢复。 使用断路器隔离线程和信号量。 我看到了Josh Long&#xff08; starbuxman &#xff0…