css3 cale()属性介绍以及自适应布局使用方法

Cale()介绍
calc是英文单词calculate(计算)的缩写,是css3的一个新增的功能,用来指定元素的长度。比如说,你可以使用calc()给元素的border、margin、pading、font-size和width等属性设置动态值。为何说是动态值呢?因为我们使用的表达式来得到的值。不过calc()最大的好处就是用在流体布局上,可以通过calc()计算得到元素的宽度。

Cale()的用处
calc()能让你给元素的做计算,你可以给一个div元素,使用百分比、em、px和rem单位值计算出其宽度或者高度,比如说“width:calc(50%+2em)”,这样我们就不用考虑元素DIV的宽度值到底是多少,而把这个任务交由浏览器去计算。

calc()语法
calc()语法非常简单,使用数学表达式来表示即可,就像我们小时候学加(+)、减(-)、乘(*)、除(/)一样,如下:

.elm {

 width: calc(expression);

}
其中”expression”是一个表达式,用来计算长度的表达式。

calc()的运算规则
calc()使用通用的数学运算规则,但是也提供更智能的功能:

1.使用“+”、“-”、“*”和“/”四则运算;

2.可以使用百分比、px、em、rem等单位;

3.可以混合使用各种单位进行计算;

4.表达式中有“+”和“-”时,其前后必须要有空格,如”widht:calc(12%+5em)”这种没有空格的写法是错误的;

5.表达式中有“*”和“/”时,其前后可以没有空格,但建议留有空格。

浏览器的兼容性
浏览器对calc()的兼容性还算可以,在IE9+、FF4.0+、Chrome19+、Safari6+都得到比较好的支持,但是在书写的过程中还是需要我们在其前面加上各浏览器厂商的识别符,不过可惜的是,移动端的浏览器还没有得到很好的兼容,仅有“firefox for android 14.0”支持。

以上的介绍相信大家对cale()已经不那么陌生了,接下来就让我们通过简单的例子来了解它吧。

首先让我们看一个最常用的实例:

上面的结构很简单,不要着急,慢慢的一起来看一下它其中的变化。

首先,我们给它添加普通样式:

.demo {
width: 300px;
background: #60f;
}
.box {
width: 100%;
background: #f60;
height: 50px;
}
此时的效果很简单,就是div.box完全遮盖了div.demo,如下图所示:

css3 cale()属性介绍以及自适应布局使用方法

其次,在div.box上添加border和padding

这一步很棘手的事情来了,在div.box上添加10px的内距padding,同时添加5px的border:

.demo {

width: 300px;

background: #60f;

}

.box {

width: 100%;

background: #f60;

height: 50px;

padding: 10px;

border: 5px solid green;

}

  为了更好的说明问题,我在div.demo上添加了一个padding:3px 0;
.demo {

width: 300px;

background: #60f;

padding: 3px 0;

}

.box {

width: 100%;

background: #f60;

height: 50px;

padding: 10px;

border: 5px solid green;

}
css3 cale()属性介绍以及自适应布局使用方法
css3 cale()属性介绍以及自适应布局使用方法

calc()的运用
为了解决撑破容器的问题,以前我们只能去计算div.box的宽度,用容器宽度减去padding和border的值,但有时候,我们苦于不知道元素的总宽度,比如说是自适应的布局,只知道一个百分值,但其他的值又是px之类的值,这就是难点,死卡住了。随着CSS3的出现,其中利用box-sizing来改变元素的盒模型类型实使实现效果,但今天我们学习的calc()方法更是方便。

知道总宽度是100%,在这个基础上减去boder的宽度(5px2=10px),在减去padding的宽度(10px2=20px),即”100%-(10px+5px)*2=30px”,最终得到的值就是div.box的width值:

.demo {
width: 300px;
background: #60f;
padding: 3px 0;
}
.box {
background: #f60;
height: 50px;
padding: 10px;
border: 5px solid green;
width: 90%;/写给不支持calc()的浏览器/
width:-moz-calc(100% - (10px + 5px) * 2);
width:-webkit-calc(100% - (10px + 5px) * 2);
width: calc(100% - (10px + 5px) * 2);
}
这样一来,通过calc()计算后,div.box不在会超出其容器div.demo的宽度,如图所示:

css3 cale()属性介绍以及自适应布局使用方法
css3 cale()属性介绍以及自适应布局使用方法

上面只是一个简单的入门例子,接下来给大家带来自适应布局的例子,先来看一下效果:

css3 cale()属性介绍以及自适应布局使用方法
css3 cale()属性介绍以及自适应布局使用方法

上面的例子我们采用了自适应布局,整个布局包含头部、主要内容、边栏、脚部,据图内容查看demo中HTML部分。

HTML代码:

接下来主要看一下css样式部分:

我们给body设置一个内边距,并附上一些基本的样式:

body {

background: #E8EADD;

color: #3C323A;

padding: 20px;

}

设置主容器“wrapper”的样式,主容器的宽度我们设置为“100%-20%*2”,水平居中,css部分如下:

.wrapper {

width: 1024px;

width: -moz-calc(100% - 40px);

width: -webkit-calc(100% - 40px);

width: calc(100% - 40px);

margin: auto;

}
给不支持cale()的浏览器设置一个固定值”1024px”。

