CSS基础

一、使用位置

1、内联样式

<h1 style="text-align: center;">这是标题</h1>

2、内部样式  

<head>
    <style>
        /*h1叫做选择器,该css语句是文字居中*/
        h1{
            text-align: center;
        }
    </style>
</head>

3、外部样式

/*在外部新建css文件 style.css,然后引入*/
<link href="./style.css" rel="stylesheet" />

二、选择器

  • 简单选择器(标签名称、id、class来选取元素)
  • 交集选择器(交集选择器如果有元素选择器,必须以元素开头)
  • 关系选择器(根据元素的父子关系判断的选择器)
  • 组合选择器(根据它们之间的特定关系来选取元素)
  • 属性选择器(根据属性或属性值来选取元素)
  • 伪类选择器(一般情况下的使用:第一个子元素,被点击的元素,鼠标移到的元素,等)
  • 伪元素选择器(修改元素中特殊位置的内容)

选择器的比重

内联样式 1000  id选择器100   类和伪类选择器10   元素选择器1  通配选择器0 

内联样式 > id选择器 > 类和伪类选择器 > 元素选择器 >  通配选择器 > 继承样式

注意事项:

(1)交集选择器优先级:所有选择器等级相加

(2)组成交集选择器的优先级(也就是说,内联样式权重始终最大)

(3)如果优先级相同,会使用样式书写位置靠下的

(4)继承样式没有优先级,都能覆盖

(5)可以在某一个样式后面添加 !important,则此样式获得最高优先级,超过内联样式

p {
    background-color: antiquewhite !important;
}

1、简单选择器

<body>
   <div class="d" id="a">我是div标签</div>
</body>

<style>
/*标签选择*/  
div {
color: red
}

/*class选择器*/  
.d {
color: red
}

/*id选择器*/
#a {
color: "red"
}
</style>

 2、交集选择器:同时满足多个条件

<style>
/*选择class为a的div标签*/ 
/*交集选择器如果有元素选择器,必须以元素开头*/
div.a {
      color: brown;
}


/*选择class同时为a、b、c*/
.a.b.c {
}

</style>

3、关系选择器

<body>
   <div class="d">
      <span>我是第一个</span>
      <p>
         <span>我是第二个</span>
         <div>我是第三个</div>
         <div>我是第四个</div>
      </p>
   </div>
</body>

<style>
/* 选择属性为d的div标签的子元素p的子元素span   语法: 父元素 > 子元素 */
div.d > p > span{
 color: aqua;
}
/* 选择属性为d的div标签所有子元素(选择某个元素的所有子元素)   语法: 祖先 子元素 */
div.d span {
   color: brown;
}
/* 选择span的下一个兄弟标签p   语法: 前一个 + 后一个 */
span + p {
   font-size: 100px;
}
/* 选择p标签的所有div子标签   语法: 兄 ~ 弟 */
p ~  div {
   color: blue;
}

</style>

4、组合器选择器

将多个简单选择器逗号隔开

<style>
.cc, #pas, p{
    color: #4169E1;
}    
</style>

5、属性选择器:通过标签的属性选中元素

<style>
/*选择span标签,id属性为hello的标签*/
span[id = 'hello'] {
 color: antiquewhite;  
}

/*选择span标签,带有id属性的标签*/
span[id] {
 color: antiquewhite;  
}
</style>

6、伪类选择器

一般情况下的使用:第一个子元素,被点击的元素,鼠标移到的元素,等

<body>
   <ul>
      <span>与众不同</span>
      <li>第一个</li>
      <li>第二个</li>
      <li>第三个</li>
      <li>第四个</li>
      <li>第五个</li>
   </ul>
</body>
<style>
/* 需要注意的是,child这些伪类选择的元素,是根据所提供的所有子元素中进行选择 */
/* 始终选择ul的第一个li子元素 */
ul > li:first-child {
   color: aquamarine;
}
/* 始终选择ul的最后一个li子元素 */
ul > li:last-child {
   color: aqua;
}
/* 始终选择ul的第n个li子元素 */
/* n的范围为正整数(0~n) 2n或者even表示选中偶数行 2n+1或odd表示选中奇数行*/
ul > li:nth-child(2n) {
   color: blue;
}

