CSS学习笔记三

标签: 无 分类: 未分类 创建时间:2021-08-16 05:06:33 更新时间:2025-01-17 10:39:22

1.white-space

  • normal
    连续的空白符会被合并,换行符会被当作空白符来处理。换行在填充「行框盒子(line boxes)」时是必要。

  • nowrap
    和 normal 一样,连续的空白符会被合并。但文本内的换行无效。

  • pre
    连续的空白符会被保留。在遇到换行符或者
    元素时才会换行

  • pre-wrap
    连续的空白符会被保留。在遇到换行符或者
    元素,或者需要为了填充「行框盒子(line boxes)」时才会换行。

  • pre-line
    连续的空白符会被合并。在遇到换行符或者
    元素,或者需要为了填充「行框盒子(line boxes)」时会换行。

  • break-spaces
    与 pre-wrap的行为相同,只有较高浏览器才支持,除了:

    任何保留的空白序列总是占用空间,包括在行尾。
    每个保留的空格字符后都存在换行机会,包括空格字符之间。
    这样保留的空间占用空间而不会挂起,从而影响盒子的固有尺寸(最小内容大小和最大内容大小)

2.select居中

竟然有人想要实现原生的下拉框出现居中的效果,于是我就使用text-align进行设置,发现竟然不起作用。后来呢,我查了查,各种实现方法竟然也不是非常的完美。最多的就是用padding去实现,但是我测试了,好像不可以。

1
2
3
4
5
6
7
8
9
select:{
width: auto;
padding: 0 2%;
margin: 0;
}
option{
text-align:center;
}

参考文章:
1.用CSS将select/option文本居中
2.如何设置select和option的文字居中?
3.如何让select文字居中 这里有几个方法,第一使用padding,第二使用text-align-last,第三在外面套一个盒子label,id指向这个select,第四就是使用js模拟。
4.实现select下拉框字体居中——兼容解决select在Safari、Chrome不居中问题 无论怎么尝试,都没发现能完美解决option中的值居中的方法。大部分需要这样的需求的同学,可能也是加空格来实现的,或者不使用select,利用div,js等完全模拟select下拉框效果。当然说实话:select的option居中效果很难看,你可以想象option中的值长度不一,居中还不如靠左对齐呐。

3.自定义字体

(1) 下载字体
下载需要的字体,比如otf,ttf格式,放到项目目录下。在vue中引入,主要使用了一个相对路径的问题,我这里放到了 asset 文件夹下。
(2) 定义 @font-face
这里也要注意要引用到这个otf文件

1
2
3
4
5
6
@font-face {
font-family: Heavy;
src: url('./assets/font/SourceHanSansSC-Heavy-2.otf');
font-style:normal;
font-weight:normal;
}

(3) 使用字体

1
2
3
4
5
.title{
font-size: 36pt;
line-height: 72px;
font-family:Heavy;
}

比如下面是使用的苹方字体:

1
font-family: PingFangSC-Regular, sans-serif;

4.transform导致fixed失效

transform是个超级常用的属性, 需要居中/动画/开启cpu加速时经常会用到.但这个属性也有很多副作用, 例如把后边的元素盖住了,或者是后代absolute元素被overflow:hidden剪裁.除此之外还有个影响, 让拥有固定定位(fixed)属性的子元素变的像个绝对定位(absolute)元素.

参考文章:
1.transform导致fixed失效
2.position fixed,元素会被移出正常文档流,并不为元素预留空间,而是通过指定元素相对于屏幕视口(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变。打印时,元素会出现在的每页的固定位置。fixed 属性会创建新的层叠上下文。当元素祖先的 transform, perspective 或 filter 属性非 none 时,容器由视口改为该祖先。

5.去掉选中div后出现的高亮淡蓝色边框

1
2
3
4
div:focus{outline:none}

*{outline:none;}
div{border:none}

6.opacity

子元素会继承父元素的opacity属性,如果子元素单独设置了opacity那么其真正的结果值是子元素与父元素opacity值的乘积。所以子元素opacity设置为1,其透明度仍然是0.7*1=0.7,(注意opacity的值为0-1,所以不能通过设置opacity为2来使透明度为1)

参考文章:
1.CSS-opacity子元素继承父元素透明度的解决方法 因为子元素会继承父元素的opacity属性,我们让它不成为子元素。新增一个子元素,将其绝对定位到父元素位置,然后在该元素上设置背景色与透明度。
2.关于父元素设置opacity后,子元素设置opacity无效问题

7.flex布局

(1) padding问题
在设置padding的子元素的属性后,其内容会压缩父元素的空间。当上下两个都用了flex布局,上面三列,下面两列,本来下面的分为了 1:2 ,和上面的1:1:1,应该对齐的,但是实际的结果却并不对齐。

【解决方案】
就是使用flex具体的比例,代替 flex:1;

1
2
3
4
/** 分三列 */
flex:33.33% 1 1;
/** 占两列 */
flex:66.66% 1 1;
参考文章:
1.关于flex弹性布局子元素添加padding问题 在使用flex布局时,如果直接为子级元素添加padding的话,其宽度会压迫其他兄弟元素的空间
2.flex空间分配规则
3.使用 Gap 属性给 CSS Flex 布局设置间距

(2) 超出父元素问题
我的本意就是在一个用flex布局的div中放一个图表,但是可以自动的占据剩下的内容。但是显然并不是这么如意。

【解决方案】
这个问题其实从父元素的排列上去解决了。比如下面的竖着的三个面板,只有第二个是固定高度的,一和三都是剩余填充,如果 一 不进行 flex:1 设置,那么 三 中的柱状图就无法自适应宽高。

参考文章:
1.flex布局子元素宽度超出父元素问题 flex:1并不是决定子元素宽度的因素,它只是规定了,如果父元素有多余空间,以怎样的比例去分配剩余空间,并不会对子元素原本就占据的空间做处理。所以,当元素原本的宽度就超过父元素宽度时,子元素内容就会超出。

8.fixed定位

backdrop-filter 会导致fixed失效,如果祖先有 backdrop-filter,fixed会不相对于视口,而是相对于这个祖先元素。

参考文章:
1.不受控制的 position:fixed 在许多情况下,position:fixed 将会失效,当元素祖先的 transform 属性非 none 时,定位容器由视口改为该祖先。
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。