CSS学习笔记一
1、中英文混排导致文字基线不一致。
如果所示,两个都是行内元素,数字看起来就要小,中文看起来就要大,谷歌浏览器中使用元素选择,中文高度是22,数字高度是20.问题主要产生的原因是字体的问题,解决方式也就是统一字体。
2、子元素设置50%无法并排显示
将子元素的两个div设置为display:inline-block,并设置width:50%,我们感觉上应该时两个div并排显示,实际上会错开,b-item两个会分行显示。有人说是bug,但是我在火狐和谷歌中,也同样遇到了这个问题。
1 | <style type="text/css"> |
解决方式,就是把50%换成49%,或者是在b-item去掉display,改用float:left;
参考文献:
1.两个div并排,为各占50%宽度,为何错开??
2.子元素宽度设置50%无法并排显示的问题
3.css实现两个div填满一行
3.footer自动固定在底部
大体上分为两者,一种是:footer高度固定,使用绝对定位,父元素使用padding-bottom将footer所处的高度预留出来。这种方式的缺点当然就是高度必须固定啦。另一种就是使用Flex布局,缺点吗,当然也是因为使用了Flex布局,所以其兼容性有待商榷啊。最少是IE 10+。当然,现在Edge都换成了Chrome内核了,也无所谓了。
1 | //HTML代码如下 |
4.translateY无效的原因
通常为了使div中的文字水平垂直居中,通常的做法是在div的文字中加一层span,为了使translateY有效,应为span添加display:inline-block;这样才能使一个行内块元素,transform就有效果了。
1 | <div class="blank"> |
1.CSS进阶篇–div中的内容垂直居中的五种方法
5.display:inline-block对齐问题
对于两个并排的div,使用display:inline-block是一般的选择,但也会带来文字对齐的问题。
解决方式就是添加:vertical-align: top;
6.offsetParent为null或者offsetTop始终为0
获取元素的左上角坐标,通常会有如下的代码
1 | /** |
HTMLElement.offsetTop 为只读属性,它返回当前元素相对于其 offsetParent 元素的顶部的距离。
需要解释的是,如果该元素是display:none的话,offsetTop为0,offsetParent为null
参考文章:
1.用Javascript获取页面元素的位置
2.深入理解定位父级offsetParent及偏移大小
7.offsetHeight高度和显示的高度不一致
offsetheight,它包含padding、border、横向滚动轴高度。 offsetheight=padding+height+border+横向滚动轴高度。这个解释很明白了,但是如果内容中存在line-height这个样式,那么你得到的可能并不是你想要的东西。
8.奇葩的transform导致字体模糊
如上图所示,最左侧的标签栏上,在使用transform使div进行居中之后,可以看出字体有明显的模糊状态。解决的办法就是让width或者使height属性值变成偶数即可,我这里有个padding:7.5px的内边距,我让其失效,看看效果:
9.文字竖排
(1) CSS属性write-mode可以实现文字竖排,writing-mode:vertical-rl从右向左竖排,writing-mode:vertical-lr从左向右竖排。
(2) css属性transform:rotate实现文字竖排(不好使,要旋转包裹文字的span元素)
(3) css属性float实现文字竖排(这个较复杂,还得设置div的宽度,放不开的字挤到下一行,不好使)
1.网页文字竖排的几种实现方式
10.强制换行和不换行
1 | 1. word-break:break-all;只对英文起作用,以字母作为换行依据 |
注意,一定要指定容器的宽度,不然的话是没有用的
1.CSS强制英文、中文换行与不换行 强制英文换行
11.锚点链接偏移问题
需求产生的原因主要是因为添加的锚点,会将锚点移动到页面的开头,如果此时页面的顶部有菜单栏并且是flex定位常驻的,菜单栏就会压盖住锚点。这个时候就需要将锚点的位置下移一定的距离,使其能在页面中正常显示。例如如下的html,主要是使用了参考文章中(1)的代码。
1 | <a href="#box">box</a> |
方式一:锚点通过padding和margin进行偏移
1 | .box{ |
方式二:使用css的 :target (主要推荐这种方式,主要是不对页面布局产生负面的影响)
1 | .box:target{ |
其他的方法我就不一一列举了,详情就参考下面的文章吧。
12.向下居中的三角箭头
向下的箭头:border-top有颜色,left和right没有颜色;向上的箭头:border-bottom有颜色,left和right透明;向右的箭头:border-left有颜色,top和bottom透明;向左的箭头:border-right有颜色,top和bottom透明。居中,联合使用left和transform属性。
1 | /* 箭头 */ |
13.html不能正确识别换行符的问题
最近遇到一个奇怪的问题,我的文章中明明有 “\n” 这样的换行符,但是在html中就是显示不了换行。
解决方式有两种:
(1) 使用js将换行符“\n”转换成 < br >,这样好像有点得不偿失,毕竟如果我自己手动写了一个换行符(就像这句话里面有个换行符一样),js代码如何区分是手动添加的换行,还是编辑器自动添加的换行符呢?
(2) 使用css的white-space属性, pre-wrap:保留空白符序列,但是正常地进行换行,然后结合word-break,就可以实现正确的识别换行符了。
1 | code |
1.HTML文章页面,识别不了换行问题的解决
2.说一说“换行”踩的坑(看来在使用\n方式实现换行时,是否能用html()/innerHTML/text()/innerText,取决于在哪个 HTML 元素上使用这些方法。对于那些会保留纯文本中原有空格、换行符的 HTML 元素如
、