这篇文章将为大家详细讲解有关css如何解决网页重叠问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
创新互联是一家专注于成都网站建设、成都做网站与策划设计,平乐网站建设哪家好?创新互联做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:平乐等地区。平乐做网站价格咨询:18980820575
css解决网页重叠的方法:1、给父元素设置边框;2、给父元素添加padding;3、在子元素上方加一个有宽高的兄弟元素;4、给父元素设置“overflow: hidden;”属性等。
css解决网页边距重叠
下面给大家介绍用css防止边距重叠的几种方法。
先假设一组dom结构
通常情况下,如果给子元素设置margin,就会产生这个属性对父元素也产生了同样的效果,然而
这其实不是我们想要的结果,我们只想对子元素设置margin,那么现在我们应该怎么做呢?
1、给父元素设置边框
.parent { width: 300px; height: 300px; border: 1px solid #ccc; } .child { width: 200px; height: 200px; margin: 20px; }
2、给父元素添加padding
.parent { padding: 1px; width: 300px; height: 300px; } .child { width: 200px; height: 200px; margin: 20px; }
3、在子元素上方加一个有宽高的兄弟元素,记住是有宽高的。
4、给父元素设置 overflow: hidden; 属性
.parent { overflow: hidden; width: 300px; height: 300px; } .child { width: 200px; height: 200px; margin: 20px; }
5、给子元素设置 display: inline-block;(如果子元素是行内元素或者行内块级元素则不会产生边距重叠的问题)
.parent { width: 300px; height: 300px; } .child { width: 200px; height: 200px; margin: 20px; display: inline-block; }
6、使子元素脱离文档流这个实现的方法有很多,浮动,绝对定位等,这里我就不做具体的解释了。
关于css如何解决网页重叠问题就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
分享标题:css如何解决网页重叠问题-创新互联
网站路径:
【C++】inline内联函数
1.inline(内联函数)
内联函数是指用inline关键字修饰的函数。如果内联函数在类体内定义,不用inline关键字声明,默认为内联函数。
2.为什么引入内联函数
使用函数能够避免将相同代码重写多次的麻烦,还可以减少可执行程序的体积,但也会带来程序运行时间上的开销。
函数调用在执行时,首先要在栈中为形参和局部变量分配存储空间,然后还要将实参的值复制给形参,接下来还要将函数的返回地址(该地址指明了函数执行结束后,程序应该回到哪里继续执行)放入栈中,最后才跳转到函数内部执行。这个过程要消耗时间。
另外,函数执行return语句返回时,需要从栈中回收形参和局部变量占用的存储空间,然后从栈中取出返回地址,再跳转到该地址继续执行,这个过程也要消耗时间。
总之,使用函数调用语句和直接把函数中的代码重写一遍相比,节省了空间,但同时带来程序运行时间上的额外开销(时间换空间)。
c++引入inline关键字较好地解决了函数调用时间开销问题。
3.编译器对inline函数的处理方法
在编译阶段,编译器将调用动作替换为函数的本体。具体步骤如下:
1)将inline函数体复制到inline函数调用点处;
2)为inline函数中的局部变量分配内存空间;
3)将inline函数的输入参数和返回值映射到调用方法的局部变量空间中;
4)如果inline函数有国歌返回点,将其转变为inline函数代码块末端的分支(使用goto)
显然是以空间换时间。
4.inline函数使用注意事项:
1)调用内联函数的语句前必须已经出现内联函数的定义(即必须有函数体),而不能只出现内联函数的声明。
//此处foo函数不构成内联函数 inline void foo(int x, int y); //inline仅与函数声明放在一起 void foo(int x, int y){}
//此处foo函数构成内联函数 void foo(int x, int y); inline void foo(int x, int y){} //inline与函数定义体放在一起
2)使用函数指针调用内联函数将会导致内联失败
如果使用函数指针来调用内联函数,那么需要获取inline函数的地址。如果要取得一个inline函数的地址,编译器就必须为此函数产生一个函数实体,那么就内联失败。
3)如果函数体代码过长或有多重循环语句,if或switch分支语句或递归时,不宜用内联
4)类的构造函数、析构函数和虚函数往往不是inline函数的最佳选择
类的构造函数可能需要调用父类的析构函数,析构函数同样可能需要调用父类的析构函数,两者都可能隐藏大量代码,不适合作为inline函数。虚函数往往是运行时确定的,而inline是在编译时进行的,所以内联虚函数往往是无效的。如果直接用类的对象来使用虚函数,那么对有的编译器而言可以起到优化作用。
5)内联函数的展开是在编译阶段,意味着如果内联函数发生改动时需要重新编译代码。
5.inline函数和宏的区别
内联函数同宏函数一样会在被调用处进行代码展开,省去了参数压栈、栈帧开辟与回收,结果返回等,从而提升程序运行效率。
1)内联函数本质是一个函数,在编译中不单独产生代码,而是将有关代码嵌入到调用处。
宏定义不是函数只是在预编译期间将程序中有关字符串替换成宏体。
2)内联函数相比宏函数,在代码展开时,会做安全检查或自动类型转换,而宏定义不会。
//宏函数
#define MAX(a,b) ((a)>(b)?(a):(b))
//内联函数
inline int MAX(int a,int b)
{
return a>b?a:b;
}
当出现MAX(a,"hello");宏函数会出现错误比较int和字符串,没有参数类型检查;但内联函数,会出现类型不匹配的编译错误。
3)在类中声明同时定义的成员函数,自动转化为内联函数,因此内联函数可以访问类中的成员变量,宏定义则不能。
4)内联函数在运行时可调试,而宏定义不可以。
(inline函数在release版本中不产生符号,也不会进行战争开辟等动作,会在调用点进行展开代码;在debug版本中可以调试,会产生一个local的符号,也会进行函数栈帧开辟之类的动作)
6.inline函数和普通函数的区别
1)普通函数在被调用的时候,系统首先要到函数的入口地址去执行函数体,执行完后再回到函数调用点继续执行;
内联函数不需要寻址,当执行到内联函数的时候,将此函数展开,加快了程序执行的速度。
2)内联函数有一定的限制,内联函数体要求代码简单。如果内联函数体过于复杂,编译器将自动把内联函数当成普通函数来执行。
3)普通函数会产生global符号,整个项目可以连接使用;
内联函数在debug版本产生local符号,在本文件中可见。
参考文档: