《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
《CSS世界》学习笔记(一)的更多相关文章
- 《Hadoop》大数据技术开发实战学习笔记(二)
搭建Hadoop 2.x分布式集群 1.Hadoop集群角色分配 2.上传Hadoop并解压 在centos01中,将安装文件上传到/opt/softwares/目录,然后解压安装文件到/opt/mo ...
- 《Hadoop大数据技术开发实战》学习笔记(一)
基于CentOS7系统 新建用户 1.使用"su-"命令切换到root用户,然后执行命令: adduser zonkidd 2.执行以下命令,设置用户zonkidd的密码: pas ...
- 超人学院Hadoop大数据技术资源分享
超人学院Hadoop大数据技术资源分享 http://bbs.superwu.cn/forum.php?mod=viewthread&tid=807&fromuid=645 很多其它精 ...
- java大数据最全课程学习笔记(1)--Hadoop简介和安装及伪分布式
Hadoop简介和安装及伪分布式 大数据概念 大数据概论 大数据(Big Data): 指无法在一定时间范围内用常规软件工具进行捕捉,管理和处理的数据集合,是需要新处理模式才能具有更强的决策力,洞察发 ...
- hadoop大数据技术架构详解
大数据的时代已经来了,信息的爆炸式增长使得越来越多的行业面临这大量数据需要存储和分析的挑战.Hadoop作为一个开源的分布式并行处理平台,以其高拓展.高效率.高可靠等优点越来越受到欢迎.这同时也带动了 ...
- 除Hadoop大数据技术外,还需了解的九大技术
除Hadoop外的9个大数据技术: 1.Apache Flink 2.Apache Samza 3.Google Cloud Data Flow 4.StreamSets 5.Tensor Flow ...
- 大数据技术之_09_Flume学习_Flume概述+Flume快速入门+Flume企业开发案例+Flume监控之Ganglia+Flume高级之自定义MySQLSource+Flume企业真实面试题(重点)
第1章 Flume概述1.1 Flume定义1.2 Flume组成架构1.2.1 Agent1.2.2 Source1.2.3 Channel1.2.4 Sink1.2.5 Event1.3 Flum ...
- 大数据技术之_19_Spark学习_01_Spark 基础解析 + Spark 概述 + Spark 集群安装 + 执行 Spark 程序
第1章 Spark 概述1.1 什么是 Spark1.2 Spark 特点1.3 Spark 的用户和用途第2章 Spark 集群安装2.1 集群角色2.2 机器准备2.3 下载 Spark 安装包2 ...
- 大数据技术之_16_Scala学习_01_Scala 语言概述
第一章 Scala 语言概述1.1 why is Scala 语言?1.2 Scala 语言诞生小故事1.3 Scala 和 Java 以及 jvm 的关系分析图1.4 Scala 语言的特点1.5 ...
- 大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础
第五章 函数式编程-基础5.1 函数式编程内容说明5.1.1 函数式编程内容5.1.2 函数式编程授课顺序5.2 函数式编程介绍5.2.1 几个概念的说明5.2.2 方法.函数.函数式编程和面向对象编 ...
随机推荐
- Kettle循环删除数据
1.问题描述: 某个系统原库的数据同步到备份库.但是由于原库的的数据会物理删除,此时需要删除备份库的数据. 2.不理想的解决1: 1)首先从备份库获取该表的所有ID: 2)循环备份库的ID,去原库检测 ...
- how to read openstack code
本文的目的不是介绍openstack.我们这里假设你已经知道了openstack是什么,能够做什么.所以目的是介绍如何阅读openstack的代码.通过读代码来进一步学习openstack. 转载要求 ...
- 关于python内存管理里的引用计数算法和标记-清楚算法的讨论
先记录于此,后续有时间再深究吧: 1.https://www.zhihu.com/question/33529443 2.http://patshaughnessy.net/2013/10/30/ge ...
- 集成学习(ensemble method)--基于树模型
bagging方法(自举汇聚法 bootstrap aggregating) boosting分类:最流行的是AdaBoost(adaptive boosting) 随机森林(random fores ...
- 设计模式之外观模式(Facade)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- C++之桟的应用---括号匹配
刚開始学习数据结构.用桟写了一个经典的应用,括号匹配. 算法思路: 输入字符串时.将 '(' , '[' 压入桟.遇到 ')' ']' 时,再栈顶出桟.进行括号匹配.假设成功匹配.则继续进行.否 ...
- 常用Lunix命令
计算机 1.硬件系统 输入单元.输出单元.算术逻辑单元.控制单元.记忆单元 中央处理单元:CPU(算术逻辑单元.控制单元) 电源.主板.CPU.内存(RAM).硬盘.(声卡.显卡.网卡)(集成在主板上 ...
- Android学习笔记-传感器开发之利用传感器和Tween开发简易指南针
本次我们学习Android传感器的开发,前面已经介绍过了,tween的使用,所以,我们可以结合传感器与tween动画,开发简易的指南针. 首先先介绍一下传感器的相关知识, 在Android应用程序中使 ...
- JSP学习笔记七之Cookie
首先提一下http协议的无状态性.指的是server不会记住已经给它发过请求的client. 每次收到请求都会觉得是一个新的client发过来的. (即:server不会记住给他发过请求的client ...
- 【Noip模拟By yxj】
1.randomDescription 给定4个参数A0,N,c,p,你需要按下式构造A1~AN: A[i]=(A[i-1]2+c)mod p 之后,你需要求出A1~AN中,第K大的数值.Input ...