try this
\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[%
every node/.style = {anchor=west}]
\node[fill=red!40, draw] (n0) at (0,0) {Base node} ;
\node[fill=red!40, draw] (n1) at (0,-2) {Node with longer text} ;
\node[fill=red!40, draw] (n2) [below=of n1.west, right] {Node with even longer text} ;
\end{tikzpicture}
\end{document}

from de pgfmanual:
16.5.2 Basic Placement Options
Unfortunately, while perfectly logical, it is often rather counter-intuitive that in order to place a node above a given point, you need to specify the south anchor. For this reason, there are some useful options that allow you to select the standard anchors more intuitively:
/tikz/above
(default 0pt)
Does the same as anchor=south. If the is specified, the node is additionally shifted upwards by the given .
above \tikz \fill (0,0) circle (2pt) node[above] {above};
above \tikz \fill (0,0) circle (2pt) node[above=2pt] {above};
/tikz/below=<offset>
(default 0pt)
Similar to above.
/tikz/left=<offset>
(default 0pt)
Similar to above.
/tikz/right=<offset>
(default 0pt)
Similar to above.
This happens because by default, every label
is defined as draw=none,fill=none
. By setting every label/.style=draw
, you're overwriting these options, and the fill=green
from the every node
style is used. To get the expected behaviour, use every label/.append style=draw
.
Best Answer
No tricky no hackish solution because I think it's bad problem. It's a bad use of
every node
.This situation appears in some tutorials of the pgfmanual. First Andrew makes this remark : The key every label is called after the every node and It's necessary to complete with a text from the pgfmanual :
In other terms, the label is another node, so it's normal that you get some interferences.
What you need to do ? You can work with a ticky or hackish method or you can avoid the problem with a more natural code.
I tink the better way is to define a style not for
every node
but for a specific node