css 基础入门

基础入门

css学习网站
前面部分我们知道可以通过直接指定style属性来配置 DOM元素的样式, 比如:

<p style="color:red;font-size:20px;">这边显示该章节的内容……</p>

如果一个页面上 有多个元素都是用了这个样式, 那我们该怎么办?

这种时候我们就需要将样式独立出来, 单独写到一个保存在外部的 .css 文件中, 这就形成了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>
    <style>
        /* 1.id 2.tag 3.class 标签选择基于这三种选择*/
        /* tag name: p,h,a */
        p {
            color:red;font-size:12px;
        }
        /*2 id getElementById,#*/
        #first {
            color:red;font-size:20px;
        }
        /*3 id getElementByClass,.*/
        .second {
            color:rgb(0, 255, 136);font-size:20px;
        }
    </style>
</head>
<body> 
    <p id="first">这边显示该整洁的内容</p>
    <p class="second">test1</p>
    <p>test2</p>
</body>
</html>

CSS语法

我们来看一个简单的例子: 对所有的p标签 使用下面定义的样式

/* 这是个注释 */
p {
  color: red;
}

我们可以看到css的语法由2个部分组成:

  • 选择器, 对应p, 用于选择样式生效的范围,也就是对那些元素生效
  • 样式属性(style attribute), 也就是具体需要添加的样式是啥, 属性有key和value组成, 多个属性用;分开

image

注释是用来解释你的代码,并且可以随意编辑它,浏览器会忽略它。

CSS注释以 /* 开始, 以 */ 结束, 比如上面

CSS选择器

详情请参考: CSS 选择器

基础选择器

基础选择器有3种:

  • 标签, 标签名称, 比如 h1
  • 类, 类名称, 比如 .className
  • ID, 元素id, 比如 #id
标签选择器

以标签名开头,选择所有div元素, 比如前面的p标签选择器就是这种

比如下面是所有h1标签 都显示为红色

h1 {
  color: red;
}
类选择器

给标签取class名,以点(.)加class名开头,选择所有该class名的元素

<h1 class="f12">基础标签</h1>

<style scoped>

.f12 {
  font-size: 12px;
}

</style>

这是最常用的一种选择器

id选择器

给标签取id名,以#加id名开头,具有唯一性

<h2><a id="C4">章节 4</a></h2>

<style scoped>

#C4 {
  color: blue;
}

</style>
群选择器

我们也可以组合使用, 一次选择多个元素,比如 h1, .f12,#C4 都选中, 语法: 以,分隔多个选中的元素

<style scoped>

h1,.f12,#C4 {
  color: blue;
}

</style>

h1,span里面的逗号是或的意思,选择多个

<!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>
        h1,span {
            color:red;font-size: 12px;
        }
    </style>
</head>
<body> 
    <span>extra span</span>
    <!--如何选中h1下面的span-->
    <h1>
        H1
        <span>sub1</span>
        <span>sub2</span>
    </h1>


</body>
</html>
全局选择器

既然有多选,那就有全选, 语法: *

<style scoped>

* {
  color: blue;
}

</style>

层级选择器

如果我们直接选择元素的话,可能会很多,并不能精确选中我们需要的元素, 因此我们就可以引入层级关系来选择, 比如 div元素下的p标签,而不是顶层p标签

总共有4种层级关系选择器:

  • 子选择器: 父元素>子元素
  • 包含选择器: 父元素 包含的元素
  • 兄弟选择器: 当前元素~兄弟元素
  • 相邻选择器: 当前元素+相邻元素
子选择器

用于已知父元素, 选择子元素, 具体语法: 以>隔开父子级元素,(模块名>模块名,修饰>前模块内的子模块)
比如列表下面的所有元素,我都把字体加粗

<ul id="list_menu" class="ul_class">
    <li id="coffee">Coffee</li>
    <li>Tea</li>
    <li>Milk</li>
</ul>

<style scoped>

ul>li {
  font-weight: 600;
}

</style>

子选择其,只能选择其当前层的七子元素, 如果 不是就无法选中, 比如

<ul id="list_menu" class="ul_class">
    <li id="coffee">Coffee</li>
    <li>Tea</li>
    <li>Milk</li>
    <div>
    <li>In Div</li>
    </div>
</ul>
//只能选择子选择器
<!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>
        h1>span {
            color:red;font-size: 12px;
        }
    </style>
