CSS学习笔记三
1.white-space
normal
连续的空白符会被合并,换行符会被当作空白符来处理。换行在填充「行框盒子(line boxes)」时是必要。nowrap
和 normal 一样,连续的空白符会被合并。但文本内的换行无效。pre
连续的空白符会被保留。在遇到换行符或者
元素时才会换行pre-wrap
连续的空白符会被保留。在遇到换行符或者
元素,或者需要为了填充「行框盒子(line boxes)」时才会换行。pre-line
连续的空白符会被合并。在遇到换行符或者
元素,或者需要为了填充「行框盒子(line boxes)」时会换行。break-spaces
与 pre-wrap的行为相同,只有较高浏览器才支持,除了:任何保留的空白序列总是占用空间,包括在行尾。
每个保留的空格字符后都存在换行机会,包括空格字符之间。
这样保留的空间占用空间而不会挂起,从而影响盒子的固有尺寸(最小内容大小和最大内容大小)
1.彻底搞懂word-break、word-wrap、white-space
2.不同瀏覽器下word-wrap,word-break,white-space強制換行和不換行總結
3.移动端开发,苹果手机样式乱,iphon7不支持white-space属性,控制显示几行
4.Safari浏览器white-space:nowrap不生效
5.textarea输入中文和数字换行解决方法
2.select居中
竟然有人想要实现原生的下拉框出现居中的效果,于是我就使用text-align进行设置,发现竟然不起作用。后来呢,我查了查,各种实现方法竟然也不是非常的完美。最多的就是用padding去实现,但是我测试了,好像不可以。
1 | select:{ |
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 | @font-face { |
(3) 使用字体
1 | .title{ |
比如下面是使用的苹方字体:
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 | div:focus{outline:none} |
1.去掉选中div后出现的高亮淡蓝色边框
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 | /** 分三列 */ |
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 时,定位容器由视口改为该祖先。