HTML & CSS 视觉设计

文本 Text

文本对齐 Text Align

web 内容大部分都是文本。 CSS 里面的 text-align 属性可以控制文本的对齐方式。

text-align: justify; 将文本隔开,使每行的宽度相等。
text-align: center; 可以让文本居中对齐。
text-align: right; 可以让文本右对齐。
text-align: left; 是默认值,它可以让文本左对齐

加粗 Bold

使用 strong 标签来加粗文字。 粗体文字一般用来吸引读者注意或用来表示强调。

使用 font-weight 来加粗文字。

font-weight: bold;
font-weight: XX px;

下划线 Underline

使用 u 标签来给文字添加下划线。 下划线通常用来表示重要内容或需要记忆的内容。

使用 text-decoration: underline 标签来给文字添加下划线。

如果使用 u 标签添加下划线,可能混淆文本和链接,则应避免使用它。 超链接标签也有默认的下划线格式。

text-decoration: underline;

强调/斜体 Italic

使用 em 标签来强调文本,使用 i 斜体文本。

使用 font-style: italic 标签来强调文本。

强调和斜体的效果一样,但是含义不同。前者强调标签中包含的文本,后者突出技术术语,标题或者来自另一语言的短语。


font-style: italic;

大小写 Upper/Lowercase

CSS 里的 text-transform 属性可以改变英文字母的大小写。 使用这个属性时,无需改变 HTML 元素中的文本也可以统一页面里英文的显示。

下面的表格展示了 text-transform 的不同值对文字 “Transform me” 的影响:

结果
lowercase "transform me"
uppercase "TRANSFORM ME"
capitalize "Transform Me"
initial 使用默认值
inherit 使用父元素的 text-transform值。
none Default:不改变文字。
text-transform: uppercase;

上下标 Super/Subscript

使用supsub表示上下标,在表示公式时有用。



线条 Line

删除线 Strikethrough

s 标签来给文字添加删除线。 删除线是位于文字水平中央的一条线,它代表着一段文字不再有效。

text-decoration: line-through 标签来给文字添加删除线。

text-decoration: line-through;

水平线 Horizontal Line

hr 标签来创建一条宽度撑满父元素的水平线。 这种水平分割线一般用来表示内容主题的改变,或在视觉上将文档分隔成几个部分。

HTML 中的 hr 是自闭合标签。



行 Row

换行 Wrap

br标签来换行。 HTML 中的 br 是自闭合标签。


行高 Line Height

CSS 提供 line-height 属性来设置行间的距离。 行高,顾名思义,可以用来设置每行文字所占据的垂直空间。

line-height: 25px;

阴影 Shadow

box-shadow 属性用来给元素添加阴影,该属性值是由逗号分隔的一个或多个阴影列表。

box-shadow 属性的阴影依次由下面这些值描述:

  • offset-x 阴影的水平偏移量;
  • offset-y 阴影的垂直偏移量;
  • blur-radius 模糊半径;
  • spread-radius 阴影扩展半径;
  • color 颜色

其中 blur-radiusspread-radius 是可选的。

可以通过逗号分隔每个 box-shadow 元素的属性来添加多个 box-shadow。

box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23);

透明度 Transparency

CSS 里的 opacity 属性用来设置元素的透明度。

属性值为 1 代表完全不透明。
属性值为 0.5 代表半透明。
属性值为 0 代表完全透明。

透明度会应用到元素内的所有内容,不论是图片,还是文本,或是背景色。

opacity: 0.7;

超链接 Anchor

可以使用 a:hover 伪类选择器来选取超链接的悬停状态。

a:hover {
  color: blue;
}

位置 Position

相对定位 Relative

在 CSS 里一切 HTML 元素皆为盒子,也就是通常所说的盒模型。 块级元素自动从新的一行开始(比如标题、段落以及 div),行内元素排列在上一个元素后(比如图片以及 span)。 元素默认按照这种方式布局称为文档的普通流,同时 CSS 提供了 position 属性来覆盖它。

当元素的定位设置为 relative时,它允许通过 CSS 指定该元素在当前文档流页面下的相对 偏移量。 CSS 里控制各个方向偏移量的属性是 leftrighttopbottom。 它们代表从原来位置向远离该方向偏移 指定的像素、百分比或者 em。

