[前端学习笔记] CSS基础笔记02

一、CSS三特性

CSS三大特性:层叠性、继承性、优先级。

  1. 层叠性
    相同的选择器下
    样式冲突:就近原则覆盖。
    样式不冲突:不影响。
<style>
        div {
            color: red;
            font-size: 12px;
        }
        div {
            /* 文本颜色覆盖为粉色,字体大小不影响 */
            color: pink;
        }
</style>
  1. 继承性
    子标签会继承父标签的某些样式(主要是文字方面的样式),如文本颜色、字号。
<div>
       <p>龙生龙,凤生凤,老鼠生的孩子会打洞</p>
</div>

<style>
/* p 继承 div 的样式 */
        div {
            color: pink;
            font-size: 14px;
        }
</style>
  1. 优先级
<!-- 
    选择器类型相同:就近原则
    选择器类型不同:看选择器权重(!important【10000】 > 行内样式【1000】 > ID选择器【100】 > 类/伪类选择器【10】 > 元素选择器【1】 > 继承【0】 > 通配符)
    注意:复合选择器会有权重叠加的问题(加法),权重虽然会叠加,但是永远不会有进位。
    
    下面的例子里:有!important,行内样式,ID选择器,类选择器,元素选择器指定文本颜色。根据权重!important的优先级最高,所以显示为粉色。
 -->
 
 <div class="test" id="demo" style="color: purple">你笑起来真好看</div>
 <ul class="nav">
        <li>大猪蹄子</li>
        <li>大肘子</li>
        <li>猪尾巴</li>
 </ul>
 
 <style>
        .test {
            color: red;
        }
        div {
            color: pink!important;
        }
        #demo {
            color: green;
        }
        /* 复合选择器 */
        /* ul li 权重1 + 1 = 2 */
        ul li {
            color: green;
        }
        /* .nav li权重10 + 1 = 11 */
        .nav li {
            color: pink;
        }
</style>

二、盒子模型

  1. 盒子模型四要素:border边框、content内容、padding内边距、margin外边距。
    盒子模型
  2. 边框
    边框三属性:border-width粗细、border-style边框样式、border-color边框颜色。边框会影响盒子的实际大小。
<style>
        div {
            width: 300px;
            height: 200px;
/* border-width 边框粗细  一般情况下都用px */
            border-width: 5px;
/* border-style 边框样式:solid实线边框  dashed虚线边框  dotted点线边框*/
            border-style: solid; 
            border-color: pink;
/* 边框的复合写法,没有顺序 */
            border: 5px solid pink;

            /* 上边框 */
            border-top: 5px solid pink;
            /* 下边框 */
            border-bottom: 10px dashed purple;
            /* 左边框 */
            border-left: 10px  dotted blue;
            /* 右边框 */
            border-right: 10px dashed orange;
        }
</style>

圆角边框,是圆/椭圆与边框的交集形成圆角效果。写法如下:

3. 圆形的做法:
<div class="yuanxing"></div>
4. 圆角矩形的做法:
<div class="juxing"></div>
5. 可以设置不同的圆角:
<div class="radius"></div>

<style>
        /* 圆形:半径=宽度和高度的一半 */
        .yuanxing {
            width: 200px;
            height: 200px;
            background-color: pink;
            /* border-radius: 100px; */
            border-radius: 50%;
        }
        /* 圆角矩形:半径=高度的一半 */
        .juxing {
            width: 300px;
            height: 100px;
            background-color: pink;
            border-radius: 50px;
        }
        /* 不同圆角:顺时针(↖️ ↗️ ↘️ ↙️) */
        .radius {
            width: 200px;
            height: 200px;
            border-radius: 10px 20px 30px 40px; */
            border-radius: 10px 40px; */
            /* ↖️ */
            border-top-left-radius: 20px;
        }
</style>
  1. 内边距
    内边距也会影响盒子大小。若盒子本身没有写width/height属性,则此时padding不会撑大盒子。
<!-- padding-top, padding-bottom, padding-left, padding-right -->
<style>
        div {
            width: 200px;
            height: 200px;
            background-color: pink;
            padding-left: 20px;
            padding-top: 30px;
			
			/* 复合写法 */
			/* 1.上右下左 */
            padding: 5px;
            /* 2.上下 左右 */
            padding: 5px 10px;
            /* 3.上 右左 下 */
            padding: 5px 10px 20px;
            /* 4.上右下左 顺时针 */
            padding: 5px 10px 20px 30px;
        }
