前端 OnePiece CSS (娜美)篇

娜美,日本漫画《航海王》及衍生作品中的女主角。草帽海贼团成员之一,人称"小贼猫",头脑聪明又机灵,精通气象学和航海术,能用身体感知天气,完美指示航路,是个能精确画出航海图的天才航海士。本质上是个细心、善良、重视感情、嫉恶如仇、偶尔有些温柔能干的女性,负责貌美如花。

CSS,前端的重要组成部分,负责前端貌美如花,展示给用户各式各样炫酷好看的页面,本篇记录自己整理的 CSS 内容,不定期更新,如有不对的地方,还请大家指出,会及时改正,多多包涵。

说一下 BFC

BFC(Block Formatting Context),块级格式化上下文,在页面中独立渲染的区域,区域内外元素互不干扰。

触发条件
  • 文档根元素
  • 浮动元素,float 不为 none。
  • 绝对定位元素,position 为 absolute 或 fixed。
  • overflow 为 auto、scroll、hidden。
  • 行内块级元素,display 为 inline-block。
  • 弹性元素,display 为 flex 或 inline-flex。
  • 网格元素,display 为 grid 或 inline-grid。
  • 表格元素,display 为 table、table-caption、table-cell、table-footer-group、table-header-group、table-row、table-row-group。
  • display 为 flow-root。
  • contain 为 layout、content、paint
应用场景
  • 避免元素之间 margin 叠加(margin 塌陷)。

在相邻两个盒子外面包裹一层元素,并触发这个元素生成 BFC

  • 清除浮动

因为 BFC 在计算高度的时候浮动元素也会参与计算。

  • 使用 display: flow-root 和浮动元素实现双栏布局。 现在基本上都是使用弹性盒子实现布局。

盒子模型

默认情况下,浏览器使用标准盒模型,即每个元素都是由内容、内边距、边框和外边距组成的。

标准盒模型

css 属性 box-sizing: content-box;,设置元素的宽高时不会包含 padding、border。

怪异盒模型

css 属性 box-sizing: border-box;,设置元素的宽高时包含 padding、border。

选择器

选择器
js 复制代码
<div id="main" data-theme="dark" class="box">
  <div class="first base">
    <div class="first_1">
      <p class="first_1_1"></p>
    </div>
    <div class="first_2"></div>
  </div>
  <div class="second"></div>
  <div class="second"></div>
</div>;
// id 选择器 (#idname)
document.querySelectorAll("#main"); // NodeList [div#main]

// class 选择器 (#classname)
document.querySelectorAll(".box"); // NodeList [div#main.box]

// 标签选择器 (tagname)
document.querySelectorAll("p"); // NodeList [p]

// 后代选择器 (A B)
document.querySelectorAll(".box div"); // NodeList(5) [div, div, div, div, div] 包括子孙元素

// 子代选择器 (A > B)
document.querySelectorAll(".box > div"); // NodeList(3) [div, div, div] 只包含一级子元素

// 相邻同胞选择器 (A + B) 第一个元素
document.querySelectorAll(".first + .second"); // NodeList [div.second]

// 属性选择器
document.querySelectorAll('[data-theme="dark"]'); //NodeList [div#main.box]

// 伪类选择器 (A:pseudo-class) :first-child 一组兄弟元素中的第一个元素。
// 伪元素选择器 (A::pseudo-element) ::before、::after
优先级

!important > 行内样式 > id 选择器 > 类选择器 > 标签选择器

css 复制代码
// 如果有相同类型的选择器,后写的权重高
.first {
  color: red;
}
.base {
  color: blue; // 生效
}

// 出现次数多的权重高
.first.base {
  color: red; // 生效
}
.first {
  color: blue;
}

