CSS实现浮动效果

  发布时间:2024-04-27 15:48:19   作者:长傅   我要评论
最近遇到比较头疼的事情,就是我的织梦程序制作的一个沙发类型的淘宝客网站经常被挂黑链,上一次是7月份中旬,这次是8月底,好像这些黑客的工作习惯都是一个月一次

一、浮动

早期用于实现文字环绕图片(环绕布局),现在用于让元素并列布局(块元素并排)。浮动元素会脱离文档流,后边的元素会把空出来的位置补上去。但是又因为浮动元素的层级高,所以会将未浮动的元素进行覆盖,但是文字不会。

  • floatnone无浮动,left左浮动,right右浮动。

1、css布局的三种机制

  • 标准文档流,也叫标准流,普通流。主要实现上下布局,也就是页面布局的默认效果。
  • 浮动流,通过float实现并列显示的布局。
  • 定位流,通过position实现元素的层叠显示的布局。

2、浮动布局的特点

(1)浮动元素会以顶对齐,且没有缝隙紧挨着的方式进行显示。

(2)如果元素集体右浮动,显示的顺序会发生颠倒。

<head>
    <style>
        .demo1,.demo2{
        	width: 100px;
            height: 100px;
            float: right;
        }
        .demo1{
            background-color: pink;
        }
        .demo2{
            background-color: yellowgreen;
        }
    </style>
</head>
<body>
    <div class="box">
        <p class="demo1">1</p>
        <p class="demo2">2</p>
    </div>
</body>

(3)浮动的元素会因为当前容器的横向距离不足以摆放的时候,而发生换行。

如果元素的高度都是相等的,那就是另起一行的效果;如果元素的高度呈阶梯状,后续的元素在顶对齐放不下的情况下,会向下落到第一个障碍处停下来,且其之后的元素会排在它的后面。

<head>
    <style>
        .box{
            width: 1000px;
            /* border: 1px solid #000; */
            margin: 100px auto;
        }
        p{
            float: left;
        }
        .demo1{
            width: 400px;
            height: 100px;
            background-color: pink;
        }
        .demo2{
            width: 400px;
            height: 50px;
            background-color: yellowgreen;
        }
        .demo3{
            width: 100px;
            height: 30px;
            background-color: bisque;
        }
        .test{
            width: 300px;
            height: 100px;
            background: skyblue;
        }
        .demo4{
            width: 80px;
            height: 50px;
            background-color: purple;
        }
    </style>
</head>
<body>
    <div class="box">
        <p class="demo1"></p>
        <p class="demo2"></p>
        <p class="demo3"></p>
        <p class="test"></p>
        <p class="demo4"></p>
    </div>
</body>

上述代码给父元素设置的宽度为1000px,粉色、绿色、肉色的盒子加在一起已经900px了,不足以放下蓝色盒子600px,所以放到了下层,而紫色盒子也跟在其后,即使第一行有足够的空间。

(4)浮动元素脱离文档流,提升元素的层级。

<head>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .box{
            width: 300px;
            /* border: 1px solid #000; */
            margin: 100px auto;
        }
        p{
            width: 100px;
            height: 100px;
        }
        .demo1{
            background-color: pink;
        }
        .demo2{
            width: 50px;
            height: 50px;
            background-color: yellowgreen;
            float: left;
        }
        .demo3{
            background-color: skyblue;
        }
    </style>
</head>
<body>
    <div class="box">
        <p class="demo1"></p>
        <p class="demo2"></p>
        <p class="demo3"></p>
    </div>
</body>

绿色盒子添加浮动后,脱离了文档流,浮在了蓝色盒子的上面。

(5)实现并列布局的元素都要增加浮动属性。

(6)浮动的元素设置 margin:0 auto 无效。

