32、font-style的italic 与oblique的区别?
细微的差别:
- 字体渲染方式:
italic: 使用字体的斜体版本,如果字体本身没有斜体版本,则会使用类似斜体字形的字体。
oblique: 使用倾斜的字体版本,它会将正常的字体倾斜一定角度。
- 效果差异:
italic: 会使用专门设计的斜体字形,通常看起来更自然,更像真正的斜体字。
oblique: 只是将字体倾斜,可能会出现字体变形或间距不均匀的情况,尤其是对于一些复杂的字体。
- 使用场景:
italic: 更适合用于需要强调文本的场合,因为它看起来更自然,更像真正的斜体字。
oblique: 更适合用于需要轻微倾斜文本的场合,例如标题或一些特殊效果。
总结:
如果你希望使用真正的斜体字,并且字体本身支持斜体版本,建议使用 italic。
如果你希望对字体进行轻微的倾斜,或者字体本身不支持斜体版本,建议使用 oblique。
结论:简单来说,italic 的优先级更高,它会先尝试使用字体本身的斜体版本。如果字体没有斜体版本,它才会进行强制倾斜。而 oblique 则直接忽略字体本身的斜体版本,直接强制倾斜。
33、font-weight为什么可以设置100-1000,而且100-300是 light,400-500是normal?
font-weight 的设置范围是 100 到 1000,并不是简单的线性对应,而是根据实际效果进行划分。
这里font-weight并非直接控制字体的"重量",而是控制字体的粗细程度。
100-300 范围 对应于 light,即较细的字体。
400-500 范围 对应于 normal,即标准的字体粗细。
600-900 范围 对应于 bold,即加粗的字体。
900-1000 范围 对应于 bolder,即更粗的字体。
之所以使用 100-1000 的数值范围,是为了提供更细致的字重控制,并与不同字体和操作系统的字重设置保持一致。
说明:
并非所有字体都支持所有字重设置,例如某些字体可能没有 100、200 或 900 字重。
实际效果可能与数值设置不完全一致,因为不同的字体设计和操作系统可能会对字重进行不同的渲染。
使用 bold 和 bolder 时,建议参考具体字体的设计规范,确保字体能够正常显示。
了解提示:
一般来说,字体设计时会考虑light, normal, bold 这三档字重,这对应于 font-weight 中的 100-300, 400-500, 600-900 范围。当然,一些字体设计可能会提供更多字重,比如:
Thin: 比 light 更细的字体,对应于 100 字重。
Extra light: 比 light 更细的字体,对应于 200 字重。
Medium: 比 normal 更粗的字体,对应于 500 字重。
Semi bold: 比 bold 更粗的字体,对应于 600 字重。
Extra bold: 比 bold 更粗的字体,对应于 700-900 字重。
Black: 比 extra bold 更粗的字体,对应于 900-1000 字重。
但一般来说,light, normal, bold 这三档字重是最基础的,也是应用最广泛的。
34、为什么color: rgb(255, 0, 0, 0.5);也能表达透明度效果呢?
确实,一些浏览器会尝试"修复"rgb(255, 0, 0, 0.5) 这样的写法,将其解释为 rgba(255, 0, 0, 0.5)。这是因为很多浏览器为了向后兼容性,会尝试解析一些非标准的 CSS 代码。
但是,这种行为并不是标准的 CSS 行为,而且并非所有浏览器都会这样做。在一些老旧的浏览器或者严格遵循标准的浏览器中,rgb(255, 0, 0, 0.5) 可能会被完全忽略,导致颜色显示为不透明的红色。
为了确保你的代码在所有浏览器中都能正常工作,始终使用 rgba() 函数来表示透明度。 这样可以确保你的代码符合 CSS 标准,并且在所有浏览器中都能得到一致的结果。
虽然一些浏览器可能可以"修复"这种错误的写法,但这不是一个可靠的做法。使用 rgba() 函数是确保代码正确性和可移植性的最佳实践。
35、平时顺口溜说的红橙黄绿青蓝紫,就是说的hsl色环?
"红橙黄绿青蓝紫" 对应的是 色相(Hue),而 HSL 色环 就是用色相、饱和度(Saturation)和亮度(Lightness)来描述颜色的。
色相 就像是一条环形的色谱,从红色开始,经过橙色、黄色、绿色、青色、蓝色、紫色,最后回到红色,形成一个完整的色环,整个是一个顺时针的角度来表达。
HSL 色环 可以帮助我们更好地理解颜色之间的关系,方便我们进行颜色搭配和选择。
当然,除了 HSL 色环,还有其他描述颜色的方式,例如 RGB 色彩空间、CMYK 色彩空间等等。
36、在word有行间距,但似乎在css只有行距,没有行间距,为什么?
在CSS中确实只有"line-height"属性来控制行距,而没有专门的"line-spacing"属性来控制行间距。这是因为CSS的行距模型与Word的行间距模型有所不同。
在CSS中,行距指的是两行文字基线之间的垂直距离。行距不仅包括了字形的高度,还包括了上下的间距。所以通过调整line-height属性,就可以同时改变行间距离。
例如:
html
p {
font-size: 16px;
line-height: 24px; /* 行距为24px */
}
上面代码中,行距被设置为24px,相当于给每行文字上下各留有4px(24px - 16px)的行间距。
而在Word中,行距和行间距是两个不同的概念。行距指整行占用的高度,行间距是指相邻两行基线之间的距离。Word可以分别设置这两个值。
总的来说,CSS将行距和行间距合二为一,通过line-height一个属性就可以控制,而Word将它们分开处理。这种差异源于二者排版模型的不同。
37、对于td,属性的width与css的width,哪个优先级更高?
在 HTML 中,对于 td 元素,CSS 中的 width 属性优先级更高。原因:
CSS 样式覆盖 HTML 属性:
CSS 样式表的设计初衷是用于覆盖和修改 HTML 元素的默认样式。这意味着,如果在 CSS 中定义了 td 元素的 width 属性,它将覆盖 HTML 中 width 属性的设置。
优先级规则:
CSS 的优先级规则决定了不同样式规则之间的权重。通常情况下,内联样式(直接在 HTML 元素上定义的样式)优先级最高,然后是 CSS 文件中定义的样式,最后是浏览器默认样式。
html
<table>
<tr>
<td width="100">单元格 1</td>
<td width="200">单元格 2</td>
</tr>
</table>
<style>
td {
width: 50px;
}
</style>
在这个例子中,虽然 td 元素的 HTML 属性中设置了 width 为 100px 和 200px,但 CSS 样式表中的 width: 50px 会覆盖这些设置,导致所有 td 元素的宽度都为 50px。
结论:如果你想改变 td 元素的宽度,建议使用 CSS 样式表,而不是 HTML 属性,因为 CSS 提供了更灵活和可控的样式管理方式。
提示:
严格来说,只有在HTML标签内部使用style属性声明的CSS样式才被认为是真正的"内联样式"。
<td style="width:200px;">...</td>
上面这种在标签内部使用style属性设置样式的方式,才算是内联样式。
而直接在HTML元素上使用的属性,如<td width="200">这种,虽然也是直接作用于该元素,但实际上并不被视为内联样式。
大多数现代浏览器在解析和渲染时,一般会遵循以下优先级:
浏览器用户界面设置
内联样式(在元素的style属性中设置的样式)
外部样式表文件中的样式
HTML元素的属性样式,如<td width="200">
所以标签的width属性并不属于内联样式的范畴,因此其优先级会低于外部CSS文件中直接设置的样式。这样的实现也有利于提高页面样式的可维护性。
38、为什么行内元素不能设置上下margin?
在CSS中,块级元素(如div)可以设置所有四个方向的外边距(margin)。而行内元素(如<span>)只能设置左右外边距(margin-left和margin-right),上下外边距(margin-top和margin-bottom)对它们不起作用。
这是因为行内元素在渲染时不会独占一行,它们在同一行上彼此相邻,所以设置上下外边距会影响同一行上其他行内元素的位置,从而破坏了文档流的正常布局。
如果你希望行内元素能够设置上下外边距,可以将其显示方式设置为display: inline-block;或display: block;,这样它们就会像块级元素一样可以设置四个方向的外边距了。
另外,也可以通过将行内元素包裹在一个块级元素中,然后设置该块级元素的上下外边距,从而间接实现对行内元素的上下空间控制。
总的来说,行内元素不能直接设置上下外边距是出于保持文档流正常的考虑,但是通过改变元素显示方式或者包裹方式仍然可以实现相应的布局效果。