</style>
  1. 外边距
    盒子和盒子之间的距离。
<!-- margin-top, margin-bottom, margin-left, margin-right -->
<!-- margin的复合写法规则与padding一致 -->
<style>
      .header {
          width: 900px;
          height: 200px;
          background-color: pink;
          /* 块级盒子水平居中对齐写法,盒子必须指定了宽度!! */
          margin: 0 auto; 
      }
</style>

外边距合并问题。分为两类:
1)相邻块级元素垂直外边距合并:只给其中一个加外边距即可。

<div class="damao">大毛</div>
<div class="ermao">二毛</div>

<style>
        .damao, .ermao {
            width: 50px;
            height: 50px;
            background-color: pink;
        }
        /* 合并为:最大值200px。并不是两者相加 */
        .damao {
            margin-bottom: 100px;
        }
        .ermao {
            margin-top: 200px;
        }
</style>

2)嵌套块级元素垂直外边距父元素塌陷。当子元素外边距大于父元素外边距时,父元素会塌陷下来,有三种解决方案。

<div class="father">
        <div class="son"></div>
</div>

<style>
        .father {
            width: 400px;
            height: 400px;
            background-color: purple;
            margin-top: 50px;
            /* 方法1.为父元素定义透明边框 */
            border: 1px solid transparent;

            /* 方法2.为父元素定于上内边距 */
            padding: 1px;

            /* 方法3.(常用)为父元素添加overflow: hidden */
            overflow: hidden;
        }
        .son {
            width: 200px;
            height: 200px;
            background-color: pink;
            margin-top: 100px;
        }
</style>

三、阴影

  1. 盒子阴影
    盒子阴影不占空间,不会影响其他盒子排列。
<style>
        div:hover {
/* box-shadow: 水平位置、垂直位置、模糊距离(虚实)、尺寸、颜色 内阴影(insert)->默认外阴影outset,但不能写,会让阴影失效 */
            box-shadow: 10px 10px 10px -4px rgba(0, 0, 0, .3);
        }
</style>
  1. 文字阴影
    text-shadow比盒子阴影box-shadow少了尺寸和内部阴影属性。
<style>
        div {
            font-size: 50px;
            color: orangered;
            font-weight: 700;
            /* 水平位置 垂直位置 虚实 颜色 */
            text-shadow: 5px 5px 8px rgba(0, 0, 0, .3);
        }
</style>

四、浮动(float)

传统网页布局有三种方式。
1)普通流/标准流:标签按照规定好默认方式排列,块级元素、行内元素、行内块元素。
2)浮动:创建浮动框移动到左边缘/右边缘,最典型的应用是让多个块级元素一行内排列显示。
3)定位:元素自由定位布局。
网页布局第一准则:【多个块级元素,纵向排列用标准流,横向排列用浮动】
这一章节为浮动的知识和用法。

  1. 浮动特性
    1)浮动元素会脱离标准流。
    浮动元素脱离标准流的控制浮动到指定位置;
    浮动的盒子不再保留原先的位置,下面的元素上移。
    2)浮动元素会在一行内显示,并且元素顶部对齐。
    如果一行装不下,多出的盒子会另起一行对齐。
    3)浮动元素具有行内块元素的特性。
    任何元素都可以浮动。不管原先是什么模式的元素,添加浮动之后具有“行内块元素”的特性。如果行内元素有了浮动, 则不需要转换块级\行内块元素就可以直接给高度和宽度。
  2. 浮动布局
    1)先用标准流的父元素排列上下位置,之后加入浮动的子元素排列左右位置。
    2)先设置盒子大小,再设置盒子位置。
<!-- 
1. 浮动和标准流的父盒子搭配
2. 浮动的盒子只会影响后面的标准流
3. 如果一个子元素浮动了,其他盒子也浮动,这样保证这些子元素一行显示 
-->
<div class="box">
        <div class="damao">大毛</div>
        <div class="ermao">二毛</div>
</div>