/* 需要注意的是,type这些伪类选择的元素,是根据所提供的所有子元素中同类型进行选择 */
ul > li:first-of-type {
   color: aliceblue;
}
ul > li:last-of-type {
   color: aliceblue;
}
ul > li:nth-of-type(2n) {
   color: aliceblue;
}
</style>

 鼠标移入改变背景颜色

<style>
    div:hover {
       background-color: antiquewhite;
    }   
</style>

7、伪元素选择器

<body>
   <p>shakhdsiuadhsakdhskad<br>sjalsjal</p>
</body>
<style>
/* 将p标签首字母字体放大 */
p::first-letter {
   font-size: 50px;
}
/* 修改元素第一行背景颜色 */
p::first-line {
   background-color: antiquewhite;
}
</style>

三、长度单位

1、像素和百分比

像素:显示器实际上是由一个一个像素组成

百分比:设置具有父元素的元素,子元素相对于父元素的占比(宽高等等)

<body>
   <div class="box1">
      <div class="box2"></div>
   </div>
</body>
<style>
.box1 {
   width: 100px;
   height: 100px;
   background-color: aqua;
}
.box2 {
   width: 50%;
   height: 50%;
   background-color: black;
}
</style>

2、em和rem

em单位转换为像素值的时候,取决于使用它们的元素的font-size的大小,但是有因为有继承关系,所以比较复杂。

rem单位翻译为像素值的时候是由html元素的字体大小决定的,此字体大小会被浏览器中字体大小的设置影响。

1em = 1rem = font-size (font-size 默认16个像素) 

四、颜色

1、RGB值

在css中可以直接用颜色的英文单词来设置颜色。比如:red、green、yellow ····

RGB值:

RGB通过控制3种颜色(red、green、blue)不同的浓度调配不同的颜色,每一种颜色范围在0~255之间。

RGBA:

设置透明度。0不透明,1完全透明

语法:background-color: rgb(0, 0, 255,0.5);

语法:

background-color: rgb(0, 0, 255);     或者

background-color: #19ffff(#红绿蓝,16进制,每一位00~ff)     

2、HLS

HLS语法:

background-color: hls(hue, saturation, lightness)

hue色像(0~360)      saturation饱和度(0~100%)      lightness亮度(0~100%)

HLSA语法:

background-color: hsla(hue, saturation, lightness, alpha)

alpha透明度

五、文档流

网页是一个多层结构,一层摞着一层,通过css可以分别为每一层设置样式,作为用户来讲只能看到最上面的一层。在这些层中,最底部的叫做文档流,文档流是网页的基础。我们所创建的元素,默认都是在文档流中排列的

对于我们来说,元素只存在两个地方,文档流中或者在文档流之外

元素在文档流中的特点

块元素特点:

(1)块元素独占一行,多个快元素至上到下垂直排列。

(2)默认宽度继承父元素(将父元素撑满)

(3)默认高度被内容撑开

行内元素特点:

(1)不会独占一行,只占自身大小,多个行内元素至左向右水平排列

(2)如果一行内不能容纳多个行内元素,会自动换行,继续至左向右水平排列

(3)行内元素默认高度和宽度都是被内容撑开

#e {
   /* 将元素设置为行内元素 */
   display: inline;

   /* 将元素设置为块元素 */
   display: block;
}

六、盒子模型

1、盒子模型基础

将每个元素看成一个盒子。

  • Margin(外边距) - 清除边框外的区域,外边距是透明的。
  • Border(边框) - 围绕在内边距和内容外的边框。
  • Padding(内边距) - 清除内容周围的区域,内边距是透明的。
  • Content(内容) - 盒子的内容,显示文本和图像。

margin(外边距)