p {
  position: relative;
  bottom: 10px;
}

把元素的位置设置成相对,并不会改变该元素在布局中所占的位置,也不会对其它元素的位置产生影响。

CSS 里面的 topbottomleftright 定义了元素在相应方位的偏移距离。 元素将从当前位置向属性相反的方向偏移。

绝对定位 Absolute

CSS position 属性的取值选项 absolute,它的含义是相对于其包含块定位。 和 relative 定位不一样,绝对定位会将元素从当前的文档流里面移除,周围的元素会忽略它。 这样就可以用 CSS 的 top、bottom、left、right 属性来调整元素的位置。

绝对定位比较特殊的一点是元素的定位参照于最近的 positioned 祖先元素。 如果它的父元素没有添加定位规则(默认是 position: relative;),浏览器会继续寻找直到默认的 body 标签。

p {
  position: absolute;
  bottom: 10px;
}

固定定位 Fixed

fixed 定位,它是一种特殊的绝对(absolute)定位,将元素相对于浏览器窗口定位。 类似于绝对位置,它与 CSS 偏移属性一起使用,并且也会将元素从当前的文档流里面移除。 其它元素会忽略它的存在,这样也许需要调整其他位置的布局。

fixedabsolute 的最明显的区别在于,前者定位的元素不会随着屏幕滚动而移动。

position: fixed;
top: 0;
left: 0;

浮动 Float

通过元素的 float 属性来设置。 浮动元素不在文档流中,它向 leftright 浮动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。 通常需要用 width 属性来指定浮动元素占据的水平空间。

.card1 {
  float: left;
  width: 50%;
}
.card2 {
  float: right;
  width: 50%;
}

元素重叠 Overlapping

当一些元素在位置上重叠时(例如,使用 position: absolute | relative | fixed | sticky时),在 HTML 里后出现的元素会默认显示在更早出现的元素的上面。 可以使用 z-index 属性指定元素的堆叠次序。 z-index 的取值是整数,数值大的元素会叠放到数值小的元素上面。

z-index: 2;

元素水平居中 Center

在应用设计中经常需要把一个块级元素水平居中显示。 一种常见的实现方式是把块级元素的 margin 值设置为 auto(前提要设定元素的宽度 width)。

同样的,这个方法也对图片奏效。 图片默认是内联元素,但是可以通过设置其 display 属性为 block来把它变成块级元素。

width: 100px;
margin: auto;

渐变 Gradient

HTML 元素的背景色并不局限于单色。 CSS 还为提供了颜色渐变。 可通过 background 里的 linear-gradient() 实现线性渐变。

background: linear-gradient(gradient_direction, color 1, color 2, color 3, ...);

第一个参数指定了颜色过渡的方向——它的值是角度,90deg 表示垂直渐变(从左到右),45deg 表示沿对角线渐变(从左下方到右上方)。 其他参数指定了渐变颜色的顺序:

background: linear-gradient(90deg, red, yellow, rgb(204, 204, 255));

repeating-linear-gradient()函数和 linear-gradient() 很像,主要区别是前者会重复指定的渐变。 repeating-linear-gradient() 有很多参数,为了便于理解,只用到角度值和色标。角度就是渐变的方向。 色标代表渐变颜色及发生渐变的位置,由百分比或者像素值表示。

下面的代码可以帮助理解成对的起止渐变颜色值是如何过渡的。

0px [yellow -- blend -- blue] 40px [green -- blend -- red] 80px

如果每对起止渐变颜色值的颜色都是相同的,由于是在两个相同的颜色间过渡,那么中间的过渡色也为同色,接着就是同色的过渡色和下一个起止颜色,最终产生的效果就是条纹。


背景图

background 属性支持使用 url() 函数作为属性值,这让我们可以通过链接的方式引入纹理或样式的图片。 图片链接的地址应写在括号内,一般会用引号包起来。

background: url("https://cdn-media-1.freecodecamp.org/imgr/MJAkxbh.png");

元素大小 Scale

CSS 属性 transform 里面的 scale() 函数可以用来改变元素的显示比例。

p {
  transform: scale(1.5);
}