<style>
        .box {
            width: 900px;
            height: 300px;
            background-color: pink;
            margin: 0 auto;
        }
        .damao {
            float: left;
            width: 200px;
            height: 200px;
            background-color: purple;
        }
        .ermao {
            float: left;
            width: 200px;
            height: 150px;
            background-color: red;
        }

</style>
  1. 清除浮动
    清除浮动原因是:父盒子无高度;浮动不占位置;父级高度为0时影响下面标准流的盒子。有四种清除浮动的方法。
    1)额外标签法/隔墙法【在浮动元素末尾添加一个空标签】
    优点:通俗易懂,书写方便,是W3C推荐做法
    缺点:添加无意义的标签,结构化较差
<div class="box">
        <div class="damao">大毛</div>
        <div class="ermao">二毛</div>
        <!-- 这个新增的盒子要求必须是块级元素不能是行内元素 -->
        <div class="clear"></div>
</div>
<div class="footer"></div>

<style>
     /* 父盒子无高度,且里面的元素浮动 */
        .box {
            width: 800px;
            border: 1px solid blue;
            margin: 0 auto;
        }
        .damao {
            float: left;
            width: 300px;
            height: 200px;
            background-color: purple;
        }
        .ermao {
            float: left;
            width: 200px;
            height: 200px;
            background-color: pink;
        }
        /* 中间夹的clear标签 */
        .clear {
            clear: both;
        }
        /* 标准流 */
        .footer {
            height: 200px;
            background-color: black;
        }
    </style>

2)父级添加overflow属性【在浮动的父级添加overflow: hidden;】
优点:代码简洁
缺点:无法解决溢出浮动的部分

/* 改动上面的代码,去掉clear,给父元素加overflow属性 */
.box {
      overflow: hidden;
      width: 800px;
      border: 1px solid blue;
      margin: 0 auto;
}

3)父级添加after伪元素
【额外标签法的升级版,通过CSS 在浮动的标签后面加了一个空盒子】

/* 直接复制粘贴在CSS中,在要清除浮动的父盒子使用此类名 */
.clearfix:after {
      content: "";
      display: block;
      height: 0;
      clear: both;
      visibility: hidden;
}
/* IE6、7专有,照顾低版本浏览器 */
.clearfix {
      *zoom: 1;
}

4)父级添加双伪元素
【通过CSS 在浮动的标签前面后面都加了一个空盒子】

/* 直接复制粘贴在CSS中,在要清除浮动的父盒子使用此类名.clearfix */
.clearfix:before,
.clearfix:after {
      content: "";
      /* 转化为块级元素并在一行显示 */
      display: table;
}
.clearfix:after {
      clear: both;
}
.clearfix {
      *zoom: 1;
}

五、定位(position)

  1. 静态定位 static
    默认。标准流,无定位。
  2. 相对定位 relative
    相对于自己原本的位置移动,不脱离标准流,继续保留原来位置。
.box1 {
     position: relative;
     /* 以自己原来的位置为基准,距离上面100px,距离左边100px */
     top: 100px;
     left: 100px;
            
     width: 200px;
     height: 200px;
     background-color: pink;
}
  1. 绝对定位 absolute
    无父亲或父亲无定位,则相对于浏览器可视区的位置定位;父亲有定位,相对于父级的位置定位。绝对定位脱离标准流,不保留原来位置。
<style>
        /* 爷爷有定位 */
        .yeye {
            position: relative;
            width: 800px;
            height: 800px;
            background-color: hotpink;
            padding: 50px;
        }
        /* 父亲无定位 */
        .father {
            width: 500px;
            height: 500px;
            background-color: skyblue;
        }
        /* 儿子以爷爷为准定位,离最近的父元素为准 */
        .son {
            position: absolute;
            left: 30px;
            bottom: 10px;
            width: 200px;
            height: 200px;
            background-color: pink;
        }
</style>
  1. 固定定位 fixed
    固定于浏览器可视区的位置。脱离标准流,不占有原来的位置。
<div class="fixed"></div>
<div class="w">版心盒子</div>

<style>
        .w {
            width: 800px;
            height: 1400px;
            background-color: pink;
            margin: 0 auto;
        }
        .fixed {
        /* 实现固定盒子贴在版心右侧的方法: */
            position: fixed;
            /* 1. 先走浏览器宽度的一半 */
            left: 50%;
            /* 2. 利用margin走版心盒子宽度的一半距离 */
            margin-left: 405px;
            width: 50px;
            height: 150px;
            background-color: skyblue;
        }
