Css & Scss
CSS (Cascading Style Sheets) 和 SCSS (Sassy CSS) 都是用于样式表的编程语言,用于定义网页的外观和布局。
CSS vs SCSS vs SASS
- CSS (Cascading Style Sheets): 它是一种样式表语言,用于描述网页上的元素应该如何呈现。CSS规则定义了元素的外观,包括颜色、字体、间距、边框等。CSS具有层叠性,允许多个样式规则应用于同一元素,根据特定的规则进行层叠和优先级。
- SCSS (Sassy CSS): 它是CSS的一种超集,意味着任何有效的CSS也是有效的SCSS。SCSS引入了一些额外的功能,如变量、嵌套规则、混合(Mixins)等,以提高样式表的可维护性和可重用性。与纯CSS相比,SCSS的语法更灵活,更便于开发者编写和组织样式代码。
总体而言,SCSS可以看作是CSS的扩展,它提供了更多的工具和功能,使样式表更易于编写和维护。在实际开发中,开发者可以选择使用纯CSS或者采用SCSS来编写样式,取决于项目的需求和个人偏好。
hugo兼容性
scss兼容css语法,
- 需要用
hugo extended
版本的拓展功能,将scss翻译成css使用。 - 在 Hugo 中,你只能把 Sass 的源文件放到
/assets/scss/
或/themes/your-theme/assets/scss/
下,没有别的路径可以选择。[^3] - 导入
1 | {{ $styles := resources.Get "scss/main.scss" }} |
1. 变量:
CSS(层叠样式表)和 SCSS(Sass的一种语法扩展)之间的主要区别在于语法和功能。SCSS是Sass的一种新的语法,它是Sass 3引入的,旨在提供一种更加人类友好的写法,同时保留了Sass的强大功能。以下是一些CSS和SCSS之间的主要区别的例子:
CSS:
1 | :root { |
SCSS:
1 | $primary-color: #3498db; |
在SCSS中,你可以使用变量来保存颜色、字体大小等信息,使得样式表更易于维护。
2. 嵌套规则:
CSS:
1 | .container { |
SCSS:
1 | .container { |
SCSS允许你以嵌套的方式编写样式规则,使得样式层次结构更清晰。
3. 混合器(类似函数):
SCSS 提供了一种称为 mixin 的特性,它可以让你定义可重用的样式块。
1 | @mixin border-radius($radius) { |
这使得你可以更灵活地重用样式规则。
4. 继承:
SCSS 允许你使用 @extend
关键字继承另一个选择器的样式。
1 | .error { |
这可以减少样式表的重复。
语法
子元素定义
set xxx
to the element b
in/under a
1 | .a .b { |
大小
vh
stands for viewport height.100vh
is equal to 100% of the viewport height.%
是父元素的高宽的百分比。- 与
padding
联动width: calc(min(100%, 1430px));
min-height: calc(100vh - 160px);
使得footer在视野外
块级元素、内联元素
- 块级元素(Block-level elements):
- 块级元素会在页面上以块的形式显示,它会独占一行或一块空间。
- 块级元素的**宽度会占据其父元素的100%**,高度会根据内容的多少而自动调整。
- 常见的块级元素有
<div>、<p>、<h1>、<ul>、<li>
等。
- 内联元素(Inline elements):
- 内联元素不会以块的形式显示,它会在文本流中显示,只占据其内容的空间。
- 内联元素的宽度和高度只会包裹其内容。
- 常见的内联元素有
<span>、<a>、<strong>、<em>
等。
位置
static
默认值,无序指明。并且忽略 top, bottom, left, right 或者 z-index 声明。[^1]fixed
全局页面固定位置。使用”left”, “top”, “right” 以及 “bottom”。- 多于
z-index: 1000;
来设置悬浮导航栏
- 多于
absolute
相对于static
定位以外的第一个父元素进行定位(没有符合父元素就相对于<html>
)。使用”left”, “top”, “right” 以及 “bottom”。- 多用于
relative
元素内, 默认relative
不指定位置等于static
- 多用于
relative
多用于原有位置的上下左右微调left:20
向左移动sticky
像position:relative
的拓展; 而当页面滚动超出目标区域时,它的表现就像position:fixed
;,它会固定在目标位置。- 要求:父元素非
static
比如position: relative; top:40px;
且有固定高度height: 100vh;
- 设置
top: 100px;
表示到顶的距离
- 要求:父元素非
水平居中
1 | /* 父元素 text-align: center; */ |
方法二:
1 | position: absolute; |
display
边框 magin border padding
margin
区域是透明的。display: flex;
排列时,来实现grid间的距离。margin-left: 35px;
margin-bottom: 35px;
- 我不理解为什么斯坦福的页面为负数
border
一般是有色(虚线)框border: 3px solid #73AD21;
padding
的颜色继承background-color
padding-left: calc(50% - 715px);
来实现放大时边界为0.
图片
固定大小div内填充满图片
object-fit
属性规定可替换元素的内容应该如何适应到其使用的高度和宽度。通过设置 object-fit
,你可以控制图片在其容器中的显示方式。
object-fit
属性值包括:
fill
: 默认值,拉伸图片以填充容器。cover
将图片按比例缩放并裁剪,以使其完全覆盖容器。contain
: 缩放图片以适应容器,保持其原始宽高比,可能会在容器中留有空白。none
: 保持图片原始尺寸,可能会溢出容器。scale-down
: 缩放图片以适应容器,但不超过其原始尺寸,可能比contain
更小。
以下是一个简单的例子:
1 | img { |
在这个例子中,你可以根据需要调整固定的宽度和高度。
1 | .big-grid{ |
固定大小div内填充满图片(60%开始)
1 | .image-container { |
字体
字体大小
在 CSS 中,rem
、em
、px
是用于定义字体大小的不同单位。它们有一些区别,主要涉及相对大小和绝对大小的概念。
rem
(Root Em):rem
是相对于根元素(html
元素)的字体大小的单位。1rem
等于根元素的字体大小。如果根元素的字体大小为16px
,那么1rem
就等于16px
。
em
:em
是相对于父元素的字体大小的单位。- 如果某元素的字体大小为
1em
,它将等于其父元素的字体大小。如果嵌套使用,1em
将等于最近的父元素的字体大小。
px
(Pixel):px
是像素单位,是一个绝对单位。px
直接表示像素,不受父元素或根元素字体大小的影响。
使用 rem
和 em
可以使你的样式更具有可扩展性和适应性,因为它们相对于父元素或根元素的字体大小而不是绝对的像素值。
例如,使用 rem
可以让你的网站在用户调整浏览器字体大小时更具弹性,而使用 em
可以确保你的字体大小相对于其容器的大小而变化。
字体居中
1 | <p style="text-align:center;">123</p> |
周围阴影
模拟光线射在对象上产生的阴影
1 | text-shadow: (inset) 20px -19px 30px transparent; |
- inset 若指定,阴影在字体里
<offset-x> <offset-y>
光照产生阴影的上下左右<blur-radius>
阴影轮廓模糊正值,0为阴影边缘清晰color
颜色,允许透明色
炫彩/彩虹 字体
在 CSS 中,你可以使用 linear-gradient
或 radial-gradient
来创建渐变效果,也可以使用 @keyframes
创建动画效果,从而实现字体颜色的渐变和幻彩效果。以下是一些示例:
线性渐变:
1 | .gradient-text { |
在这个例子中,linear-gradient
用于创建水平的渐变背景,然后通过 -webkit-background-clip: text;
和 color: transparent;
将背景应用到文本上,从而实现了文字颜色的渐变效果。
径向渐变:
1 | .radial-gradient-text { |
这个例子中使用 radial-gradient
创建了一个径向渐变的背景,然后同样通过 -webkit-background-clip: text;
和 color: transparent;
将背景应用到文本上。
动画效果:
1 | @keyframes rainbow { |
这个例子使用 @keyframes
定义了一个彩虹动画,然后通过 animation
属性应用到文本上,实现了文字颜色的动画效果。
你可以根据具体需求调整颜色值和动画效果。这些效果在现代浏览器中通常都能很好地支持。
颜色的表示
1 | #888 |
参考文献
[^1]: Runoob CSS position 属性
[^3] hugo + sass