CSS

CSS 基础知识(二)

Posted by violetks on November 14, 2019

一、浮动元素的一些特点

浮动的目的是做文字环绕效果的。
浮动元素,只会压住它下面标准流的盒子,不会压住下面标准流盒子里面的文字/图片。
绝对定位/固定定位会压住下面标准流所有的内容,包括文字/图片。

二、为什么要清除浮动?怎么清除浮动?

浮动脱离了正常文档流,会导致父元素高度塌陷,后面元素会挤到浮动元素下方,造成布局错乱。
清除浮动:
1、给父盒子设置合适的高度。
2、给父盒子添加样式overflow: hidden/auto
相当于触发 BFC,让父级紧贴内容,包括使用了浮动的盒子,为了去除兼容性问题,会添加zoom:1
3、在浮动元素后面添加一个元素,并设置clear: both
4、采用伪元素,在父元素上添加。

.parent::after {
    content: "";
    clear: both;
}

5、父元素使用 Flex 布局,display: flex

三、什么是 BFC

1、BFC 块级格式化上下文的特征:

  • BFC 就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然。
  • 内部的 Box 会在垂直方向,从顶部开始一个接一个地放置。
  • Box 垂直方向的距离由 margin 决定,属于同一个 BFC 的两个相邻 Box 的 margin 会发生重叠。
  • 每个元素的 margin box 的左边,与包含块 border box 的左边相接触,即使存在浮动也是如此。
  • BFC 的区域不会与 float box 重叠。
  • 计算 BFC 的高度时,浮动元素也参与计算。

2、创建块级格式化上下文:

  • 浮动元素的 float 不为 none
  • 绝对定位元素的 position 不为 static 或 relative
  • display:inline-block、table-cell、table-caption、flex、inline-flex
  • overflow 值不为 visible 的块元素(overflow: hidden,overflow: auto)

3、BFC 作用:

  • 可以清除浮动,防止父元素高度塌陷。overflow: hidden
  • 防止外边距 margin 重叠,给两个元素分别设置 BFC
  • 可以阻止元素被浮动元素覆盖
  • 自适应两栏布局

四、display:flex 和 display:box 浏览器兼容写法

display:flex 和 display:box 都可用于弹性布局。

.container {
  display: -webkit-box; /* Chrome 4+, Safari 3.1, iOS Safari 3.2+ */
  display: -moz-box; /* Firefox 17- */
  display: -webkit-flex; /* Chrome 21+, Safari 6.1+, iOS Safari 7+, Opera 15/16 */
  display: -moz-flex; /* Firefox 18+ */
  display: -ms-flexbox; /* IE 10 */
  display: flex; /* Chrome 29+, Firefox 22+, IE 11+, Opera 12.1/17/18, Android 4.4+ */
}

五、CSS 实现禁止鼠标点击事件

pointer-events: none

六、如何使文本以大写字母开头

text-transform: capitalize

七、取消 input 输入框获取焦点时的蓝色轮廓线

outline: none

八、防止拖拽文本域 textarea 放大缩小

resize: none

九、如何修改 Chrome 记住密码后自动填充表单的黄色背景

input: -webkit-autofill,
textarea: -webkit-autofill,
select: -webkit-autofill {
  background-color: #fff;
  background-image: none;
  color: #000;
}

十、隐藏滚动条

只要网页内容大于视窗,滚动条就会出现。
目标:没有滚动条影响美观,但仍旧可以滚动。
方法一:在 webkit 内核的浏览器里可以定义滚动条样式,在 CSS 初始处定义。

/* Chrome */
body::-webkit-scrollbar {
    display: none;
}
/* IE/Edge */
body {
    -ms-overflow-style: none;
}
/* Firefox */
html {
    overflow: -moz-hidden-unscrollable; /* 注意!若只打 hidden,chrome 的其它 hidden 会出问题 */
    height: 100%;
}

body {
    height: 100%;
    width: calc(100vw + 18px); /* 浏览器滚动条的长度大约是 18px */
    overflow: auto;
}

方法二:在 div 外面再套一个 div,内层是有滚动条的,但是我们看不到了。
外面的 div 设置overflow: hidden;
里面的 div 设置overflow-y: scroll; overflow-x: hidden;
再设置外层 div 的 width 小于内层 div 的 width。

<div class="outer">
    <div class="inner">
    </div>
</div>
.outer {
    overflow: hidden;
    width: 200px;
}
.inner {
    overflow-y: scroll;
    overflow-x: hidden;
    width: 220px;
}