I wrote this some time ago to put in the function repository, but have not done so yet because I wanted to add more functionality.  To call the plot use
PeriodicTable[]

Just click on any element to view its box in larger detail.  The function is defined as follows:
layout = {
  {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2},
  {3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10},
  {11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17, 18},
  {19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36},
  {37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54},
  {55, 56, 0, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86},
  {87, 88, 0, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 0},
  {0, 0, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 0}
};
hydrogenColor = RGBColor[130 / 255., 223 / 255., 142 / 255.];
alkaliColor = RGBColor[217 / 255., 114 / 255., 64 / 255.];
alkalineColor = RGBColor[252 / 255., 169 / 255., 90 / 255.];
transitionMetalColor = RGBColor[242 / 255., 200 / 255., 104 / 255.];
lanthanideColor = RGBColor[232 / 255., 209 / 255., 118 / 255.];
actinideColor = RGBColor[219 / 255., 203 / 255., 136 / 255.];
metalColor = RGBColor[252 / 255., 159 / 255., 116 / 255.];
semimetalColor = RGBColor[140 / 255., 207 / 255., 242 / 255.];
nonmetalColor = RGBColor[82 / 255., 162 / 255., 203 / 255.];
nobleGasColor = RGBColor[230 / 255., 222 / 255., 195 / 255.];
defaultcolors = {
  "H" -> hydrogenColor, "He" -> nobleGasColor, "Li" -> alkaliColor, "Be" -> alkalineColor,
  "B" -> semimetalColor, "C" -> nonmetalColor, "N" -> nonmetalColor, "O" -> nonmetalColor,
  "F" -> nonmetalColor, "Ne" -> nobleGasColor, "Na" -> alkaliColor, "Mg" -> alkalineColor,
  "Al" -> metalColor, "Si" -> semimetalColor, "P" -> nonmetalColor, "S" -> nonmetalColor,
  "Cl" -> nonmetalColor, "Ar" -> nobleGasColor, "K" -> alkaliColor, "Ca" -> alkalineColor,
  "Sc" -> transitionMetalColor, "Ti" -> transitionMetalColor, "V" -> transitionMetalColor,
  "Cr" -> transitionMetalColor, "Mn" -> transitionMetalColor, "Fe" -> transitionMetalColor,
  "Co" -> transitionMetalColor, "Ni" -> transitionMetalColor, "Cu" -> transitionMetalColor,
  "Zn" -> transitionMetalColor, "Ga" -> metalColor, "Ge" -> semimetalColor, "As" -> semimetalColor,
  "Se" -> nonmetalColor, "Br" -> nonmetalColor, "Kr" -> nobleGasColor, "Rb" -> alkaliColor,
  "Sr" -> alkalineColor, "Y" -> transitionMetalColor, "Zr" -> transitionMetalColor,
  "Nb" -> transitionMetalColor, "Mo" -> transitionMetalColor, "Tc" -> transitionMetalColor,
  "Ru" -> transitionMetalColor, "Rh" -> transitionMetalColor, "Pd" -> transitionMetalColor,
  "Ag" -> transitionMetalColor, "Cd" -> transitionMetalColor, "In" -> metalColor, "Sn" -> metalColor,
  "Sb" -> semimetalColor, "Te" -> semimetalColor, "I" -> nonmetalColor, "Xe" -> nobleGasColor,
  "Cs" -> alkaliColor, "Ba" -> alkalineColor, "Hf" -> transitionMetalColor, "Ta" -> transitionMetalColor,
  "W" -> transitionMetalColor, "Re" -> transitionMetalColor, "Os" -> transitionMetalColor,
  "Ir" -> transitionMetalColor, "Pt" -> transitionMetalColor, "Au" -> transitionMetalColor,
  "Hg" -> transitionMetalColor, "Tl" -> metalColor, "Pb" -> metalColor, "Bi" -> metalColor,
  "Po" -> semimetalColor, "At" -> nonmetalColor, "Rn" -> nobleGasColor, "Fr" -> alkaliColor,
  "Ra" -> alkalineColor, "Rf" -> transitionMetalColor, "Db" -> transitionMetalColor,
  "Sg" -> transitionMetalColor, "Bh" -> transitionMetalColor, "Hs" -> transitionMetalColor,
  "Mt" -> transitionMetalColor, "Ds" -> transitionMetalColor, "Rg" -> transitionMetalColor,
  "Cn" -> transitionMetalColor, "Nh" -> metalColor, "Fl" -> metalColor, "Mc" -> metalColor,
  "Lv" -> metalColor, "Ts" -> nonmetalColor, "Og" -> nobleGasColor, "La" -> lanthanideColor,
  "Ce" -> lanthanideColor, "Pr" -> lanthanideColor, "Nd" -> lanthanideColor, "Pm" -> lanthanideColor,
  "Sm" -> lanthanideColor, "Eu" -> lanthanideColor, "Gd" -> lanthanideColor, "Tb" -> lanthanideColor,
  "Dy" -> lanthanideColor, "Ho" -> lanthanideColor, "Er" -> lanthanideColor, "Tm" -> lanthanideColor,
  "Yb" -> lanthanideColor, "Lu" -> lanthanideColor, "Ac" -> actinideColor, "Th" -> actinideColor,
  "Pa" -> actinideColor, "U" -> actinideColor, "Np" -> actinideColor, "Pu" -> actinideColor,
  "Am" -> actinideColor, "Cm" -> actinideColor, "Bk" -> actinideColor, "Cf" -> actinideColor,
  "Es" -> actinideColor, "Fm" -> actinideColor, "Md" -> actinideColor, "No" -> actinideColor,
  "Lr" -> actinideColor
};
Needs @ "Chemistry`";
selected = 1;
h = Length[layout] + 1;
elementBox[None] := "";
elementBox[atnum_, opts___] := Module[
  {
    sym = FromAtomicNumber @ atnum,
    name = Capitalize @ ElementData[atnum, "Name"],
    color,
    mass = QuantityMagnitude @ ElementData[atnum, "AtomicMass"]
  },
  color = sym /. defaultcolors;
  EventHandler[
    Graphics[
      {
        {
          color,
          EdgeForm @ Directive @ Black,
          Rectangle[{0, 0}, {1, 1.25}]
        },
        Inset[Style[atnum, Black, FontSize -> Scaled[0.25]], {0.5, 1.1}],
        Inset[Style[sym, Black, FontSize -> Scaled[0.5]], {0.5, 0.7}],
        Inset[Style[mass, Black, FontSize -> Scaled[0.18]], {0.5, 0.35}],
        Inset[Style[name, Black, FontSize -> Scaled[0.13]], {0.5, 0.15}]
      },
      opts
    ],
    {"MouseClicked" :> (selected = atnum)}
  ]
];
PeriodicTable[] := (
  selected = None;
  Graphics[
    {
      Inset[
        Dynamic[elementBox @ selected, TrackedSymbols :> {selected}],
        {3, 9},
        {Center, Center},
        {2.5, 2.5}
      ],
      MapIndexed[
        Function[
          If[UnsameQ[#, 0],
            Inset[
              elementBox @ #,
              {0, h} + {0.75, -0.94} * Reverse[#2],
              {Center, Center},
              {1, 1}
            ],
            Nothing
          ]
        ],
        layout, {2}
      ]
    },
    ImageSize -> 700
  ]
)