css 单位

  • px 相对固定的单位
  • % 相对父元素宽度的百分比。
  • em 相对父元素字体大小的单位,如果自身定义了 font-size 则按自身的计算。
  • rem 相对根元素字体大小的单位。默认情况下浏览器 font-size: 16px 则 1rem = 16px。
  • vw 视口宽度的百分比。
  • vh 视口高度的百分比。
  • vmin 视口宽度和高度的最小值的百分比,比如一个元素的宽度设置为 100vmin,那么它的宽度就是视口宽度和高度中小的那个值。
  • vmax 视口宽度和高度的最大值的百分比,同理选择视口宽度高度中较大那个值。

元素隐藏 display、visibility、opacity 有什么区别

  • display: none; 隐藏元素,元素不占位,无法响应点击事件。
  • visibility: hidden; 隐藏元素,元素占位,无法响应点击事件,子元素可以设置 visibility: visible 显示。
  • opacity: 0; 隐藏元素,元素占位,可以响应点击事件。

垂直居中

  • 绝对定位 + 负 margin (需要知道元素宽高)
  • 绝对定位 + margin: auto
  • 绝对定位 + transform: translate(-50%, -50%)
  • flex
  • grid

flex

flex 容器属性
  • flex-direction: row | row-reverse | column | column-reverse;
  • flex-wrap: nowrap | wrap | wrap-reverse;
  • flex-flow: flex-direction flex-wrap 的简写;

  • justify-content: flex-start | flex-end | center | space-between | space-around;

  • align-items: flex-start | flex-end | center | baseline | stretch;
  • align-content: flex-start | flex-end | center | space-between | space-around | stretch; 有多根轴线才生效与 justify-content 类似。
flex 项目属性
  • order: number;定义了项目的排列顺序,数值越小,排列越靠前,默认为 0。
  • flex-grow: number;定义了项目的放大比例,默认为 0,即如果存在剩余空间,也不放大。
  • flex-shrink: number;定义了项目的缩小比例,默认为 1,即如果空间不足,该项目将缩小。
  • flex-basis: number;定义了在分配多余空间之前,默认值为 auto,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。

需要注意

  • flex: flex-grow flex-shrink flex-basis;
  • align-self: auto | flex-start | flex-end | center | baseline | stretch;

允许单个项目与其他项目不一样的对齐方式,可覆盖 align-items 属性。默认值为 auto,表示继承父元素的 align-items 属性。

grid

juejin.cn/post/685457...

css 动画 transition、trransform、animation 之间的区别

  • transition

元素在一定时间内的过度,例如:transition: width 2s ease-in-out;

  • transform

元素的变换,例如:transform: rotate(45deg);

  • animation

动画,例如:animation: 关键帧(keyframes) 2s ease-in-out; 配合@keyframes 定义关键帧一起使用。

文本溢出

单行
css 复制代码
div {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
多行
css 复制代码
div {
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 2; /* 行数 */
  -webkit-box-orient: vertical;
}
相关推荐
IT_陈寒1 分钟前
React 18并发模式实战:3个优化技巧让你的应用性能提升50%
前端·人工智能·后端
用户761736354017 分钟前
CSS重点知识-样式计算
前端
yoyoma9 分钟前
object 、 map 、weakmap区别
前端·javascript
shyshi10 分钟前
vercel 部署 node 服务和解决 vercel 不可访问的问题
前端·javascript
.生产的驴11 分钟前
React 模块化Axios封装请求 统一响应格式 请求统一处理
前端·javascript·react.js·前端框架·json·ecmascript·html5
前端大神之路12 分钟前
vue2 响应式原理
前端
一个努力的小码农12 分钟前
Rust中if let与while let语法糖的工程哲学
前端·rust
雾岛听风来13 分钟前
Android开发中常用高效数据结构
前端·javascript·后端
IT_陈寒13 分钟前
Vue 3性能优化实战:这5个Composition API技巧让你的应用快30%
前端·人工智能·后端
IT_陈寒22 分钟前
Vue3性能翻倍的5个秘密:从Composition API到Tree Shaking实战指南
前端·人工智能·后端