前端开发中的样式

目录

基础知识回顾

样式表⭐⭐

内联样式表

嵌入样式表

外部样式表

选择器

ID选择器(#id)、类选择器(.class)、标签选择器⭐⭐

伪类/伪元素选择器

伪类选择器(a:hover   ul li:nth-child(odd))逻辑选择元素

伪元素(div::after)抽象创造元素

特殊符号选择器

群组选择器(’h1,h2’)同时选择

子元素选择器(’h1 sub‘)

直接子元素选择器(’h1>son’)

相邻兄弟选择器(’h1+bro’)

兄弟选择器(’h1~bros’)

样式优先级⭐⭐⭐

盒模型

content-box 内容盒模型(W3C盒)  和 border-box 边框盒模型(IE 盒)

单位⭐⭐⭐

​​​​​​​position关键字⭐⭐⭐

BFC规范

问题

外边距重叠:magrin=max(top,bottom)

浮动导致父高度塌陷

不浮动的元素被浮动元素覆盖

常见触发条件

overflow

flex布局

flex-direction:row/column(-reverse)

justify-content:flex-end、主轴

align-items:flex-start、center、stretch、baseline交叉轴

flex-grow:0 放大比例

flex-shrink : 1缩小比例

flex-basis:auto(main axis size)

flex:1=flex-grow:0, flex-shrink:1 ,flex-basis:auto

行内素inline、块级元素block和行内块元素inline-block⭐⭐⭐

居中

水平居中

块元素margin:auto

行内元素->block+margin:auto

文本text-align=center(除了p)

水平垂直居中

transform:translate(-50%)+top+left: 50%;

flex:align-items/justify-content:center

开发进阶

css预处理语言

Scss

嵌套

常用样式

底部absolute+ bottom:0​​​​​​​

基础知识回顾

标题中的样式表,并列选择器均按按优先级高到低排序

样式表⭐⭐


内联样式表<style="...">

<p style="background:red"></p>


嵌入样式表<style type="text/css">p{...}</style>

<head>
 
<title></title>
 
<style type="text/css">
 
p{
 
background-color:yellow;
 
}
 
</style>
 
</head>


外部样式表<link href="xxx.css" rel="stylesheet" type="text/css"/>

rel=relationship

href=hypertext Reference

<head>
 
<title></title>
 
<link href="xxx.css" rel="stylesheet" type="text/css"/>
 
</head>

通过 link 进行对外部CSS样式文件的引用,也可以引用网上别人写好的样式

选择器

ID选择器(#id)、类选择器(.class)、标签选择器⭐⭐

<html>
    <head>
        <meta charset=utf-8>
        <style type="text/css">
            div{
                color:#ff0000;
                font-size:20px;
            }
            .green{
                color:#008000;
            }
            #black{
                color:#000000;
            }
        </style>
    </head>
    <body>
        <div>红色</div>
        <div class='green'>绿色</div>
        <div id='black'>黑色</div>
    </body>
</html>

伪类/伪元素选择器

伪类选择器(a:hover   ul li:nth-child(odd))逻辑选择元素

selector:pseudo-class {property:value;}

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<style>
a:link {color:#000000;}      /* 未访问链接*/
a:visited {color:#00FF00;}  /* 已访问链接 */
a:hover {color:#FF00FF;}  /* 鼠标移动到链接上 */
a:active {color:#0000FF;}  /* 鼠标点击时 */
</style>
</head>
<body>
<p><b><a href="/css/" target="_blank">这是一个链接</a></b></p>
<p><b>注意:</b> a:hover 必须在 a:link 和 a:visited 之后,需要严格按顺序才能看到效果。</p>
<p><b>注意:</b> a:active 必须在 a:hover 之后。</p>
</body>
</html>
  • nth-child(n)

nth-child(n)匹配属于其父元素的第n个子元素,不论元素类型,n可以是数字、关键词、或公式。关键词odd和even是可用于匹配下标是奇数或偶数的子元素的关键词(第一个子元素的下标是 1)

<html>
    <head>
        <meta charset=utf-8>
        <style type="text/css">
            ul li:nth-child(even) {
                background-color: rgb(255,0,0);
            }
        </style>
    </head>
    <body>
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
        </ul>
    </body>
</html>

伪元素(div::after)抽象创造元素

<head>
  <meta charset=utf-8>
  <style type="text/css">
    div::after{
      content:"";
      width: 20px;
      height: 20px;
      background-color: rgb(255,0,0);
      display: block;
    }
  </style>
</head>
<body>
<div></div>
</body>
</html>

特殊符号选择器

群组选择器(’h1,h2’)同时选择

/* 表示同时选择h1,h2 */
h1, h2 {
  ...
}

子元素选择器(’h1 sub‘)

/* 表示选择 h1 下面的所有 span 元素,不管是否以 h1 为直接父元素 */
h1 span {
  ...
}

直接子元素选择器(’h1>son’)

/* 表示 h1 下面的所有以 h1 为直接父元素的 span 元素,注意与空格的区别*/
h1 > span {
  ...
}

相邻兄弟选择器(’h1+bro’)

/* 表示选择紧跟在 h1 后的首个兄弟 span 元素,h1 和 span 必须有相同的父元素,即二者必须是同一级元素 */
h1 + span {
  ...
}

兄弟选择器(’h1~bros’)

/* 表示选择 h1 后的所有兄弟 span 元素,h1 和 span 必须有相同的父元素,即二者必须是同一级元素。注意与 + 的区别,+ 必须是紧跟着的兄弟元素,而 ~ 不要求紧跟,是所有兄弟元素 */
h1 ~ span {
  ...
}

样式优先级⭐⭐⭐

  • 在同一层级下:权值由高到低
  1. !important  (会覆盖CSS的任何声明,其实与优先级毫无关系)   权值
  2. 内联样式(style=“ ”)                                                                             1000
  3. ID选择器(id=" “)                                                                              100
  4. 伪类选择器(如:hover)
  5. 属性选择器[title]{color:blue;})
  6. Class选择器(class=” ")                                                                   10
  7. HTML标签选择器 (p{})                                                                        1
  8. 通用选择器(*)                                                                                  0
  .table-header {
    th {
      background-color: #F5F7F9 !important;
      padding: 8px 0 !important;
    }
  }
  • 不同层级下:

正常来说权重值越高的优先级越高,但是一直以来没有具体的权重值划分,所以目前大多数开发中层级越深的优先级越高

盒模型

content-box 内容盒模型(W3C盒)  和 border-box 边框盒模型(IE 盒)

width = content宽度

width = content宽度 + padding + border

<div class="content-box"></div>
<div class="border-box"></div>

单位⭐⭐⭐

  1. 绝对长度单位:px  像素
  2. 百分比: % 相对父元素
  3. 相对元素字体大小单位: em
  4. 相对于元素字体大小的单位: rem(默认16px
  5. 相对于视口*宽度的百分比(100vw即视窗宽度的100%): vw
  6. 相对于视口*高度的百分比(100vh即视窗高度的100%): v

​​​​​​​position关键字⭐⭐⭐

  • static(默认)

该关键字指定元素使用正常的布局行为,即元素在文档常规流中当前的布局位置。

此时 toprightbottomleft  z-index 属性无效。

z-index 属性指定一个元素的堆叠顺序

拥有更堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。​​​​​​​

absolute

生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。

元素的位置通过 "left", "top", "right"  "bottom" 属性进行规定。

fixed

生成固定定位的元素,相对于浏览器窗口进行定位。

元素的位置通过 "left", "top", "right"  "bottom" 属性进行规定。

relative

生成相对定位的元素,相对于其正常位置进行定位。

因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。

static 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。
  • inherit

父元素继承 position 属性的值。

  • relative

相对于其正常位置进行定位。

元素先放置未添加定位时的位置,再在不改变页面布局的前提下调整元素位置(因此会在此元素未添加定位时所在位置留下空白)。

  • absolute

相对于 static 定位以外第一个父元素进行定位。

元素会被移出正常文档流,并不为元素预留空间。绝对定位的元素可以设置外边距(margins),且不会与其他边距合并

  • fixed:相对于浏览器窗口进行定位。在屏幕滚动时不会改变
  • sticky(CSS3新增) :基于用户滚动的位置,屏幕滚出时会粘住

BFC规范

BFC块级格式化上下文(Block Fromatting Context)

问题

外边距重叠:magrin=max(top,bottom)

块的上外边距margin-top和下外边距margin-bottom会合并为单个边距(为单个边距的最大值)

浮动导致父高度塌陷

不浮动的元素被浮动元素覆盖

常见触发条件

独立布局,设置后不会被其他元素影响

  • overflow: hidden
  • display: flex | inline-block | table-cell
  • position: absolute | fixed

overflow

描述
visible 默认值。内容不会被修剪,会呈现在元素框之外。
hidden 内容会被修剪,并且其余内容是不可见的。
scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。
auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
inherit 规定应该从父元素继承 overflow 属性的值。

flex布局

flex-direction:row/column(-reverse)

justify-content:flex-end、主轴

space-between 均匀排列每个元素,首个元素放置于起点末尾元素放置于终点
space-evenly 均匀排列每个元素,每个元素之间的间隔相等
space-around 均匀排列每个元素,每个元素周围分配相同的空间

align-items:flex-start、center、stretch、baseline交叉轴

flex-grow:0 放大比例

默认为0,即如果存在剩余空间,也不放大。

flex-shrink : 1缩小比例

默认为1,即如果空间不足,该项目将缩小。

如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。

如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。

负值对该属性无效。

flex-basis:auto(main axis size)

属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。

浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小

flex:1=flex-grow:0, flex-shrink:1 ,flex-basis:auto

flex 属性是 flex-grow, flex-shrink 和 flex-basis 的简写,默认值为 0 1 auto。后两个属性可选。

flex 属性属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)

建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。

/* 一个值,width/height: flex-basis */
flex: 10em;
flex: 30px;
flex: min-content;

/* 两个值:flex-grow | flex-basis */
flex: 1 30px;

/* 两个值:flex-grow | flex-shrink */
flex: 2 2;

/* 三个值:flex-grow | flex-shrink | flex-basis */
flex: 2 2 10%;

行内素inline、块级元素block和行内块元素inline-block⭐⭐⭐

display:inline;// 转换为行内元素
display:block;// 转换为块级元素(float也可)
display:inline-block// 转换为行内块元素

从 HTML 的角度来讲,标签分为:

 文本级标签pspanabiuem

 容器级标签divh系列ullidt

行显示的角度来讲,标签分为:

行内元素:除了p之外,所有的文本级标签,都是行内元素,p是个文本级,但是是个块级元素

块级元素:所有的容器级标签都是块级元素,还有p标签

块标签div、h1~h6、ul、li、table、p、br、form。
特征:独占一行,换行显示,可以设置宽高,可以嵌套块和行


行标签span、a、img、textarea、select、option、input。
特征:只有在行内显示,不会自动进行换行

宽、高不可设置,由内容决定

(img、input、textarea等除外)

(设置float后可以设置宽、高)

对 margin 仅设置左右方向有效,上下无效padding 设置上下左右都有效

居中

相对于父容器居中

水平居中

块元素margin:auto

行内元素->block+margin:auto

<style>
  span {
    display:block;
	margin:auto;
    width: 50%; /* 设置宽度 */
    background-color: yellow; /* 背景颜色仅用于示例目的 */
	text-align:center;
  }
</style>
<span>背景颜色仅用于示例目的</span>

文本text-align=center(除了p)

水平垂直居中

transform:translate(-50%)+top+left: 50%;

top: 50%;left: 50%;, 是以元素左上角为原点,故不处于中心位置,

加上transform:translate(-50%,-50%) ,元素原点(中心点)往上(x轴),左(y轴)移动自身长宽的 50%,

flex:align-items/justify-content:center

只需要设置 align-items:center; 属性

.wrap {
  width: 300px;
  height: 300px;
  border: 1px solid red;
  display:flex;
  justify-content:center;
  align-items:center;
}

.box {
  height: 100px;
  width: 100px;
  border: 1px solid blue;
}

开发进阶

css预处理语言

less, sass, scss都是css预处理语言(也是对应的文件后缀名)。

CSS 预处理器为 CSS 增加一些编程的特性,无需考虑浏览器的兼容性问题,

可以在 CSS 中使用变量、简单的逻辑程序、函数(如变量$main-color)等等在编程语言中的一些基本特性,可以让 CSS 更加简洁、适应性更强、可读性更佳,更易于代码的维护等诸多好处。

开发时用预处理语言,在打包上线时,用webpack再配合loader工具给转成css给浏览器使用。

Scss

在实际开发过程中,scss是常用写法,scss还是越直观越好,这种运算类型的特别是map类型的,尽量不要在实际项目中使用,后续维护成本很高的。

Sass 和 SCSS 其实是同一种东西,我们平时都称之为 Sass,

嵌套

主要解决的就是需要多层来选择的dom元素,不需要重复选择相同的层级

style.scss文件

<style lang="scss" scoped>
.nav{
    height: 50px;
    width: 100%;
    ul {
        list-style: none;
        li {
            float: left;
            width: 20px;
            height: 50px;
        }
    }

}
</style>

输出之后的style.css文件

.nav {
  height: 50px;
  width: 100%;
}
.nav ul {
  list-style: none;
}
.nav ul li {
  float: left;
  width: 20px;
  height: 50px;
}

常用样式

底部absolute+ bottom:0

.btns-wrap {
  width: calc(100% - 40px);//20px padding
  height: 64px;
  background-color: #fff;
  border-top: 1px solid #E4E7ED;
  position: absolute;
  bottom: 0;
  display: flex;
  align-items: center;
}

猜你喜欢

转载自blog.csdn.net/qq_28838891/article/details/131421587
今日推荐