css是一种用于设计网页样式的语言,作为前端开发中最基础和重要的技术之一,熟练掌握其语法和特性对于开发高质量网页至关重要。在css中,继承是一种非常有用的机制,它可以使设计网页样式更加简洁和高效。在本文中,我们将介绍css中继承的写法以及如何运用它来提高css代码的可维护性。
什么是继承?
首先,让我们来了解一下CSS中的继承是什么。CSS中的属性可以被继承,这意味着当一个元素的某个属性被设置时,它的子元素将自动继承它的值。例如,如果你在父元素上设置了字体颜色,它的子元素将自动继承它的颜色。
继承可以极大地简化CSS代码,因为它可以减少重复的代码量。通过使用继承,你可以将样式应用于页面上的多个元素,而不必在每个元素中都手动定义该样式。这使得CSS代码更加简洁,易于管理和维护。
如何使用继承?
在CSS中,使用继承非常简单。你只需要在父元素中定义一个属性,子元素将自动继承该属性。以下是一个简单的示例:
.parent { color: red; } .child { font-size: 16px; }
在这个例子中,.child元素继承了.parent的颜色属性,因此它的字体颜色将是红色。另外,.child元素定义了自己的字体大小,因此它将保留该属性。
在某些情况下,你可能想要阻止继承发生。你可以使用inherit关键字来覆盖继承的属性。例如:
.parent { color: red; } .child { font-size: inherit; }
在这个例子中,.child元素继承了.parent的颜色属性,但它的字体大小被设置为inherit,因此它将继承其父元素的字体大小。
另一种阻止继承的方法是使用initial关键字。该关键字将属性设置为其默认值。例如:
.parent { color: red; } .child { color: initial; }
在这个例子中,.child元素将不再继承.parent的颜色属性,而是被设置为该属性的默认值。默认情况下,文本元素的颜色是黑色。
继承的优缺点
尽管继承带来了很多优势,但它也有一定的局限性和缺点。以下是一些注意事项:
继承仅限于某些属性。不能将所有属性设置为可继承,例如渐变,背景图像,边框等。继承可能导致复杂的层叠规则。如果存在多重继承,则需要考虑哪个属性将具有优先级,这可能导致代码难以调试和维护。在一些特殊情况下,继承可能会导致不必要的重绘或重排,这会影响性能。
结论
CSS中继承是一种极其有用和强大的技术,可以减少重复的代码,提高层叠效果的优先级和代码的可读性。尽管它存在一些限制和缺点,但你仍然应该学习并掌握继承的写法,以便在编写高质量、易于维护的代码时发挥它的作用。
前端入门到VUE实战笔记:立即学习
>在学习笔记中,你将探索 前端 的入门与实战技巧!
Java字节流、字符流和对象流的读写文件操作
首先,在src文件夹下新建一个images文件夹
在src文件夹下放入一张 名为Maize.jpg的图片
执行代码,可见images文件夹下已出现复制过来的Maize.jpg
同时我们也看到生成了tickler.txt备忘录文件,
所以显示记事本文件已读取,内容为: 记得每天吃早餐!
接着我们输入5个学生的名字:
可见学生信息列表已读出相应名字,随机点名器也随机点名出一位同学的名字
而且还单独添加了一位同学的信息:lxh
接下来分别添加hrh、lgh、mzj的信息
最后学生信息列表读出最终的所有名字
代码
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class TestIO{
public static void main(String[] args) throws IOException, ClassNotFoundException {
//上传图片到当前项目中(使用字节缓冲输入输出流)
//创建文件输入流对象
FileInputStream fis = new FileInputStream("src\\Maize.jpg");
//创建文件输出流对象
FileOutputStream fos = new FileOutputStream("src\\images\\Maize.jpg");
//将创建的节点流的对象作为形参传递给缓冲流的构造方法
BufferedInputStream bis=new BufferedInputStream(fis);
BufferedOutputStream bos=new BufferedOutputStream(fos);
int len; //定义len,记录每次读取的字节
//复制文件前的系统时间
long begin = System.currentTimeMillis();
//读取文件并判断是否到达文件末尾
while ((len= fis.read())!=-1){
bos.write(len); //从第1个字节开始,向文件写入len个字节
}
//复制文件后的系统时间
long end = System.currentTimeMillis();
System.out.println(" 复制文件耗时: "+(end-begin)+"毫秒");
bos.close();
bis.close();
//上传一个记事本文件到当前项目中(使用字符文件输入输出流)。
File file = new File("tickler.txt");
FileWriter fw=new FileWriter(file);
fw.write("记得每天吃早餐!");
fw.close();
File file1=new File("tickler.txt");
FileReader fr=new FileReader(file1);
int len1; //定义len,记录读取的字符
//判断是否读取到文件的末尾
System.out.print("记事本文件已读取,内容为: ");
while((len1= fr.read())!=-1){
//输出文件内容
System.out.print((char)len1);
}
fr.close();
//添加5个学生的姓名到name.txt文件中(使用集合的方式用字符缓冲输入输出流)
FileWriter fw1=new FileWriter("src/name.txt");
BufferedWriter bw=new BufferedWriter(fw1);
System.out.println("\n请输入5个学生的名字:");
Scanner scanner1=new Scanner(System.in);
List nameList=new ArrayList();
//每次读取一行文本,判断是否到文件末尾
for(int i=1;i<=5;i++){
String name=scanner1.nextLine();
nameList.add(name);
}
for(int j=0;j<=4;j++){
bw.write((String) nameList.get(j));
//写入一个换行符,该方法会根据不同操作系统生成相应换行符
bw.newLine();
}
bw.close(); //释放资源
String str;
FileReader fr1=new FileReader("src/name.txt"); //创建字符缓冲输入流对象
BufferedReader br=new BufferedReader(fr1);
System.out.println("\n-----------学生信息列表------------");
while((str=br.readLine())!=null) {
System.out.println(str);
}
br.close();
//点名器:在第3个实验中生成一个name.txt文件,里面存储了班级同学的姓名,每个姓名占一行,要求通过程序实现随机点名器。
String str2;
FileReader fr2=new FileReader("src/name.txt");
List nameList2=new ArrayList(); //创建ArrayList集合对象
BufferedReader br2=new BufferedReader(fr2); //创建字符缓冲输入流对象
while((str2=br2.readLine())!=null) { //通过字符缓冲输入流对象的方法读数据,每读一个名字(一行数据)数据作为集合元素存储到集合中。
nameList2.add(str2);
}
br2.close(); //释放资源
System.out.print("随机点名器:");
Random random=new Random(); //使用Random产生一个随机数
int count=random.nextInt(nameList2.size()); //随机数范围为【0,集合的长度)
System.out.println(nameList2.get(count)); //随机数作为索引获取集合的元素并输出
//添加一个用户信息到文件(使用对象输出输入流)
Student student1=new Student("lxh");
nameList.add(student1.getName());
//创建文件输出流对象,将数据写入name.txt文件
FileOutputStream fos1=new FileOutputStream("src/name.txt");
//创建对象输出流对象
ObjectOutputStream oos=new ObjectOutputStream(fos1);
oos.writeObject(student1); //将s对象序列化
FileInputStream fis1=new FileInputStream("src/name.txt");
ObjectInputStream ois=new ObjectInputStream(fis1);
//从student.txt文件中读取数据
Student student2=(Student)ois.readObject();
System.out.println("已添加学生:"+student2.getName());
//添加多个用户信息到文件(采用集合并使用对象输出输入流)
System.out.print("请输入添加的学生信息的数量:");
int number=scanner1.nextInt();
System.out.println("请输入学生名字:");
List nameList1=new ArrayList();
//每次读取一行文本,判断是否到文件末尾
for(int i=0;i<=number;i++){
String name1=scanner1.nextLine();
nameList1.add(name1);
}
for(int i=1;i