2023年3月

一、CSS工作原理?

首先浏览器载入HTML文件,将HTML文件转化为一个DOM(一个DOM有一个树形结构,标记语言中的每一个元素、属性以及每一段文字都对应结构树中的一个节点)。然后,浏览器会拉取该HTML相关的大部分资源(包括需要加载的图片,视频,CSS样式等)。然后选择器拉取到CSS后会进行解析,就是根据选择器的不同,将不同的规则应用于对应的DOM结点中,并添加节点依赖的样式(上述内容称为渲染树)。上述规则用于渲染树之后,渲染树会依照应该出现的结构进布局。网页显示在出来。

注:如果浏览器碰到没有办法解析的CSS代码,那么浏览器会直接跳过这段代码,接着执行下去。

二、如何构建CSS?

我们在文档中使用CSS有三种方法。一种方法是使用外部样式表、一种是使用内部样式表,还有一种是内联样式。

-外部样式表:就是我们再写一个.css文件,然后再HTML的<link>中对他进行引用

<!DOCTYPE html>
<html>
    <head>
        <metacharset="utf-8">
        <title>My CSS experiment</title>
        <linkhref="test21style.css"rel="stylesheet">
    </head>
    <body>
        <h1>Hello world</h1>
        <p>This is my first CSS example</p>
    </body>
</html>
h1{
color:blue;
background-color: yellow;
border: 1px solid black;
}
p{
color:red;
}

第二个图片内是test21style.css文件的内容。

注:这两个文件最好放在同一个文件夹里面,方面我们后期进行寻找。但是如果不在一个文件夹里面的话,我们需要写出其完整的路径。

在文件夹外面,但是同属于一个大文件夹里时:

        <linkhref="../test21style.css"rel="stylesheet">

在文件夹里面的另外一个子文件夹:

        <linkhref="Ctest21/test21style.css"rel="stylesheet">

-内部样式表:就是在HTML的<head>中的style内写入CSS内容

<head>
    <metacharset="utf-8">
    <title>My CSS experiment</title>
    <!--<link href="Ctest21/test21style.css" rel="stylesheet">-->
    <style>h1{color:blue;background-color:yellow;border:1px solid black;
        }p{color:red;
        }
    </style>
</head>

-内联样式:就是直接在指定的元素哪里写CSS样式。

    <h1style=" color: blue; border: 1px solid black;">Hello world</h1>
    <pstyle="color: red;">This is my first CSS example</p>

注:内联样式不推荐使用。因为后期修改不方便

三、在文本中使用CSS。

我们在讲述完CSS可以在哪写之后,我们来讲述一下如何将CSS用在文本上面。我们将CSS中的样式显示到网页中,这个时候,我们必须先说明选择器的概念。选择器就是将CSS中写好的样式选中HTML中相应的元素,然后展现出来。如同我们上面写的p,h1,包括我们下面写的.special这些都是选择器。

我们的案例如下:

HTML文件内容:

<!DOCTYPE html>
<htmllang="en">
    <head>
        <metacharset="utf-8">
        <title>My CSS experiment</title>
        <linkhref="test22.css"rel="stylesheet">
    </head>
    <body>
        <pid="special">Create your test HTML here</p>
    </body>
</html>

CSS文件内容:

#special{
color: blue;
}

p{
color: red;
}

如果我们运行了这行代码,我们会发现文本会显示为蓝色。这是因为id选择器的优先级会高于元素选择器,并且需要指出一点的是类选择器的优先级也会高于元素选择器。除此以外,如果我们将CSS代码的类选择器的#specil换成p,那么页面会显示为红色。这是因为将其设置为红色的声明设置在后面,会将之前写的覆盖掉(这也叫作级联)。我们注意一下上面写的CSS代码,他们的组成就是(属性:值)。

四、CSS中的函数

之前CSS是没有函数给你用的,但是最近出来了一些函数,给你进行简单运算,比如.calc()、.rotate()、@规则

calc()是用于width或height这种,计算出盒子的长度的类型。.rotate()是用于transform中的。案例如下:

transform: rotate(0.8turn);

@规则是如果我们需要将额外的样式表导入主CSS样式表,可以使用@,还有另外一种情况是@media,这用于当某些条件成立的时候,允许使用媒体查询来应用CSS。

案例如下:

@media (min-width:50em){
body: {
background-color: blue;
};
}/*当浏览器宽度于50em,背景色为蓝色*/

五、CSS的颜色、单位、字体

CSS颜色
可以分为背景颜色、文本颜色、边框颜色(注:从下面的案例中我们会发现我们可以直接使用颜色的名称用于颜色显示),但是我们也可以使用RGB值、HEX值、HSL值、RGBA值、HSLA值用于表示颜色值。