div {
如果设置负值,就是相反的作用

上边距和左边距是移动自己
/* 单独由边距 */ 
margin-right: 10px; 
/* 单独上边距 */ 
margin-top: 10px;   

左边距和下边距是移动别的元素
/* 单独左边距 */
margin-left: 10px;   
/* 单独下边距 */ 
margin-bottom: 10px;     
}

border(边框样式)

div { 
   /* 边框粗细 上下左右 */
   border-width: 10px;
   /* 同时指定4个边框 上 右 下 左 */
   border-width: 10px 20px 30px 40px;
   /* 同时指定4个边框 上 左右 下  */
   border-width: 10px 20px 30px;
   /* 同时指定4个边框 上下 左右 */
   border-width: 10px 20px;
   /* 单独指定上边框 */
   border-top-width: 10px;

   /* 边框颜色 */
   border-color: rgb(119, 9, 170); 

   /* 边框样式--实线 */
   border-style: solid;

   /* 外边框为黄色10像素的虚线 */
   border: 10px dotted yellow;
}

补充outline(边框轮廓)

与border用法一样,但是不会影响页面布局,使用该属性设置边框,只会覆盖原有内容,盒子不会移动

padding(内边距)

内边距的设置会影响盒子的大小(父元素上边距和左边距设置过大,会撑开元素)

div {
 /* 内边距为20像素 */
 padding: 20px;
}

2、特点

(1)水平方向布局

(2)垂直方向布局

子元素的高度超过父元素的高度,子元素会溢出。overflow属性处理子元素溢出

<style>
   .a {
      width: 450px;
      height: 450px;
      background-color: aquamarine;
      /* overflow处理子元素溢出 
            visible  默认值不处理
            hidden   溢出裁剪掉,多余内容不要
            scroll   添加滚动条
            auto  根据情况自定义生成xy轴滚动条
         此外还有overflow-y 和 overflow-x 分别单独处理x和y的溢出*/
      overflow: auto;
   }
</style>

(3)外边距的折叠

垂直方向的外边距:

  • 两个相邻元素垂直方向的外边距会重叠;
  • 兄弟元素:相邻兄弟元素垂直方向外边距取最大值;
  • 父子元素:父子元素直方向的相邻外边距,子元素会传递给父元素。这会影响到页面布局,需要处理。

清除父子元素直方向的相邻外边距折叠(高度塌陷原理在六—7,与清除父子元素外边框折叠原理相似):

<head>
   <link href="./reset.css" rel="stylesheet"></link>
   <style>
     .a {
      height: 200px;
      width: 200px;
      background-color: aqua;
     }
     .b {
      height: 100px;
      width: 100px;
      background-color: antiquewhite;
      margin-top: 100px;
     }
     /* .clearfix::after与content、display、clear解决高度塌陷问题
        .clearfix::before与content、display解决父子元素直方向的相邻外边距折叠
        可以作为两种缺陷的解决模板 */
     .clearfix::before, .clearfix::after {
      content: "";
      display: table;
      clear: both;
     }
   </style>
      
</head>

<body>
<div class="a clearfix">
   <div class="b"></div>
</div>
</body>

3、行内元素的盒子模型

行内元素盒子模型的特点:

(1)行内元素不能设置高度和宽度。只能被内容撑开

(2)行内元素设置的padding、border,垂直方向的padding、border不会影响页面布局,会覆盖bottom方向的元素,不会造成挤压。

(3)行内元素设置的margin,水平方向相加,垂直方向不会有任何影响

4、修改盒子样式

(1)box-sizing属性设置盒子大小计算方式

默认情况下,盒子可见大小由 border+ padding + content

/* width和height设置盒子的内容区大小*/
#e {
      height: 45px;
      width: 45px;
      box-sizing: content-box;
}
/* width和height设置了整个盒子的大小(外边距) */
#e {
    height: 45px;
    width: 45px;
    box-sizing: border-box;
}

(2)盒子阴影

