布局思路如下
- 根据族来划分元素,纵向排列各族内元素,然后在横向上排列各个族
<div class="wrapper">
<div class="e-con">
<div class="period-index">
<div class="pi-des des-bg"></div>
<div class="pi-con fdisxy" v-for="index in 7">{{index}}</div>
</div>
<div class="elements fdisc" v-for="clans,key in tableData" :class="[key=='VIIIa'?'special-width':'']">
<div class="des-bg des-a fdisc" v-if="key=='IA'">
<div class="clans-name">I<span class="text-red">A</span></div>
<div class="r-text">1</div>
</div>
<div class="des-bg des-b fdisc" v-else-if="key=='IIA'">
<div>II<span class="text-red">A</span></div>
<div class="r-text">2</div>
</div>
<div class="des-bg des-c fdisc" v-else-if="key=='IIIB'">
<div>III<span class="text-red">B</span></div>
<div class="r-text">3</div>
</div>
<div class="des-bg des-c fdisc" v-else-if="key=='IVB'">
<div>IV<span class="text-red">B</span></div>
<div class="r-text">4</div>
</div>
<div class="des-bg des-c fdisc" v-else-if="key=='VB'">
<div>V<span class="text-red">B</span></div>
<div class="r-text">5</div>
</div>
<div class="des-bg des-c fdisc" v-else-if="key=='VIB'">
<div>VI<span class="text-red">B</span></div>
<div class="r-text">6</div>
</div>
<div class="des-bg des-c fdisc" v-else-if="key=='VIIB'">
<div>VII<span class="text-red">B</span></div>
<div class="r-text">7</div>
</div>
<div class="des-bg des-d fdisr" v-else-if="key=='VIIIa'" v-once>
<div class="index-head">VIII</div>
<div class="i-text">8</div>
<div class="i-text">9</div>
<div class="i-text">10</div>
</div>
<div v-else-if="key=='VIIIb'"></div>
<div v-else-if="key=='VIIIc'"></div>
<div class="des-bg des-c fdisc" v-else-if="key=='IB'">
<div>I<span class="text-red">B</span></div>
<div class="r-text">11</div>
</div>
<div class="des-bg des-c fdisc" v-else-if="key=='IIB'">
<div>II<span class="text-red">B</span></div>
<div class="r-text">12</div>
</div>
<div class="des-bg des-b fdisc bdl-normal" v-else-if="key=='IIIA'">
<div>III<span class="text-red">A</span></div>
<div class="r-text">13</div>
</div>
<div class="des-bg des-b fdisc" v-else-if="key=='IVA'">
<div>IV<span class="text-red">A</span></div>
<div class="r-text">14</div>
</div>
<div class="des-bg des-b fdisc" v-else-if="key=='VA'">
<div>V<span class="text-red">A</span></div>
<div class="r-text">15</div>
</div>
<div class="des-bg des-b fdisc" v-else-if="key=='VIA'">
<div>VI<span class="text-red">A</span></div>
<div class="r-text">16</div>
</div>
<div class="des-bg des-b fdisc" v-else-if="key=='VIIA'">
<div>VII<span class="text-red">A</span></div>
<div class="r-text">17</div>
</div>
<div class="des-bg des-a fdisc bdl-normal" v-else-if="key=='ZERO'">
<div>0</div>
<div class="r-text">18</div>
</div>
<div class="element-con fdisc" v-for="element in clans" :class="[element.metallic?'elc-metal-bg':'elc-nometal-bg',key=='IIIB'?'bdl-red':'',key=='IIB'?'bdr-red':'', checkExcessive(key)?'excessive':'',element.blank?'blank-con':'',borderFix(element.index)?'bdl-normal':'']">
<div class="ec-a-s fdisc" v-if="element.index=='57~71'||element.index=='89~103'">
<div class="e-index-s">{{element.index}}</div>
<div class="e-symbol-s" :class="[element.index=='89~103'?'text-red':'']">{{element.chemicalymbol}}</div>
</div>
<div class="ec-a fdisr" v-else>
<div class="e-index">{{element.index}}</div>
<div class="e-symbol" :class="[element.radioactivity?'text-red':'']">{{element.chemicalymbol}}</div>
</div>
<div class="ec-b">
{{element.chemicalName}}
</div>
<div class="ec-c" v-html="element.valenceElectron">
</div>
<div class="ec-d">
{{element.relativeAtomicMass}}
</div>
</div>
</div>
<div class="electronic-con fdisc">
<div class="des-e fdisxy">电子层</div>
<div class="ecs fdisc" v-for="(symbol,index) in electronics">
<div class="ec-item" v-for="(eleCut,cindex) in cutElectronics(index)">{{eleCut}}</div>
</div>
</div>
<div class="electronic-con fdisc">
<div class="des-e fdisxy">0族电子数</div>
<div class="ecs fdisc" v-for="(symbol,index) in electronicsNum">
<div class="ec-item" v-for="(eleCut,cindex) in cutElectronicsNum(index)">{{eleCut}}</div>
</div>
</div>
</div>
<div class="extra-con fdisr" style="margin-top: 50px;">
<div class="period-index">
<div class="extra-pi-con fdisxy">镧系</div>
</div>
<div class="extra-element-con fdisc" v-for="element in LaSeries" :class="[element.metallic?'elc-metal-bg':'elc-nometal-bg',]">
<div class="ec-a-s fdisc" v-if="element.index=='57~71'||element.index=='89~103'">
<div class="e-index-s">{{element.index}}</div>
<div class="e-symbol-s" :class="[element.index=='89~103'?'text-red':'']">{{element.chemicalymbol}}</div>
</div>
<div class="ec-a fdisr" v-else>
<div class="e-index">{{element.index}}</div>
<div class="e-symbol" :class="[element.radioactivity?'text-red':'']">{{element.chemicalymbol}}</div>
</div>
<div class="ec-b">
{{element.chemicalName}}
</div>
<div class="ec-c" v-html="element.valenceElectron">
</div>
<div class="ec-d">
{{element.relativeAtomicMass}}
</div>
</div>
</div>
<div class="extra-con fdisr" style="margin-top: 10px;">
<div class="period-index">
<div class="extra-pi-con fdisxy">锕系</div>
</div>
<div class="extra-element-con fdisc" v-for="element in AcSeries" :class="[element.metallic?'elc-metal-bg':'elc-nometal-bg',]">
<div class="ec-a-s fdisc" v-if="element.index=='57~71'||element.index=='89~103'">
<div class="e-index-s">{{element.index}}</div>
<div class="e-symbol-s" :class="[element.index=='89~103'?'text-red':'']">{{element.chemicalymbol}}</div>
</div>
<div class="ec-a fdisr" v-else>
<div class="e-index">{{element.index}}</div>
<div class="e-symbol" :class="[element.radioactivity?'text-red':'']">{{element.chemicalymbol}}</div>
</div>
<div class="ec-b">
{{element.chemicalName}}
</div>
<div class="ec-c" v-html="element.valenceElectron">
</div>
<div class="ec-d">
{{element.relativeAtomicMass}}
</div>
</div>
</div>
</div>
</header>
<script setup>
import { RouterLink, RouterView } from "vue-router";
import HelloWorld from "./components/HelloWorld.vue";
import { reactive, ref } from "vue";
let electronics = ref(["P", "O", "N", "M", "L", "K"]);
let electronicsNum = ref([8, 18, 32, 18, 8, 2]);
let LaSeries = ref([
{
index: 57,
chemicalymbol: "La",
chemicalName: "镧",
valenceElectron: "5d<sup>1</sup>6s<sup>2</sup>",
relativeAtomicMass: 138.9,
metallic: true,
radioactivity: false,
},
]);
let AcSeries = ref([
{
index: 89,
chemicalymbol: "Ac",
chemicalName: "锕",
valenceElectron: "6d<sup>1</sup>7s<sup>2</sup>",
relativeAtomicMass: "〔227〕",
metallic: true,
radioactivity: true,
},
]);
let tableData = ref({
IA: [
{
index: 1,
chemicalymbol: "H",
chemicalName: "氢",
valenceElectron: "1s<sup>1</sup>",
relativeAtomicMass: 1.008,
metallic: false,
},
{
index: 3,
chemicalymbol: "Li",
chemicalName: "锂",
valenceElectron: "2s<sup>1</sup>",
relativeAtomicMass: 6.941,
metallic: true,
},
{
index: 11,
chemicalymbol: "Na",
chemicalName: "钠",
valenceElectron: "3s<sup>1</sup>",
relativeAtomicMass: 22.99,
metallic: true,
},
{
index: 19,
chemicalymbol: "K",
chemicalName: "钾",
valenceElectron: "4s<sup>1</sup>",
relativeAtomicMass: 39.1,
metallic: true,
},
{
index: 37,
chemicalymbol: "Rb",
chemicalName: "铷",
valenceElectron: "5s<sup>1</sup>",
relativeAtomicMass: 85.47,
metallic: true,
},
{
index: 55,
chemicalymbol: "Cs",
chemicalName: "铯",
valenceElectron: "6s<sup>1</sup>",
relativeAtomicMass: 132.9,
metallic: true,
},
{
index: 87,
chemicalymbol: "Fr",
chemicalName: "钫",
valenceElectron: "7s<sup>1</sup>",
relativeAtomicMass: "〔223〕",
metallic: true,
radioactivity: true,
},
],
IIA: [
{
index: 4,
chemicalymbol: "Be",
chemicalName: "铍",
valenceElectron: "2s<sup>2</sup>",
relativeAtomicMass: 9.012,
metallic: true,
},
{
index: 12,
chemicalymbol: "Mg",
chemicalName: "镁",
valenceElectron: "3s<sup>2</sup>",
relativeAtomicMass: 24.31,
metallic: true,
},
{
index: 20,
chemicalymbol: "Ca",
chemicalName: "钙",
valenceElectron: "4s<sup>2</sup>",
relativeAtomicMass: 40.08,
metallic: true,
},
{
index: 38,
chemicalymbol: "Sr",
chemicalName: "锶",
valenceElectron: "5s<sup>2</sup>",
relativeAtomicMass: 87.62,
metallic: true,
},
{
index: 56,
chemicalymbol: "Ba",
chemicalName: "钡",
valenceElectron: "6s<sup>2</sup>",
relativeAtomicMass: 137.3,
metallic: true,
},
{
index: 88,
chemicalymbol: "Ra",
chemicalName: "镭",
valenceElectron: "7s<sup>2</sup>",
relativeAtomicMass: "〔226〕",
metallic: true,
radioactivity: true,
},
],
IIIB: [
{
index: 21,
chemicalymbol: "Sc",
chemicalName: "钪",
valenceElectron: "3d<sup>1</sup>4s<sup>2</sup>",
relativeAtomicMass: 44.96,
metallic: true,
},
{
index: 39,
chemicalymbol: "Y",
chemicalName: "钇",
valenceElectron: "4d<sup>1</sup>5s<sup>2</sup>",
relativeAtomicMass: 88.91,
metallic: true,
},
{
index: "57~71",
chemicalymbol: "La~Lu",
chemicalName: "镧系",
valenceElectron: "",
relativeAtomicMass: "",
metallic: true,
},
{
index: "89~103",
chemicalymbol: "Ac~Lr",
chemicalName: "锕系",
valenceElectron: "",
relativeAtomicMass: "",
metallic: true,
},
],
IVB: [
{
index: 22,
chemicalymbol: "Ti",
chemicalName: "钛",
valenceElectron: "3d<sup>2</sup>4s<sup>2</sup>",
relativeAtomicMass: 44.96,
metallic: true,
},
{
index: 39,
chemicalymbol: "Zr",
chemicalName: "锆",
valenceElectron: "4d<sup>2</sup>5s<sup>2</sup>",
relativeAtomicMass: 91.22,
metallic: true,
},
{
index: 72,
chemicalymbol: "Hf",
chemicalName: "铪",
valenceElectron: "5d<sup>2</sup>6s<sup>2</sup>",
relativeAtomicMass: 178.5,
metallic: true,
},
{
index: 104,
chemicalymbol: "Rf",
chemicalName: "钅卢*",
valenceElectron: "6d<sup>2</sup>7s<sup>2</sup>",
relativeAtomicMass: "〔261〕",
metallic: true,
radioactivity: true,
},
],
VB: [
{
index: 23,
chemicalymbol: "V",
chemicalName: "钒",
valenceElectron: "3d<sup>3</sup>4s<sup>2</sup>",
relativeAtomicMass: 50.94,
metallic: true,
},
{
index: 41,
chemicalymbol: "Nb",
chemicalName: "铌",
valenceElectron: "4d<sup>4</sup>5s<sup>1</sup>",
relativeAtomicMass: 92.91,
metallic: true,
},
{
index: 73,
chemicalymbol: "Ta",
chemicalName: "钽",
valenceElectron: "5d<sup>3</sup>6s<sup>2</sup>",
relativeAtomicMass: 180.9,
metallic: true,
},
{
index: 105,
chemicalymbol: "Db",
chemicalName: "钅杜*",
valenceElectron: "6d<sup>3</sup>7s<sup>2</sup>",
relativeAtomicMass: "〔262〕",
metallic: true,
radioactivity: true,
},
],
VIB: [
{
index: 24,
chemicalymbol: "Cr",
chemicalName: "铬",
valenceElectron: "3d<sup>5</sup>4s<sup>1</sup>",
relativeAtomicMass: 52.0,
metallic: true,
},
{
index: 42,
chemicalymbol: "Mo",
chemicalName: "钼",
valenceElectron: "4d<sup>5</sup>5s<sup>1</sup>",
relativeAtomicMass: 95.94,
metallic: true,
},
{
index: 74,
chemicalymbol: "W",
chemicalName: "钨",
valenceElectron: "5d<sup>4</sup>6s<sup>2</sup>",
relativeAtomicMass: 183.8,
metallic: true,
},
{
index: 106,
chemicalymbol: "Sg",
chemicalName: "钅喜*",
valenceElectron: " ",
relativeAtomicMass: "〔266〕",
metallic: true,
radioactivity: true,
},
],
VIIB: [
{
index: 25,
chemicalymbol: "Mn",
chemicalName: "锰",
valenceElectron: "3d<sup>5</sup>4s<sup>2</sup>",
relativeAtomicMass: 54.94,
metallic: true,
},
{
index: 43,
chemicalymbol: "Tc",
chemicalName: "锝",
valenceElectron: "4d<sup>5</sup>5s<sup>2</sup>",
relativeAtomicMass: "〔98〕",
metallic: true,
radioactivity: true,
},
{
index: 75,
chemicalymbol: "Re",
chemicalName: "铼",
valenceElectron: "5d<sup>5</sup>6s<sup>2</sup>",
relativeAtomicMass: 186.2,
metallic: true,
},
{
index: 107,
chemicalymbol: "Bh",
chemicalName: "钅波*",
valenceElectron: " ",
relativeAtomicMass: "〔264〕",
metallic: true,
radioactivity: true,
},
],
IB: [
{
index: 29,
chemicalymbol: "Cu",
chemicalName: "铜",
valenceElectron: "3d<sup>10</sup>4s<sup>1</sup>",
relativeAtomicMass: 63.55,
metallic: true,
},
{
index: 47,
chemicalymbol: "Ag",
chemicalName: "银",
valenceElectron: "4d<sup>10</sup>5s<sup>1</sup>",
relativeAtomicMass: "107.9",
metallic: true,
radioactivity: false,
},
{
index: 79,
chemicalymbol: "Au",
chemicalName: "金",
valenceElectron: "5d<sup>10</sup>6s<sup>1</sup>",
relativeAtomicMass: 197.0,
metallic: true,
},
{
index: 111,
chemicalymbol: "Rg",
chemicalName: "钅仑*",
valenceElectron: " ",
relativeAtomicMass: "〔272〕",
metallic: true,
radioactivity: true,
},
],
IIB: [
{
index: 30,
chemicalymbol: "Zn",
chemicalName: "锌",
valenceElectron: "3d<sup>10</sup>4s<sup>2</sup>",
relativeAtomicMass: 65.41,
metallic: true,
},
{
index: 48,
chemicalymbol: "Cd",
chemicalName: "铬",
valenceElectron: "4d<sup>10</sup>5s<sup>2</sup>",
relativeAtomicMass: 112.4,
metallic: true,
radioactivity: false,
},
{
index: 80,
chemicalymbol: "Hg",
chemicalName: "汞",
valenceElectron: "5d<sup>10</sup>6s<sup>2</sup>",
relativeAtomicMass: 200.6,
metallic: true,
},
{
index: 112,
chemicalymbol: "Uub",
chemicalName: "*",
valenceElectron: " ",
relativeAtomicMass: "〔285〕",
metallic: true,
radioactivity: true,
},
],
IIIA: [
{
index: 5,
chemicalymbol: "B",
chemicalName: "硼",
valenceElectron: "2s<sup>2</sup>2p<sup>1</sup>",
relativeAtomicMass: 10.81,
metallic: false,
},
{
index: 13,
chemicalymbol: "Al",
chemicalName: "铝",
valenceElectron: "3s<sup>2</sup>3p<sup>1</sup>",
relativeAtomicMass: 26.98,
metallic: true,
},
{
index: 31,
chemicalymbol: "Ga",
chemicalName: "镓",
valenceElectron: "4s<sup>2</sup>4p<sup>1</sup>",
relativeAtomicMass: 69.72,
metallic: true,
},
{
index: 49,
chemicalymbol: "In",
chemicalName: "铟",
valenceElectron: "5s<sup>2</sup>5p<sup>1</sup>",
relativeAtomicMass: 114.8,
metallic: true,
},
{
index: 81,
chemicalymbol: "Ti",
chemicalName: "铊",
valenceElectron: "6s<sup>2</sup>6p<sup>1</sup>",
relativeAtomicMass: 114.8,
metallic: true,
},
{
blank: true,
},
],
ZERO: [
{
index: 2,
chemicalymbol: "He",
chemicalName: "氦",
valenceElectron: "1s<sup>2",
relativeAtomicMass: 4.003,
metallic: false,
},
{
index: 10,
chemicalymbol: "Ne",
chemicalName: "氖",
valenceElectron: "2s<sup>2</sup>2p<sup>6</sup>",
relativeAtomicMass: 21.18,
metallic: false,
},
{
index: 18,
chemicalymbol: "Ar",
chemicalName: "氩",
valenceElectron: "3s<sup>2</sup>3p<sup>6</sup>",
relativeAtomicMass: 39.95,
metallic: false,
},
{
index: 36,
chemicalymbol: "Kr",
chemicalName: "氪",
valenceElectron: "4s<sup>2</sup>4p<sup>6</sup>",
relativeAtomicMass: 83.8,
metallic: false,
},
{
index: 54,
chemicalymbol: "Xe",
chemicalName: "氙",
valenceElectron: "5s<sup>2</sup>5p<sup>6</sup>",
relativeAtomicMass: 131.3,
metallic: false,
radioactivity: false,
},
{
index: 86,
chemicalymbol: "Rn",
chemicalName: "氡",
valenceElectron: "6s<sup>2</sup>6p<sup>6</sup>",
relativeAtomicMass: "〔222〕",
metallic: false,
radioactivity: true,
},
{
blank: true,
},
],
});
function checkExcessive(key) {
return [
"IIIB",
"IVB",
"VB",
"VIB",
"VIIB",
"VIIIa",
"VIIIb",
"VIIIc",
"IB",
"IIB",
].includes(key);
}
function borderFix(key) {
return [2, 5, 13].includes(key);
}
function cutElectronics(index) {
return electronics.value.slice(5 - index);
}
function cutElectronicsNum(index) {
return electronicsNum.value.slice(5 - index);
}
</script>
Vue代码链接