transform 属性有很多函数可以调用,可以对元素进行调整大小、移动、旋转、翻转等操作。 当使用伪类选取元素的指定状态(如 :hover)时,可以通过 transform 属性非常方便地给元素添加交互。

p:hover {
  transform: scale(1.1);
}

transform 属性 skewX():它使选择的元素沿着 X 轴(横向)倾斜指定的角度。

transform: skewX(24deg);

skewY 属性使指定元素沿 Y 轴(垂直方向)翻转指定角度。

transform: skewY(24deg);

动画&关键帧 Animation&Keyframes

animation 属性控制动画,@keyframes规则控制动画中各阶段的变化。 总共有 8 个 animation 属性。

animation-name 用来设置动画的名称。animation-duration 设置动画显示的时间。

@keyframes 可以通过设置特定时间点的行为来创建动画。 为此,只需要给持续时间内的特定帧(从 0% 到 100%)加上 CSS 规则。

#rect {
  animation-name: rainbow;
  animation-duration: 4s;
}
@keyframes rainbow {
    0% {
      background-color: blue;
  }
    50% {
      background-color: green;
  }
    100% {
      background-color: yellow;
  }
}

animation-fill-mode 指定了在动画结束时元素的样式.

animation-fill-mode: forwards;

animation-iteration-count,这个属性控制动画循环的次数。如果想让动画一直运行,可以把值设置成 infinite

animation-iteration-count: 3;

animation-timing-function 用来定义动画的速度曲线。 速度曲线决定了动画从一套 CSS 样式变为另一套所用的时间。 如果要描述的动画是一辆车在指定时间内(animation-duration)从 A 运动到 B,那么 animation-timing-function 表述的就是车在运动中的加速和减速等过程。有一些预定义的关键字可用于常见的选项。 比如,默认值是 ease,动画以低速开始,然后加快,在结束前变慢。 其它常用的值包括 ease-out:动画以高速开始,以低速结束;ease-in,动画以低速开始,以高速结束;linear:动画从头到尾的速度是相同的。


贝塞尔曲线 Bezier Curve

在 CSS 动画里,用 cubic-bezier 来定义贝塞尔曲线。 曲线的形状代表了动画的速度。 曲线在 1 * 1 的坐标系统内, 其中 X 轴代表动画的时间间隔(类似于时间比例尺),Y 轴代表动画的改变。

cubic-bezier 函数包含了 1 * 1 网格里的4个点:p0p1p2p3。 其中 p0p3 是固定值,代表曲线的起始点和结束点,坐标值依次为 (0, 0) 和 (1, 1)。 你只需设置另外两点的 x 值和 y 值,设置的这两点确定了曲线的形状从而确定了动画的速度曲线。 在 CSS 里面通过 (x1, y1, x2, y2) 来确定 p1p2。 以下就是 CSS 贝塞尔曲线的例子:

animation-timing-function: cubic-bezier(0.25, 0.25, 0.75, 0.75);

对齐 Align

文本对齐

见第一标题文本下对齐子标题。

HTML 元素对齐

HTML 元素对齐需要考虑盒子模型和文档流。

居中对齐

对于块级元素:

先给元素设定宽度,然后推外边距至充满父元素的可用空间。

通过设置边距把父元素的空间可视化:

.parent {
  border: 5px solid red;
}

把子元素的宽度设置为父元素的 50%,给一定的内边矩(把元素变为空心)和边框(为了可视化),为了居中子元素,把外边距设置为 auto ,该属性告诉浏览器根据可用空间自动计算外边距:

.child {
  width: 50%;
  padding: 20px;
  border: 4px solid green;
  margin: auto;
}

对于行内元素,需要先把其变为块级元素,然后应用相同的方式:

.child {
  display: block;
  border: 4px dashed blue;
  margin: auto;
}

左右对齐

常用方式是使用 float 属性或者 position 属性。

float 属性设置元素位置相对于其父元素的文本内容。文本会包住子元素。

右对齐:

Lorem
.child {
  float: right;
}

注意文本内容在 img 元素之后,此时图片的右部和顶部是挨着屏幕的,如果文本内容在图片之前,那么图片的顶部会挨着文本。

你可能感兴趣的:(前端htmlcss)