div.d1 a {
      /* 设置盒子的阴影,第一个值:水平偏移量,正值向右,负值向左;第二个值:垂直偏移量;第三个值:模糊半径,值越大,越模糊,可忽略不写;第四个值:阴影颜色 */
      box-sizing: 10px 10px red;
}

(3)盒子圆角

.d {
      box-shadow: 20px 20px 10px red;
      /* 同时设置盒子4个脚的圆角,每个角也可以单独设置 */
      border-radius: 10px;
}

七、浮动float

作用:将块元素放在一行中

1、浮动的特点

  • 设置浮动以后,水平布局的等式便不需要强制成立
  • 元素设置浮动以后,会完全脱离文档流(元素的一些特点会发生变化)
  • 块元素:块元素不再独占一行,如果不单独设置元素宽度和高度,元素的宽度和高度被内容撑开
  • 行内元素:行内元素和脱离文档流的块元素特点一样,也就是说,脱离文档流之后,就没有块元素和行内元素之分了!
  • 文档流在浮动层之下
  • 相邻的两个块元素,第一个元素不浮动,第二个元素浮动,则不存在覆盖。第一个元素浮动,第二个元素不浮动,则第二个元素会被覆盖(文字不会被覆盖,可以设置文字环绕图片的效果)
  • 如果一行中容纳不下多个浮动元素,会自动换行 
.d {
width: 200px;
height: 200px;
background-color: aqua;
/* 默认值为none,
right:元素向右浮动
left:元素向左移动
*/
float: left;
}

针对第六个特点,设置不覆盖的解决方法

clear:清除浮动对当前元素的影响。right:清除右浮动。left:清除左浮动。both:清除两侧影响最大的那个的浮动效果。

clear属性原理:以本例来说,设置清除浮动以后,浏览器会自动为2号元素添加一个margin-top = 100px(自动计算),使其位置不受浮动元素影响。但是1号元素依旧是浮动元素性质不变!

<head>
   <title>clear演示</title>
   <link href="./reset.css" rel="stylesheet"></link>
   <style>
      div {
         font-size: 50px;
      }
       .a, .b{
         width: 100px;
         height: 100px;
       }
       .a {
         float: left;
         background-color: antiquewhite;
       }
       .b {
         background-color: aqua;
         clear: both;
       }
       .c {
         width: 100px;
         height: 200px;
         background-color: tomato;
         float: right;
       }
   </style>
 </head>

<body>
  <div class="a">1</div>
  <div class="c">3</div>
  <div class="b">2</div>
</body>

2、浮动造成的高度塌陷

在浮动布局中,父元素高度设置为auto,父元素会被子元素撑开。但是子元素设置了浮动,脱离了文档流。就会导致父元素高度丢失。这就是高度塌陷

3、BFC解决浮动造成的高度塌陷

(1)什么是BFC(块级格式化环境)

官方定义:BFC(Block Formatting Context)块格式化上下文, 是Web页面的可视CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。 说人话:BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素

(2)特点

  • 相邻的两个块元素,第一个元素浮动,第二个元素不浮动,则第二个元素会被覆盖,第二个元素开启bfc之后,就不会被覆盖。
  • 开启bfc的父元素外边距,当中子元素的外边距不会作用于父元素的外边距
  • 开启bfc的元素可以包含浮动元素
  • BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。

