替换元素
图像和视频又称替换元素。CSS不能影响它们的内部布局,只能影响它们在页面上相对于其他元素的位置。
某些替换元素也有宽高比。这意味着它在x和y方向上具有大小,并且默认情况下将使用文件的固有尺寸进行显示
调整图像大小
CSS中万物皆盒,如果把一张图片放在一个盒子里,而这张图片的原始长宽比盒子的小或大,那么图片要么缩在盒子里,要么从盒子溢出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <div class="wrapper"> <div class="box"><img src="star.png" alt="star"></div> <div class="box"><img src="balloons.jpg" alt="balloons"></div> </div>
<style> .box { width: 200px; }
img {
} </style>
|
常用的方法是将一张图片的 max-width 设为 100%。这将会使图片的尺寸小于等于盒子。这个技术也会对其他替换元素(例如
object-fit 属性可以在这里帮助你。当使用 object-fit 时,替换元素可以以多种方式被调整到合乎盒子的大小。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <div class="wrapper"> <div class="box"><img src="balloons.jpg" alt="balloons" class="cover"></div> <div class="box"><img src="balloons.jpg" alt="balloons" class="contain"></div> </div>
<style> .box { width: 200px; height: 200px; }
img { height: 100%; width: 100%; }
.cover { object-fit: cover; }
.contain { object-fit: contain; } </style>
|
- cover:保持图像原始比例来缩小图像,图像可以充满盒子,但是由于比例保持不变,图像多余的部分会被盒子裁掉
- contain:图像就会被缩放到足以完整地放到盒子里面的大小。如果它和盒子的比例不同,将会出现空白部分。
- fill:它可以让图像充满盒子,但是不会维持比例。
布局中的替换元素
在对替换元素使用各种 CSS 布局时,他们的表现方式与其他元素有一些细节上的差异。例如,flex 或者 grid 布局中,默认情况下元素会被拉伸到充满整块区域。但是图像不会被拉伸,而会对齐到网格区域或者弹性容器的起始处。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <div class="wrapper"> <img src="star.png" alt="star"> <div></div> <div></div> <div></div> </div>
<style> .wrapper { display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 200px 200px; gap: 20px; }
.wrapper > div { background-color: rebeccapurple; border-radius: .5em; } </style>
|
样式化文本输入元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <form> <div><label for="name">Name</label> <input type="text" id="name"></div> <div><label for="email">Email</label> <input type="email" id="email"></div>
<div class="buttons"><input type="submit" value="Submit"></div> </form>
<style> input[type="text"], input[type="email"] { border: 2px solid #000; margin: 0 0 1em 0; padding: 10px; width: 100%; }
input[type="submit"] { border: 3px solid #333; background-color: #999; border-radius: 5px; padding: 10px 2em; font-weight: bold; color: #fff; }
input[type="submit"]:hover, input[type="submit"]:focus { background-color: #333; } </style>
|
继承和表单元素
表单元素默认不会继承字体样式,如果想要确保你的表单填入区域使用 body 中或者一个父元素中定义的字体,需要向CSS中加入这条规则。
1 2 3 4 5 6 7
| button, input, select, textarea { font-family: inherit; font-size: 100%; }
|
为了保证统一,最好将所有元素的内外边距都设为 0,然后在单独进行样式化控制的时候将这些加回来。
1 2 3 4 5 6 7 8
| button, input, select, textarea { box-sizing: border-box; padding: 0; margin: 0; }
|
其他有用的设置
除了上面提到的规则以外,应该在
1 2 3
| textarea { overflow: auto; }
|
将一切都放在一起“重置”
作为最后一步,可以将上面讨论过的各式属性包起来,成为以下的“表单重置”,以提供一个统一的在其上继续进行工作的地基,这包含了前三节提到的所有东西:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| button, input, select, textarea { font-family: inherit; font-size: 100%; box-sizing: border-box; padding: 0; margin: 0; }
textarea { overflow: auto; }
|