background-color: blue;/*背景颜色*/
color: red;/*文本颜色*/
border:5px solid black;/*边框颜色*/

在CSS中,接受“长度”值的CSS属性包括:width、margin、padding、font-size等。长度分为两种类型:绝对单位和相对单位。

--绝对单位:就是固定的,和我们实际生活中的单位长度是一致的,包括cm mm in(英寸) px(像素) pt(点) pc(派卡)

--相对单位:是指相对于另外一个长度属性的长度。具体看下面链接:https://www.w3school.com.cn/css/css_units.asp

CSS的字体
:CSS定义了五种通用的字体,包括Serif字体、Sans-serif字体、Monospace字体、Cursive字体、还有Fantasy字体。

我们使用这些字体的话,需要使用一个font-family属性。这个使用方法就是“属性名:值”,有的时候,我们会存在一种字体用户不存在的情况,就直接“值,值,‘值’”的形式了,就是里面打单引号的值是为了用于例如New York这种的里面有空格的样式。

--字体的样式为:font-style.它可以使用的值的种类包括:normal(文本正常显示),italic(文本斜体显示),oblique(文本倾斜显示)

--字体的粗细:font-weight。它的值范围为100-900.100为最细的字体,900为最粗的字体。400等价于。normal,700等价于bold.

--字体的大小:font-size:它的值可以是绝对值也可以是相对值,如果没有设置值的大小,就默认为16像素(1em=16px)

六、CSS构建文本

我们在上面已经解释清楚了CSS是什么,CSS文件如何构建,CSS如何在HTML中发挥作用以及我们创建一个文档的时候最基础的就是文字,这个文字如何进行装饰。现在我们想象一下,我们一篇文章给你,我们除了得知道文字的装饰,我们也得知道如何将我们的文章变得更加好看一些。比如我们应该如何进行标题的装饰,首行缩进这些知识。

--文本的缩进:text-index,这个属性会使得所有元素的第一行都可以缩进一个给定的长度,这个长度甚至可以是负值。一般来说,可以为所有块级元素应用 text-indent,但无法将该属性应用于行内元素,图像之类的替换元素上也无法应用 text-indent 属性。不过,如果一个块级元素(比如段落)的首行中有一个图像,它会随该行的其余文本移动。

案例如下:

.box{
margin: 30px;
width:100px;
height: 100px;
background-color: rebeccapurple;
transform: rotate(0.8turn);
/*text-indent: -5em;*/
}

如果我们将上面代码的注释删除掉。那么会出现这样的状况:

除了负值,text-indet还可以使用百分比值。百分比值就是相对于父元素缩进的长度。案例如下,就是我们设置了outer大小为500px,那么inner会缩进50个像素,然后下面的段落会缩进25个像素(这里是因为它继承了inner元素的缩进值的基础上再次乘以0.5),但是如果我们仅仅给出段落的长度,那这个段落实际上缩进值还是为50.然后问题来了,就是如果我们不需要这个段落进行缩进呢?那就直接吧text-indet的值设置为0好了。

CSS代码:

p{
color: red;/*文本颜色*/
width: 50%;
}
#outer {
width: 500px;
}
#inner {
text-indent: 10%;
}

HTML代码:

<divid="outer">hello,world<divid="inner">some text,some text ,some text<p>this is a paragraph</p>
            </div>
        </div>

显示:

从上面我们可以下一个结论,就是如果我们想要使用继承,那么我们选择器里面就不要写text-indent,这个时候他会继承父元素。

--水平对齐,这里我们可以使用text-align。它允许的值包括left、right、center

这里需要解释一下
<CENTER>和text-align的区别
,就是<CENTER> 不仅影响文本,还会把整个元素居中。text-align 不会控制元素的对齐,而只影响内部内容。元素本身不会从一段移到另一端,只是其中的文本受影响。然后justify是两端对齐属性。

--字间隔:word-spacing.这个属性的值可以是正,也可以是负。如果值是正的话,那么字间距会被拉大;如果我们的值是负的话,字的间距会被拉小。normal的字间距为0.与这个属性类似的属性是letter-spacing。letter-spacing属性是用于改变字符或者字母之间的间隔。

--文本装饰:text-decoration:它可以使用的值包括none、underline、overline、line-through、blink。示例如下:

    <head>
        <metacharset="utf-8">
        <styletype="text/css">#d1{text-decoration:underline;/*下划线*/
            }#d2{text-decoration:overline;/*上划线*/
            }#d3{text-decoration:line-through overline;/*贯穿线*/
            }#d4{text-decoration:blink;/*文本闪烁*/
            }

        </style>
        <title>decoration</title>
    </head>
    <body>
        <pid="d1">Hello world</p>
        <pid="d2">My hometown</p>
        <pid="d3">Last Day</p>
        <pid="d4">Oh,dear</p>
    </body>