(3)如何创建一个BFC

  • 浮动元素(元素的float不是 none,指定float为left或者right就可以创建BFC)
  • 绝对定位元素(元素的 position 为 absolute 或 fixed)
  • display:inline-block,display:table-cell,display:flex,display:inline-flex
  • overflow指定除了visible的值(推荐 overflow: hidden

4、after伪元素解决高度塌陷

after伪元素的原理代码

<head>
   <title>after伪元素的原理代码</title>
   <link href="./reset.css" rel="stylesheet"></link>
   <style>
      .a {
         border: 10px salmon solid;
      }
      .b {
         width: 200px;
         height: 200px;
         float: left;
         background-color: aqua;
      }
      .c {
         clear: both;
      }
   </style>
      
</head>

<body>
<div class="a">
   <div class="b"></div>
   <div class="c"></div>
</div>
</body>

 

解决方案

      /* 替代属性为c的div标签的作用 */
      .a::after {
         /* 该伪元素显示的文字(不需要就空字符串) */
         content: "";
         /* 清除浮动带来的覆盖问题 */
         clear: both;
         /* 该伪元素默认是一个行内元素,转换成块元素 */
         display: block;
      }

八、定位

定位:一种更高级的布局手段,通过定位可以将元素摆放到页面任意位置

1、定位分类

  • static:默认值,静态定位

  • relative:相对定位

  • absolute:绝对定位

  • fixed:固定定位

  • sticky:粘滞定位

2、相对定位

(1)设置了相对定位,不设置偏移量,元素位置不会发生变化。设置偏移量的属性(top bottom left right)

(2)定位点,设置偏移量的盒子模型的右上角的点为原点

(3)外边距与偏移量的设置不会重叠,外边距会影响页面布局,而偏移量不会影响页面布局,会覆盖其他元素。也就说,整个盒子跟随偏移。

(4)如果该盒子设置的偏移位置有其他元素,偏移盒子会覆盖其他元素。也就是说,相对定位会提升元素的层级(但是不会脱离文档流,不会改变元素性质)

(5)开启相对定位

.b {
    /* 开启相对定位 */
    position: relative;
    bottom: 100px;

}

3、绝对定位

(1)设置绝对定位,不设置偏移量,元素位置不会发生变化。

(2)开启绝对定位后,元素会从文档流中脱离,从而改变元素性质。绝对定位会提升元素的层级(覆盖其他元素)。

(3)定位点,距离当前元素最近的开启了定位的祖先块元素。如果没有就相对于根元素进行定位。

.d {
    // 使用相对定位,让元素居中的方法。垂直方向也使用
    margin-top: auto;
    margin-bottom: auto;
    position: absolute;
    bottom: 0;
    top: 0;
}

4、固定定位

固定定位也是一种绝对定位,拥有绝对定位的绝大部分特点。唯一不同的是定位点参照浏览器的视口(浏览器可见部分)。

5、粘滞定位

// TODO 暂时不学

6、元素的层级

对于开启定位的元素,可以通过z-index属性设置元素的层级,值越大,层级越高。

对于兄弟元素,如果层级一样,优先显示下方的元素。

对于祖先元素和后代元素,祖先元素的层级再高,也不会盖住后代元素。

九、浏览器的默认样式

默认样式会影响浏览器的页面布局,有时候需要去除默认样式

reset.css,样式重置为0

/* v2.0 | 20110126
http://meyerweb.com/eric/tools/css/reset/ 
License: none (public domain)
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed, 
figure, figcaption, footer, header, hgroup, 
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}

normalize.css 统一样式

https://necolas.github.io/normalize.css/8.0.1/normalize.css

十、其他样式

1、diaplay样式

#e {
   /* 将元素设置为行内元素 */
   display: inline;

   /* 将元素设置为块元素 */
   display: block;

   /* 将元素设置为行内块元素 */
   /* 行内块元素:既可以设置高度和宽度,还不会独占一行 */
   display: inline-block;

   /* 解决高度塌陷问题,解决父子元素直方向的相邻外边距折叠时可以使用 */
   display: table;

   /* 隐藏一个元素 */
   display: none;
}

2、display和visibility隐藏元素的区别

#e {
   /* 隐藏元素,但是会占据该隐藏元素的位置 */
   visibility: hidden;

   /* 显示元素,默认值 */
   visibility: visible;
}

3、在父元素中垂直居中

/* 想要在父元素中垂直居中,只需要设置父元素的line-height和height高度一致即可 */
.d1 {
      height: 45px;
      line-height: 45px;
}

4、去除超链接的下划线

a {
     text-decoration: none;
}


版权声明:本文为asddasddeedd原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。