</head>
<body> 
    <span>extra span</span>
    <!--如何选中h1下面的span-->
    <h1>
        H1
        <span>sub1</span>
        <span>sub2</span>
    </h1>


</body>
</html>

那如果才能选择该元素下的所有li元素喃? 答案是: 包含选择器

包含选择器

包含选择器 可以选择父元素下的 包含该标签的所有元素, 语法是: 父元素 子元素

<ul id="list_menu" class="ul_class">
    <li id="coffee">Coffee</li>
    <li>Tea</li>
    <li>Milk</li>
    <div>
    <li>In Div</li>
    </div>
</ul>

<style scoped>

ul li {
  font-weight: 600;
}

</style>
//注意style里的h1 span,中间把h1>span改成h1 span。就由子选择器变成了包含选择器
<!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>
        h1 span {
            color:red;font-size: 12px;
        }
    </style>
</head> 
<body> 
    <span>extra span</span>
    <!--如何选中h1下面的span-->
    <h1>
        H1
        <span>sub1</span>
        <div>
            <span>sub3</span>
        </div>
        <span>sub2</span>
    </h1>


</body>
</html>
兄弟选择器

如果你需要选择从一层级的兄弟元素, 比如 #coffee同层的li元素, 语法: 同层元素~需要选中的同层元素

<ul id="list_menu" class="ul_class">
    <li id="coffee">Coffee</li>
    <li>Tea</li>
    <li>Milk</li>
    <div>
    <li>In Div</li>
    </div>
</ul>

<style scoped>

#coffee~li {
  font-weight: 600;
}

</style>
相邻选择器

同理, 只选择相邻的,而不是同层所有的

<ul id="list_menu" class="ul_class">
    <li id="coffee">Coffee</li>
    <li>Tea</li>
    <li>Milk</li>
    <div>
    <li>In Div</li>
    </div>
</ul>

<style scoped>

#coffee+li {
  font-weight: 600;
}

</style>

其他常用选择器

属性选择器

元素会有多属性, 我们可以根据元素的属性来选择元素, 比如下面的input框

<form action="demo_form.php">
    <input type="submit" value="提交">
</form>

<style scoped>

[type=submit] {
  font-size: 22px;
}

</style>
伪类选择器

当我们选中一堆元素后, 如果我们对其中部分元素 进行选择 就可以使用伪类选择器

语法如下:

选择的元素:函数方法
  • first-child: 第一个
  • last-child: 最后一个
  • nth-child(n): 第n个元素
  • not(): not函数, 不包含
<ul id="list_menu" class="ul_class">
    <li id="coffee">Coffee</li>
    <li>Tea</li>
    <li>Milk</li>
</ul>

<style scoped>

ul>li:first-child {
  font-weight: 600;
}

</style>

所有CSS伪类/元素请参考: CSS伪类
https://www.runoob.com/css/css-pseudo-classes.html

伪类选择器hover

只有当鼠标放到该元素上的时候,格式才会生效

<!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>
        h1>span:hover {
            color:red;font-size:20px;
        }
    </style>
</head>
<body> 
    <span>span0</span>
    <h1>
        H1
        <span>span1</span>
        <span>span1</span>
    </h1>
</body>
</html>

CSS引入方式

内联

这种是在标签内直接写的,style="attr:value;..."

<el-table
    :data="tableData"
    style="width: 100%">
    ...
</el-table>

内嵌

//通过style标签定义的样式

<style scoped>

ul>li:first-child {
  font-weight: 600;
}

</style>

外联

当样式需要被应用到很多页面的时候,外部样式表将是理想的选择。使用外部样式表,你就可以通过更改一个文件来改变整个站点的外观

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

样式基础

CSS单位

我们在布局或者设置字体大小的时候经常看到: 22px;, px其实是css里面长度单位

绝对长度

  • px * 像素 (1px = 1/96th of 1in)

  • cm 厘米

  • mm 毫米

  • in 英寸 (1in = 96px = 2.54cm)
    相对长度

  • em 它是描述相对于应用在当前元素的字体尺寸,所以它也是相对长度单位。一般浏览器字体大小默认为16px,则2em == 32px

  • ex 依赖于英文字母小 x 的高度

  • ch 数字 0 的宽度

  • rem rem 是根 em(root em)的缩写,rem作用于非根元素时,相对于根元素字体大小;rem作用于根元素字体大小时,相对于其出初始字体大小

  • vw viewpoint width,视窗宽度,1vw=视窗宽度的1%

  • vh viewpoint height,视窗高度,1vh=视窗高度的1%

  • vmin vw和vh中较小的那个。

  • vmax vw和vh中较大的那个。