输出:

注:我们会发现最后一行没有闪烁,这不是说这个属性错掉了,而是说这个属性只在Firefox中会显示出来。

--处理空白符:这个可以使用white-space属性。它可以使用的值以及效果如下:

--还有一个比较特殊的地方,就是我们古代汉语是从右往左阅读的,这意味着我们需要一个属性来控制文本方向。

这个就是direction属性,他有两个值:ltr(从左到右)和rtl(从右到左)



注:以上内容均出自http://ife.baidu.com/%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8%E7%8F%AD/css/styleCv.html

一、背景样式分为两种,一种是背景颜色(background-color),另外一种是背景图片(background-image)

--对于
bakcground-color
:就是选择好相应的盒子然后设置好它的颜色就可以了,通常设置的盒子标签有<span>等。案例如下:

    <body>
        <divclass="box">
            <h2>Background color</h2>
            <p>Try to change your background color<span> from IFE</span></p>
        </div>
    </body>
.box{
background-color:#567895;
}
h2{
background-color:black;
color:white;
}

span{
background-color:rgba(255,255,255,5);
}

注:这里可能会出现一个问题,就是我们将vs code中的代码在chrome中显示,会出现localhost。

结局方案可以参考这篇博客:https://blog.csdn.net/qq_40935723/article/details/105880218。这篇博客里面写了这个问题的解决方法。

以及这个解决方案:https://stackoverflow.com/questions/52682446/visual-studio-code-debugger-with-chrome-refused-to-connect-to-localhost

--对于
background-image
:就是在背景中显示图像。如果我们的背景图片足够大的话,那么实际上这张照片会覆盖掉页面,并且这个图片是不会缩小来适应我们设置的框图。如果我们给的图片有点小,那么这个图片实际上会平铺这个页面。

我们可以通过设置background-repeat来控制背景平铺的样式,background-repeat的值包括:

no-repeat:不重复

repeat-x:水平重复

repeat-y:垂直重复

repeat:在两个方向重复

我们也可以通过background-size来控制背景图片的尺寸。在这里,我们可以使用的值有两个,一个是cover,一个是contain

-cover:浏览器将使图像足够大,使它完全覆盖了盒子区,同时仍然保持其高宽比。在这种情况下,有些图像可能会跳出盒子外。

contain:浏览器将使图像的大小适合盒子内。在这种情况下,如果图像的长宽比与盒子的长宽比不同,则可能在图像的任何一边或顶部和底部出现间隙。

我们可以使用background-position来选择将背景图片显示在盒中的位置。(默认的背景位置是(0,0)
)。

常见的背景位置值有两个单独的值,一个水平值,一个垂直值。

渐变背景的设置:这里涉及到CSS数据类型的一个子类型:gradient——它被用于表现两种或多种颜色的过渡转变。

grandient值的可以分为三种:一种是线性渐变(
linear-gradient
),一种是径向渐变(
radial-gradient)
。还有一种是重复渐变(
repeating-linear-gradient 或者
repeating-radial-gradient
)。线性渐变是说颜色沿着一条隐式的直线逐渐过渡;径向渐变是指颜色值由一个中心点(原点)向外扩散并逐渐过渡到其他颜色值;重复渐变是指重复多次渐变图案直到足够填满指定元素。

我们通过使用background-attachment属性来控制背景是如何滚动的。它可以接受的值包括:

--scroll:背景图片位置固定,其他元素随着鼠标的滑动而滑动。

--fixed:背景图片固定,无论我们怎么滑动页面,背景图片位置都不发生变化。

--local:背景图片和元素固定在一起。当我们滚动元素的时候,背景图片也随着进行滚动。

一、CSS border 属性用于指定元素边框的样式、宽度和颜色。即使用border-style,通过设置其适当的值来更改样式。

border-style允许的值包括:

--dotted:定义点线边框。

--dashed:定义虚线边框.

--solid:定义实线边框。

--double:定义双边线。

--groove:根据颜色值添加斜角,使元素看起来被压入文档。效果取决于 border-color 值。

--ridge:类似于凹槽,但以一种使元素看起来凸起的方式反转颜色值。效果取决于 border-color 值。

--inset:向线条添加分裂色调,使元素看起来略微凹陷。效果取决于 border-color 值。

--outset:类似于 inset,但以一种使元素看起来略微凸起的方式反转颜色。效果取决于 border-color 值。

--none:定义无边框。

--hidden:定义隐藏边框。

