Here's something like the second option (the node does exist).
There are only two changes to your MWE, in attribute/,style
:
The xshift needs adjusting
The anchor point you need can be expressed as an angle
Sorry: I pass on the bonus.
Here it is -- I leave final adjustments to your taste:
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{trees}
\tikzstyle{every node}=[draw=black,thick,anchor=west, minimum height=2.5em]
\begin{document}
\begin{figure}[!htb]
\resizebox{\linewidth}{!}{
\begin{tikzpicture}[
criteria/.style={text centered, text width=2cm, fill=gray!50},
attribute/.style={%
grow=down, xshift=0cm,
text centered, text width=2cm,
edge from parent path={(\tikzparentnode.225) |- (\tikzchildnode.west)}},
first/.style ={level distance=8ex},
second/.style ={level distance=16ex},
third/.style ={level distance=24ex},
fourth/.style ={level distance=32ex},
fifth/.style ={level distance=40ex},
level 1/.style={sibling distance=10em}]
% Main Goal
\node[anchor=south]{SuperLongTitleWithNoMeaning}
[edge from parent fork down]
% Criteria and Attributes
child{node (crit1) [criteria] {Criteria1}
child[attribute,first] {node {Attribute\\Number1}}
child[attribute,second] {node {Attribute2}}
child[attribute,third] {node {Attribute3}}
child[attribute,fourth] {node {Attribute4}}
child[attribute,fifth] {node {Another\\Attribute}}}
%
child{node [criteria] {Criteria2}
child[attribute,first] {node {Attribute1}}
child[attribute,second] {node {Attribute2}}
child[attribute,third] {node {Third\\Criteria}}
child[attribute,fourth] {node {Longtext-\\criteria}}}
%
child{node [criteria] {Criteria3}
child[attribute,first] {node {Attribute\\two lines}}
child[attribute,second] {node {Attribute2}}
child[attribute,third] {node {Attribute3}}}
%
child{node [criteria] {Criteria4}
child[attribute,first] {node {Attribute1}}
child[attribute,second] {node {Attribute2}}}
%
child{node [criteria] {Criteria5}
child[attribute,first] {node {First\\Attribute}}
child[attribute,second] {node {Attribute2}}
child[attribute,third] {node {Third\\Criteria}}
child[attribute,fourth] {node {Longtext-\\criteria}}};
\end{tikzpicture}}
\caption{This is a nice tree.}
\end{figure}
\end{document}
I don't really get the question so I hope this is what you wanted. If you include a full document (such that we copy paste and see the problem on our systems) things are much more easier.
Here, you can change the default setting within a scope but your block
style had a node distance
which was resetting every time it is issued. I've made it 2mm such that we can see the difference easier.
\documentclass[tikz]{standalone}
\usetikzlibrary{arrows,shapes.geometric,positioning}
\begin{document}
\begin{tikzpicture}[decision/.style={diamond, draw, text width=4.5em, text badly centered, node distance=3.5cm, inner sep=0pt},
block/.style ={rectangle, draw, text width=6em, text centered, rounded corners, minimum height=4em, minimum height=2em},
cloud/.style ={draw, ellipse, minimum height=2em},
line/.style ={draw,-latex'},
node distance = 1cm,
auto]
\node [block] (1st) {1st};
\node [block, right= of 1st] (2nd1) {2nd1};
\begin{scope}[node distance=2mm and 10mm]%Here we change it for everything inside this scope
\node [block, above= of 2nd1] (2nd2) {2nd2};
\node [block, below= of 2nd1] (2nd3) {2nd3};
\node [block, right= of 2nd1] (3rd1) {3rd1};
\node [block, above= of 3rd1] (3rd2) {3rd2};
\node [block, above= of 3rd2] (3rd3) {3rd3};
\end{scope}
\node [block, below= of 3rd1] (3rd4) {3rd4};
\node [block, below= of 3rd4] (3rd5) {3rd5};
\path [line] (1st) -- (2nd1);
\path [line] (2nd1) -- (2nd2);
\path [line] (2nd1) -- (2nd3);
\path [line] (2nd2) -- (3rd3);
\path [line] (2nd1) -- (3rd1);
\path [line] (1st) -- (2nd1);
\end{tikzpicture}
\end{document}
Best Answer
Something like this?
I just added
yshift=5pt
to the node.If you want to move it down instead, just make it a negative dimension.
Code: