0
点赞
收藏
分享

微信扫一扫

WEB开发基础篇 ---- CSS的基础(四)

TiaNa_na 2022-01-31 阅读 100

此篇文章为基础的CSS学习,暂未涉及CSS3的知识点,为本人学习时的笔记记录,同时也适合初学者学习。喜欢的友友可以关注一下,后续会补充JavaScript,TypeScript,vue2.0,vue3.0以及uni框架等等一系列的前端学习文章。(强者不喜请绕道,本人内心脆弱,勿喷)


继续上篇文章的内容,上次说到css的传统布局有三种:

第一种是标准流,在之前的学习中已经多次接触到标准流的知识了;其次是浮动,上一篇的文章中对浮动的知识已经有了较全面的讲解,并且列举了一个小米商城的布局作为案例;那最后一种布局方式就是今天我们要学习的内容,叫做定位布局。

1. 定位

什么是定位呢?定位实际上就是将盒子定在某一个位置,即摆放盒子,按照定位的方式移动盒子(就好比将家具摆放在家里的某个位置一样)。

定位由两部分组成,分别是定位模式和边便宜(即:定位 = 定位模式 + 边偏移)

那么这时候就有靓仔会说了:“啊你说的这么笼统我们怎么知道什么是定位模式什么是边偏移啊?”

说得好,那么现在我们就来仔细说一下组成定位的两部分分别是什么意思。

定位模式:用于指定一个元素在文档中的定位方式边偏移:决定该元素的最终位置

定位模式有以下四种:

1. static:静态定位

是元素的默认定位,表示没有定位,并且没有边偏移(很少用)语法如下👇

.test{
    position: static;
}

2. relative:相对定位(重点)

相对定位有以下特点

  1. 元素在移动位置的时候,相对于它原来的位置来设置
  2. 原来标准流的位置继续占有,后面的盒子仍以标准流的方式对待(不脱标)

其声明语法如下👇

.test{
    position: relative;
}

3. absolute:绝对定位(重点)

绝对定位有以下特点

  1. 绝对定位是元素在位置移动时,相对它祖先元素来设置(若无祖先元素或祖先元素没有定位则以浏览器为准)
  2. 如果祖先元素有定位且有多个,则以最近一级的祖先元素定位为准
  3. 绝对定位不再占有标准流位置(脱标)
.test{
    position: absolute;
}

由于在设置定位时,绝对定位是脱标的,因此需要在该元素的父元素设置相对定位属性,保留标准流属性。 即,子元素设置绝对定位时需要父元素为相对定位。记不住的话可以记下面的口诀:

口诀:子绝父相(父亲需要占有位置,因此需要相对定位保留标准流属性)

顺便补充一个小知识点,加了绝对定位的盒子不再可以使用margin: 0 auto的方式实现水平居中

若是要实现水平居中则需要这样实现👇

.test{
    left:50%;
    margin-left:-100px; //假设盒子宽度为200px,需要左移盒子一半的宽度
}

4. fixed:固定定位(重点)

固定定位可以使元素固定在浏览器可视区的位置,主要使用场景为:浏览器滚动时元素位置不会发生改变。固定定位具有以下特点:

  1. 以浏览器的可视窗口作为参照移动元素
  2. 跟父元素没有任何关系
  3. 不随滚动条滚动而滚动
  4. 不占有原先位置(脱标)

固定定位的声明语法为👇

.test{
    position: fixed;
}

2. 定位的叠放顺序

有时候多个元素摆放的时候会出现层叠错误的情况,这个时候就要用到声明定位叠放顺序的语法了。其声明语法如下👇

.test{
    z-index: 10;
}

该属性的值越大,则层叠的优先级越高。需要注意的是,这条声明语句的属性值是不带单位的。并且这个声明只能在定位的盒子才可以设置。如果多个元素的z-index值都一致时,则后来者居上。(即后声明的优先级更高)

3. 定位的特殊性

绝对定位和固定定位也和浮动类似

  1. 行内元素添加固定定位或绝对定位,可以直接设置宽高
  2. 块级元素添加固定定位或绝对定位,若不给宽高则会默认为内容的大小(即不再占据整行)
  3. 脱标的盒子不会发生外边据坍塌(即外边距合并)

绝对定位会完全压住盒子(包括文字),但浮动元素只会压住下面的标准流盒子,而不会压住标准流内的文字。

以上就为学习完了定位,这下三种布局方式就学习完毕了。需要用到定位布局的情况很多,在我的开发经历中我常常会使用到定位布局的布局方式。因此这是一块很重要的知识点,需要多加练习才能熟悉掌握。


接下来学习的就是新的知识点了:元素显示与隐藏

4. 元素显示与隐藏

有时候往往会出现需要在与用户交互时,发生一些页面的改变:如填写表单结束后需要隐藏表单,或者点击某个按钮时显示某个元素,以及间隔一定时间隐藏广告等等。因此对界面元素的可视操作就需要使用该知识点进行控制。

其实呢,元素的显示与隐藏还不止一种写法,根据不同的情况我们需要使用不同的显示与隐藏方式

下面我们就来了解一下:

1. display显示隐藏(重点)