</style>
  1. 粘性定位
    是相对定位relative和固定定位fixed 的混合,兼容性差(IE不支持)。
<!-- 
1.以浏览器的可视窗口为参照点移动元素(固定定位特性)
2.粘性定位占有原来的位置(相对定位特性)
3.必须添加top bottom left right其中一个才有效
-->
<style>
        .nav {
            position: sticky;
            /* 当距离上面为0时变为粘性定位 */
            top: 0;
            width: 800px;
            height: 50px;
            background-color: pink;
            margin: 100px auto;
        }
</style>
  1. 定位堆叠顺序
    只有定位的盒子才有堆叠顺序z-index,标准流和浮动的没有。是叠放的优先级,0为最底层,数字越大在更高的层,高层压住底层。
    下面例子中熊二的z-index为2,比熊大的1大,所以熊二显示在熊大的上方。
<body>
    <div class="box xiongda">熊大</div>
    <div class="box xionger">熊二</div>
</body>

<style>
        .box {
            /* 两者为定位的盒子 */
            position: absolute;
            top: 0;
            left: 0;
            width: 200px;
            height: 200px;
        }
        .xiongda {
            background-color: red;
            /* 背景透明度 */
            opacity: 0.5;
            /* 叠放优先级 */
            z-index: 1;
        }
        .xionger {
            background-color: green;
            left: 50px;
            top: 50px;
            z-index: 2;
        }
</style>

六、显示与隐藏

  1. 显示隐藏元素之display
    此方法隐藏元素后不再占有原来的位置!
display:none 隐藏
display:block\inline\inline-block 显示
  1. 显示隐藏元素之visibility
    此方法隐藏元素后占有原来的位置!
visibility:hidden 隐藏
visibility:visible 显示
  1. 显示隐藏元素之overflow
.peppa {
            /* 溢出显示 */
            overflow: visible; 
            /* 溢出隐藏 */
            overflow: hidden;
            /* scroll 溢出的部分显示滚动条  不溢出也显示滚动条 */
            overflow: scroll;
            /* auto 溢出的时候才显示滚动条 不溢出不显示滚动条 */
            overflow: auto;
            
            width: 200px;
            height: 200px;
            border: 3px solid pink;
            margin: 100px auto;
}

七、项目注意事项

  1. 常见图片格式
    1)JPG/JPEG:对色彩的信息保留较好,高清,颜色较多,产品类的图片经常用JPG格式。
    2)GIF:最多存储256色,所以通常用来显示简单图形及字体,但是可以保存透明背景和动画效果,常用于一些图片小动画效果。
    3)PNG:一种新兴的网络图形格式,结合了GIF和JPEG的优点,具有存储形式丰富的特点,能够保持透明背景。如果想要切成背景透明的图片,选用PNG格式。
    4)PSD:是Photoshop专用格式,里面可以存放图层、通道、遮罩等多种设计稿。可以直接从上面复制文字、获得图片、测量大小和距离
  2. 导航栏制作方法
    在实际开发中,导航栏的制作不会直接用a标签,而是用li包含a,即(li+a)的做法
    li+a语义更清晰,是有条理的列表型内容。
    如果直接用a,搜索引擎容易判别为有堆砌关键字的嫌疑(故意堆砌关键字容易被搜索引擎降权),从而影响网站排名。
  3. 页面布局整体思路
    为了提高网页制作的效率,布局时通常有以下整体思路:
    1)必须确定页面的版心(可视区),测量设计稿可得。
    2)分析页面中的行模块,以及行模块中的列模块,即页面布局第一准则
    3)列模块经常需要浮动布局,要先确定每个列的大小,之后确定列的位置,即页面布局第二准则
    4)制作HTML结构。我们遵循先有结构,后有样式的原则。
  4. CSS属性书写顺序
    建议遵循以下顺序:
    1)布局定位属性:display/position/float/clear/visibility/overflow
    2)自身属性:width/height/margin/padding/border/background
    3)文本属性:color/font/text-decoration/text-align/vertical-align/white-space/break-word
    4)其他属性:content/cursor/border-radius/box-shadow/text-shadow/ background:linear-gradient
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值