<head>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .box{
            width: 100px;
            height: 100px;
            background-color: pink;
            margin: 0 auto;
            float: left;
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>

可以看出当我们添加浮动属性之后,margin:0 auto居中失效。

(7)浮动的元素会转变成块元素。

<head>
    <style>
        span{
            background-color: pink;
            padding: 30px;
            float: left;
        }
    </style>
</head>
<body>
    <span></span>
</body>

这里可以看出原本的行内元素在添加浮动后,可以设置padding值,同样也可以设置宽高。没设置宽高的时候,宽高会根据内容自动撑开,而不是显示独占一行。

二、浮动对元素的影响及解决方法

1、浮动对元素的影响

  • 子元素浮动会引起父元素的高度塌陷。
  • 块元素浮动之后,默认宽度不会显示成父元素100%的效果了,而是靠内容撑开,但是设置宽高依然有效。
  • 行内元素、行内块元素增加浮动会被隐性转换成块元素。
<head>
    <style>
        .wrap{
            width: 300px;
            border: 1px solid #000;
        }
        .box{
            width: 100px;
            height: 100px;
            background-color: pink;
            float: left;
        }
    </style>
</head>
<body>
    <div class="wrap clearFix">
        <p class="box"></p>
    </div>
</body>

2、解决高度塌陷的方法

(1)给父元素设置定高。

但是不能自适应高度,局限性较大,不推荐。

(2)开启BFC(块级格式化上下文)

给父元素添加overfloat:hidden。因为父元素在没设置高度时,不知道在哪个位置隐藏。该方法前提是父元素不能设置定高,相对推荐。

        .wrap{
            width: 300px;
            border: 1px solid #000;
            overflow: hidden;
        }
  • 给父元素添加浮动。但是浮动会脱离文档流,对页面的影响较大,而且还可能会引起新的塌陷问题。不推荐。
  • 给父元素添加绝对定位或固定定位。但也会脱离文档流,造成新的页面问题,不推荐。

(3)改变父元素的类型为inline-block

因为浮动只对块元素有效。但是行内块元素会因为换行符有留白。而且margin:0 auto不能居中显示,这时想要居中可以给父元素设置text-align:center

(4)清除浮动clear(额外标签法)

在浮动元素的后面添加一个空白标签,给它设置清除浮动属性,从而撑开父元素的高度。
清除浮动是设置给被影响的元素,不是设置给浮动的元素。
该属性只对块元素生效。

clearnone默认值,会被浮动元素遮挡;left不会被向左浮动的元素遮挡,显示在浮动元素的下面;right不会被向右浮动的元素遮挡,显示在浮动元素的下面,both不会被左右两边的浮动元素遮挡,显示在浮动元素的下面。

<head>
    <style>
        .wrap{
            width: 300px;
            border: 1px solid #000;
        }
        .box{
            width: 100px;
            height: 100px;
            background-color: pink;
            float: left;
        }
        .test{
            clear: both;
        }
    </style>
</head>
<body>
    <div class="wrap clearFix">
        <p class="box"></p>
        <p class="test"></p>
    </div>
</body>

(5)万能解决法

最终的解决方法是通过给父元素设置伪元素添加clear属性来解决浮动带来的问题。
因为我们需要在父元素后面增加一个元素,用于设置清除浮动,所以使用::after。该伪元素是不需要任何其他内容的,但是content是必须添加的。又因为clear只对块元素生效,而伪元素默认添加的是行内元素,所以必须通过display:block修改元素的类型。

<head>
	<style>
		p{
			width: 100px;
			height: 100px;
			backgroud-color: pink;
			float: left;
		}
		.clearFix{
			/* 用于兼容低版本ie 开启haslayout */
			*zoom: 1;
		}
		.clearFix::after{
			content: "";
			display: block;
			clear: both;
		}
	</style>
</head>
<body>
	<div class="clearFix">
		<p><p>
	<div>
</body>

到此这篇关于CSS实现浮动效果的文章就介绍到这了,更多相关css 浮动内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!

相关文章

  • stylus入门使用方法示例详解

    Stylus 是一个功能强大的 CSS 预处理器,能够让你的样式表开发变得更加高效和有趣,本文介绍stylus入门使用方法,感兴趣的朋友跟随小编一起看看吧
    2024-04-22
  • CSS中五种常见定位方式详解

    这篇文章主要为大家详细介绍了CSS中五种常见定位方式以及它们的具体应用,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟小编一起学习一下
    2024-04-22
  • 纯 CSS 实现多标签自动显示超出数量的思路详解

    有多个宽度不同的标签水平排列,当外层宽度不足时,会自动提示超出的数量,这篇文章主要介绍了纯 CSS 实现多标签自动显示超出数量的思路详解,需要的朋友可以参考下
    2024-04-11
  • 使用CSS实现一个同态效果

    这周了解到一个新的名词,同态,同态可以理解成一种特殊形态吧,这篇文章主要为大家详细介绍了如何使用CSS实现这种同态效果,文中的示例代码讲解详细,感兴趣的小伙伴可以了
    2024-03-25
  • CSS实现渐变式圆点加载动画

    这篇文章主要为大家详细介绍了如何使用 css3 模拟一个渐变式圆点加载效果,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以跟随小编一起学习一下
    2024-03-22
  • CSS如何设置背景模糊周边有白色光晕(解决方案)

    想要给一个展示图片的区域底部加一个该图片的放大后的背景,并模糊 20,并增加一个黑色 0.6 透明度的遮罩,这篇文章主要介绍了CSS如何设置背景模糊周边有白色光晕(解决方案
    2024-03-20
  • CSS设置水平垂直居中的7种方法

    CSS中内容居中的方法有很多种,具体取决于您想要居中的内容是什么类型的元素以及是在什么情况下居中,这篇文章主要为大家整理了常用的7种方法,感兴趣的小伙伴可以跟随小编
    2024-03-19
  • CSS设置style属性的3种方法

    style属性可以用在HTML中大部分的标签上,本文主要介绍了CSS设置style属性的3种方法,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-15
  • CSS中隐藏元素的常见5种方法

    在CSS中隐藏元素有多种方法,这篇文章主要为大家整理了五种常见方法及其适用场景与区别,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以跟随小编一起学
    2024-03-15
  • CSS实现三栏布局的四种方法

    三栏布局是常见的一种页面布局方式,将页面分为左栏、中栏和右栏,这篇文中主要为大家详细介绍了CSS实现三栏布局的四种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以
    2024-03-11

最新评论