display:none(隐藏对象,且不再占有原有位置

display:block(显示元素)

2. visibility显示隐藏

属性值有: inherit(继承上一个父元素的可见性)

visible(可视对象)

hidden(隐藏对象,但继续占有原来的位置

collapse(隐藏表格的行或列)

3. 对溢出部分进行显示或隐藏

属性值有: visible:溢出部分显示

auto:在需要时添加滚动条(显示不完则自动添加)

hidden:溢出部分隐藏(没有删除)

scroll:溢出部分显示滚动条

4. opacity属性

指定了一个元素的不透明度,其值的范围为0~1,即0%到100%的可视度,语法为👇

.light {
  opacity: 0.2;//20%的透明度
}

 5. CSS的高级技巧

1. 精灵图(又叫雪碧图)

为了有效减少服务器接收和发送请求的次数,提高页面加载速度,出现了CSS精灵技术

核心原理:将多张小背景图像整合到一张大图中,则服务器就只需要访问一次请求

精灵图的使用:

移动背景图片位置,此时可以使用background-positon

移动的距离就是目标图片的x和y坐标

需要测量精准的图片和盒子大小

给个案例👇(字母图片自己百度找,此处只展示代码结果)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        span {
            display: inline-block;
        }
        .a {
            width: 30px;
            height: 40px;
            background:url("OIP.jfif");
        }
        .i {
            width: 30px;
            height: 40px;
            background: url("OIP.jfif");
            background-position: 30px, 0px;
        }
        .n {
            width: 30px;
            height: 40px;
            background: url("OIP.jfif");
            background-position: 120px, 4px;
        }
        .k {
            width: 30px;
            height: 40px;
            background: url("OIP.jfif");
        }
    </style>
</head>
<body>
    <span class="a"></span>
    <span class="i"></span>
    <span class="n"></span>
    <span class="k"></span>
</body>
</html>

2. 字体图标(iconfont)

核心思想:展示的是图标,实质是字体

优点:

  1. 字体比图像小,加载渲染快,减少了服务器请求
  2. 兼容所有浏览器
  3. 灵活性高,可以更改大小颜色等

总结:若结构样式比较简单的就用字体图标,若复杂则用精灵图

字体图标可直接在网上下载,这里推荐一个网址:http://www.iconfont.cn/

3. CSS画个三角形(金山的面试题)

核心思路:画一个正方形分为四块,将不需要的三块透明化,剩下的就是需要的三角形了

写法如下👇

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    .box {
        width: 0;
        height: 0;
        border-top: 10px solid pink;
        border-right: 10px solid transparent;
        border-bottom: 10px solid transparent;
        border-left: 10px solid transparent;
    }
</style>
<body>
    <div class="box"></div>
</body>
</html>

4. CSS用户界面样式

1. 鼠标样式

默认情况下鼠标的样式都是一个箭头,在css内是可以改变鼠标的样式的。语法为👇

li {
 cursor: default;
}

其中cursor的属性值有:

  1. default:小白箭头 默认
  2. pointer:小手
  3. move:移动
  4. text:文本
  5. not-allowed:禁止

为了方便大家直接看结果,这里粘份代码大家可以直接运行看结果:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <ul>
        <li style="cursor: default;">白色箭头</li>
        <li style="cursor: pointer;">小手</li>
        <li style="cursor: move;">移动样式</li>
        <li style="cursor: text;">文本样式</li>
        <li style="cursor: not-allowed;">禁止样式</li>
    </ul>
</body>
</html>

2. 表单轮廓线

给表单添加outline属性值即可去掉默认蓝色边框

语法为👇

input {
    outline: none; 
}

3. 文本域防拖拽

防止文本域被拖拽放大影响到别的盒子

textarea{ 
    resize: none; 
}

4. vertical-align属性应用

使图片表单文字等属性垂直对齐,但只针对于行内块元素或行内元素

.test{
    vertical-align:baseline;
}

可选值有👇

  • top  顶部对齐
  • middle  中间对齐
  • bottom 底部对齐
  • 以及上述案例的baseline,基线对齐。

5. 溢出文字部分用省略号显示(重点,常用)

步骤分为:

  1. white-space:nowrap;(强制一行内显示文本)
  2. overflow:hidden(超出部分隐藏)
  3. text-overflow:ellipsis(省略号代替溢出文本)

案例代码如下👇

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 150px;
            height: 80px;
            background-color:pink;
            margin: 100px auto;
            /*normal为正常换行,nowrap为强制不换行*/
            white-space: nowrap;
            /*溢出部分隐藏*/
            overflow:hidden;
            /*省略号代替*/
            text-overflow: ellipsis;
        }
    </style>
</head>
<body>
    <div>
        哈哈哈哈哈哈哈哈哈哈还好
    </div>
</body>
</html>

以上就为这篇文章的全部内容了,至此CSS的知识点也总结得差不多了。那是那句话,需要多练才能掌握知识点。下篇文章将更新HTML5和CSS3的知识点,结束HTML和CSS的学习之后,我们就要进入JavaScript语法,typescript语法以及vue框架的学习了,喜欢前端的友友可以关注一下。溜

举报

相关推荐

0 条评论