<!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>
        h1 span {
            color:red;font-size: 12px;
        }
    </style>
</head> 
<body> 
    <span>extra span</span>
    <!--如何选中h1下面的span-->
    <h1>
        H1
        <span>sub1</span>
        <div>
            <span>sub3</span>
        </div>
        <span>sub2</span>
    </h1>
/*这里会产生一个宽度始终占屏幕80%,高度占100%的*/
<div style="background-color: blue;width: 80vw;height: 100vh;">
</div>
</body>
</html>

CSS颜色

请参考: CSS 颜色
https://www.w3school.com.cn/cssref/css_colors.asp

常用属性

这里主要介绍下用于布局的常用属性

元素尺寸控制

  • height 设置元素的高度。
  • width 设置元素的宽度。
  • line-height 设置行高。
  • min-width 设置元素的最小宽度。
  • min-height 设置元素的最小高度。
  • max-height 设置元素的最大高度。
  • max-width 设置元素的最大宽度。
<div style="height: 220px;width:440px">
    <p>我们的内容</p>
</div>

盒子模型

image

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

Display

  • inline: 现在在一行
  • block: 块元素是一个元素,占用了全部宽度,在前后都是换行符
  • flex: flex布局, 见后面参考
<div>
    <li style="display: inline;">Tea</li>
    <li style="display: inline;">Milk</li>
</div>

<div>
    <span style="display: block;">span1</span>
    <span style="display: block;">span2</span>
</div>
<!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>
        .nav {
            display: flex;
            background-color: gray;
            font-size: 20px;
        }
    </style>
</head> 
    <div class="nav">
        <div>
            logo
        </div>
        <div>
            system
        </div>
        <div>
            person
        </div>
    </div>


</body>
</html>

在页面F12后,点击样式,在style里面输入display:flex;后会多出一个图标,可以点击图标选择布局
image

调整内外边框

image
首先我们打开一个很简单的html,是div块元素,正如前面所说,div是一个快元素,点击选择这个div,可以看到右下角有一个盒子模型,展示了这个div的外边框,内边框等信息
接下来我们可以修改盒子模型信息image
我们直接在右上角编辑,编辑margin,padding的像素,中间空格间隔。可以发现中间蓝色的部分值是上一个图总的像素减去内外边框的值,内外边框可以写4个值,分别是上右下左的顺时针方向

Overflow

overflow 属性可以控制内容溢出元素框时在对应的元素区间内添加滚动条

  • visible 默认值。内容不会被修剪,会呈现在元素框之外。
  • hidden 内容会被修剪,并且其余内容是不可见的。
  • scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。
  • auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
  • inherit 规定应该从父元素继承 overflow 属性的值
<div id="overflowTest">
    <p>这里的文本内容是可以滚动的,滚动条方向是垂直方向。</p>
    <p>这里的文本内容是可以滚动的,滚动条方向是垂直方向。</p>
    <p>这里的文本内容是可以滚动的,滚动条方向是垂直方向。</p>
    <p>这里的文本内容是可以滚动的,滚动条方向是垂直方向。</p>
    <p>这里的文本内容是可以滚动的,滚动条方向是垂直方向。</p>
    <p>这里的文本内容是可以滚动的,滚动条方向是垂直方向。</p>
</div>

<style scoped>
#overflowTest {
    background: #4CAF50;
    color: white;
    padding: 15px;
    width: 80%;
    height: 100px;
    overflow: scroll;
    border: 1px solid rgb(150, 18, 18);
}
</style>

浮动

控制元素左移还是右移

  • left
  • right
    元素浮动之后,周围的元素会重新排列,为了避免这种情况,使用 clear 属性
<div>
    <span style="display: block;">span1</span>
    <span style="display: block;">span2</span>
</div>

<div id="overflowTest" style="clear:both">
</div>

对齐

我们以常见的剧中为例:

<div >
    <p>我是垂直居中的。</p>
</div>

如果仅仅是为了文本在元素内居中对齐,可以使用 text-align: center

设置行高到div 就整体剧中了

常用网站

相信我, 你CSS是写不出好看的样式的, 看看下面这些工具吧

posted @ 2022-09-18 14:07  liwenchao1995  阅读(60)  评论(0编辑  收藏  举报