前端 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;
}
相关推荐
桂月二二4 小时前
探索前端开发中的 Web Vitals —— 提升用户体验的关键技术
前端·ux
hunter2062065 小时前
ubuntu向一个pc主机通过web发送数据,pc端通过工具直接查看收到的数据
linux·前端·ubuntu
qzhqbb5 小时前
web服务器 网站部署的架构
服务器·前端·架构
刻刻帝的海角5 小时前
CSS 颜色
前端·css
浪浪山小白兔6 小时前
HTML5 新表单属性详解
前端·html·html5
lee5767 小时前
npm run dev 时直接打开Chrome浏览器
前端·chrome·npm
2401_897579657 小时前
AI赋能Flutter开发:ScriptEcho助你高效构建跨端应用
前端·人工智能·flutter
limit for me7 小时前
react上增加错误边界 当存在错误时 不会显示白屏
前端·react.js·前端框架
浏览器爱好者7 小时前
如何构建一个简单的React应用?
前端·react.js·前端框架
qq_392794488 小时前
前端缓存策略:强缓存与协商缓存深度剖析
前端·缓存