Header和footer设置样式

这个例子中的header和footer很简单,给他们添加了一个内距为20px,其他就是一些基本的样式设置,那么其对应的宽度应该是”100%-20px*2″:

header {

background: #f60;

padding: 20px;

width: 984px;

width: -moz-calc(100% - 40px);

width: -webkit-calc(100% - 40px);

width: calc(100% - 40px);

}

footer {

clear:both;

background: #000;

padding: 20px;

color: #fff;

width: 984px;

width: -moz-calc(100% - 40px);

width: -webkit-calc(100% - 40px);

width: calc(100% - 40px);

}
主要内容设置样式

给主内容设置了一个8px的边框,20px的内距,并且向左浮动,同时设置了一个向右的外边距“20”px,关键之处,我们主内容占容器宽度的75%,这样一来,主内容的宽度应该是“75%-8px2-20px2”:

main {

border: 8px solid #B8C172;

float: left;

margin-bottom: 20px;

margin-right: 20px;

padding: 20px;

width: 704px;

width: -moz-calc(75% - 20px * 2 - 8px * 2);

width: -webkit-calc(75% - 20px * 2 - 8px * 2);

width: calc(75% - 20px * 2 - 8px * 2);

}
设置右边栏样式

给边栏设置了一个25%的宽度,其除了包含8px的边框,10px的内距外,还有主内容外距20px也要去掉,不然整个宽度与容器会相差20px,换句话说就会撑破容器掉下来。因此边栏的实际宽度应该是”25%-10px2-8px2-20px”:

accessory {

border: 8px solid #B8C172;

float: right;

padding: 10px;

width: 208px;

width: -moz-calc(25% - 10px * 2 - 8px * 2 - 20px);

width: -webkit-calc(25% - 10px * 2 - 8px * 2 - 20px);

width: calc(25% - 10px * 2 - 8px * 2 - 20px);

}
这样设置下来,大家就看到了上面demo展现的布局效果。看了上面的例子,相信大家对cale()的使用有了一定的提高,在使用calc()做页面自适应布局会更加容易上手。

转载于:https://www.cnblogs.com/shunk/p/10690757.html

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码存在以下问题: 1. 第一行 `import tkinter as tk BUTTONS = B T [' Г'1 ['0 1` 中,应该使用换行符将两行代码分开。 2. 第4行 `if ch as "scale (0); return else: disp. insert (tk. END, ch) return click` 中,应该将 `as` 改为 `==`。 3. 第13行 `win " tk. Tk ( win, title (" it W 28") I win, geometry ("400x480*)` 中,应该去掉双引号前面的空格,并且将 `I` 改为 `,`。 4. 第14行 `disp - tk. Entry (win, foot- (°' , 20), justify-"center")` 中,应该将 `-` 改为 `=`。 5. 第15行 `dasp, pack (fall- x )` 中,应该将 `,` 改为 `.`。 6. 第16行 `disp, bind (' (Return»' , cale)` 中,应该将 `cale` 改为 `calc`。 7. 第18行 `label - tk. Label (win, foots ('* label, pack (fill-'x')` 中,应该将 `foots` 改为 `font`。 8. 第19行 `‚20), anchor= "center")` 中,应该将 `‚20)` 改为 `,20)`。 9. 第21行 `Er. pack ()` 中,应该将 `Er` 改为 `fr`。 10. 第22行 `for y, cols in enunerate (BUTTONS) for x, n in enunerate (cols):` 中,应该将 `enunerate` 改为 `enumerate`。 11. 第23行 `btn - tk. Button (fr, text=n, foot= (*' , 20), width-6, height=3)` 中,应该将 `-` 改为 `=`。 12. 第24行 `btn. grid (row-y+1, colunn=x+1)` 中,应该将 `colunn` 改为 `column`。 13. 第25行 `btn. bind (<1> make_click (n))` 中,应该将 `<1>` 改为 `'<1>'`。 修改后的代码如下: ``` import tkinter as tk BUTTONS = [['7', '8', '9', '/', 'C'], ['4', '5', '6', '*', ' '], ['1', '2', '3', '-', ' '], ['0', '.', '=', '+', ' ']] def make_click(ch): def click(e): print(ch) if ch == 'C': disp.delete(0, tk.END) elif ch == '=': label['text'] = '-' + str(eval(disp.get())) else: disp.insert(tk.END, ch) return click def calc(e): label['text'] = '-' + str(eval(disp.get())) win = tk.Tk() win.title("it W 28") win.geometry("400x480") disp = tk.Entry(win, font=('Arial', 20), justify="center") disp.pack(fill='x') label = tk.Label(win, font=('Arial', 20), anchor="center") label.pack(fill='x') fr = tk.Frame(win) fr.pack() for y, cols in enumerate(BUTTONS): for x, n in enumerate(cols): btn = tk.Button(fr, text=n, font=('Arial', 20), width=6, height=3) btn.grid(row=y+1, column=x+1) btn.bind('<1>', make_click(n)) win.bind('<Return>', calc) win.mainloop() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值