除此以外,我们也可以设置圆边框。这个就是通过设置border-radius值来实现的。

我们需要有一个案例对上面的知识点进行进一步的解释说明:

<!DOCTYPE html>
<htmllang="en">
    <head>
        <metacharset="utf-8">
        <title>borde style</title>
        <style>.box{width:auto;height:auto;
            }.small_box{width:200px;height:30px;margin:auto;left:0;right:0;top:0;bottom:0;position:absolute;
            }#green_solid,#green_dotted,#green_dashed,#green_double,#green_groove,#green_ridge,#green_inset,#green_outset{width:300px;height:300px;padding:20px,0px,20px,50px;margin-right:20px;margin-bottom:30px;float:left;position:relative;
                
            }/*注意,上面使用了代码重复的解决办法*/#green_solid{border:5px solid green;
            }#green_dotted{border:5px dotted green;
            }#green_dashed{border:5px dashed green;  
            }#green_double{border:5px double green;
            }#green_groove{border:5px groove greenyellow;
            }#green_ridge{border:5px ridge greenyellow;
            }#green_inset{border:5px inset greenyellow;
            }#green_outset{border:5px outset greenyellow;
            }
        </style>
    </head>
    <body>
        <divclass="box">
            <divid="green_solid">
                <divclass="small_box">box with a solid border</div>
            </div>
            <divid="green_dotted">
                <divclass="small_box">box with a dotted border</div>
            </div>
            <divid="green_dashed">
                <divclass="small_box">box with a dashed border</div>
            </div>
            <divid="green_double">
                <divclass="small_box">box with a double border</div>
            </div>
        </div>
        <divclass="box">
            <divid="green_groove">
                <divclass="small_box">box with a groove border</div>
            </div>
            <divid="green_ridge">
                <divclass="small_box">box with a ridge border</div>
            </div>
            <divid="green_inset">
                <divclass="small_box">box with a inset border</div>
            </div>
            <divid="green_outset">
                <divclass="small_box">box with a outset border</div>
            </div>
        </div>
    </body>
</html>

样式:

上面的案例,解释了几种常见的边框样式。(注意,因为本人界面的问题,将border宽度值设置的很小,可能不够明显,大家可以选择对其放大查看长啥样子。)


注:以上内容均来自http://ife.baidu.com/%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8%E7%8F%AD/css/styleCv.html

一、斐波那契数列是什么东西?

他是这样的一个数列,第一个数是1,第二个数是1,第三个数是前面两个数的和,也就是2,第四个数是前面两个数的和,也就是3,以此类推。

二、那么我们应该如何实现斐波那契数列呢?

就按照上面的思路,我们就可以实现斐波那契数列了,就是我们首先得设置好前面两个值,后面直接加上去就可以了。

实现代码:

importjava.util.Scanner;public classfeibo{public static voidmain(String[] args){
Scanner sc
=newScanner(System.in);int n=sc.nextInt();int a=1,b=1;for(int i=1;i<=n;i++)
{
System.out.println(a);
int sum=a+b;
a
=b;
b
=sum;
}
}
}

如果我们使用数组的话,代码是这样的,就会显得更为直观:

importjava.util.Scanner;public classfeibo{public static voidmain(String[] args){
Scanner sc
=newScanner(System.in);int n=sc.nextInt();int[] f=new int[n+1];
f[
0]=1;
f[
1]=1;for(int i=2;i<=n;i++){
f[i]
=f[i-1]+f[i-2];
}
for(int j=0;j<n;j++){
System.out.println(f[j]);
}
}
}

一、什么是完全数?

就是一个数:它满足除了它本身以外所有的因子的和是这个数的本身,那么我们就称这个数是完全数。例如6=1+2+3;那么6就是一个完全数。

二、代码的实现:

1、实现思路:

我们可以求出它的因子,然后再进行判断。这里需要注意的两个地方是:如果我们选择顺序循环下去,然后直接把剩下的因子加上去,这会大大减轻我们的工作量,一个数它必然会有因子1,这个时候就会加上这个数本身,然后我们就要把它删掉。如果有一个数,它除以了一个因子,商和除数相等,这个时候,这个因子就会加两次。我们得去掉这种情况。

2、代码实现:

importjava.util.Scanner;public classwanquan {public static voidmain(String[] args){
Scanner sc
=newScanner(System.in);int n=sc.nextInt();inti;int sum=-n;for(i=1;i*i<n;i++){if(n%i==0){
sum
+=i;if(n/i!=i){
sum
+=n/i;
}
}
}
if(sum==n){
System.out.printf(
"This is perfect");
}
else{
System.out.printf(
"This is not perfect");
}
}
}